创建用户组
创建组使用的命令为 groupadd
,它的使用和 useradd
很相像,格式如下:
groupadd [OPTION] ... GROUPNAME
例:创建一个名为 testGroup
的组。
[root@localhost ~]# groupadd testGroup
[root@localhost ~]# tail -1 /etc/group
testGroup:x:1003:
可以看到,通过 groupadd
命令创建了一个组,并且该组的信息可以在 /etc/group
中看到。
指定GID
groupadd
命令可以通过 -g
选项指定新创建组的 GID,GID 的范围在 /etc/login.defs
中有定义,最小值和最大值分别对应 GID_MIN
和 GID_MAX
属性。和 UID 相同的是,创建组不指定 GID 时生成的 GID 也是以最近一次创建的组的 GID 为基础再自增 1。
创建系统组
useradd
命令可以通过 -r
选项指定创建系统用户,而 groupadd
命令可以通过 -r
选项来指定创建系统组,对于 CentOS 6,系统组 GID 的范围必须在 0-500,对于 CentOS 7,系统组 GID 的范围必须在 0-1000。
补充命令
su
su
命令名称是 switch user
的缩写,译为切换用户。
它的作用是切换当前会话的用户或使用指定的用户身份来运行命令。
非登录切换和登录切换
例:切换用户身份为 user2
。
[root@localhost ~]# su user2
[user2@localhost root]$ exit
exit
[root@localhost ~]# su - user2
上一次登录:二 9月 10 11:13:21 CST 2019pts/1 上
[user2@localhost ~]$
通过上述示例可以看到,su
命令后可以直接跟要切换到的用户名,也可以中间使用一个 -
分割。从输出结果可以看到是有差别的:
- 执行
su user2
将身份切换到了user2
,但用户当前工作目录还是在原来 root 用户的家目录。 - 而通过执行
su - user2
将身份切换到user2
,用户当前的工作目录也随之切换到了user2
的家目录。
所以上述实际上是两种登录方式,su USERNAME
这种方式为非登陆式切换,不会读取目标用户的配置文件;
而 su - USERNAME
这种方式为登录式切换,也叫完全切换,会读取目标用户的相关配置文件。
登录式切换也可以使用
su -l USERNAME
,与su - USERNAME
效果相同。
看如下示例:
[root@localhost ~]# su user2
[user2@localhost root]$ echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[user2@localhost root]$ exit
exit
[root@localhost ~]# su - user2
上一次登录:二 9月 10 11:20:55 CST 2019pts/1 上
[user2@localhost ~]$ echo "$PATH"
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user2/.local/bin:/home/user2/bin
可以看到,非登录式切换和完全切换后输出的 $PATH
变量值是不同的,这是因为上述非登录切换输出的变量还是原来 root 用户下的变量值,而完全切换后读取了 user2
特有的配置。
root 用户通过
su
命令切换到其它用户不需要密码,而非root
用户切换到其它用户时需要密码。
以指定用户身份执行命令
如果不需要完全切换到某用户下,而只是要使用某用户的身份来执行命令,则可以通过 -c
选项来指定,例:
[root@localhost ~]# su - user2 -c 'echo "$PATH"'
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user2/.local/bin:/home/user2/bin
上述示例就是在 root 用户登录的环境下以 user2
的身份来执行 echo "$PATH"
命令。
使用指定的shell程序
可以通过 -s
选项让 su
命令切换到目标用户后直接使用指定的 shell 程序,例:
[root@localhost ~]# su user2 -s /bin/sh
sh-4.2$
更多详细使用可通过
man su
查看。
评论区