系统环境:CentOS Linux release 7.3.1611 x86_64 GNU/Linux
查看所有用户信息
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...
rethink:x:1001:1001::/home/rethink:/bin/bash
jenkins:x:1002:1002::/home/jenkins:/bin/bash
$ cat /etc/passwd | grep jenkins
jenkins:x:1002:1002::/home/jenkins:/bin/bash
#字段格式说明:
`用户名:密码:用户UID:用户组GID:备注:用户家目录:用户默认shell`
/etc/passwd
所有用户都有读权限,但只有管理员有写权限,每一行都表示一个用户。第三个字段表示用户UID,0表示管理员root,1~500表示系统用户,501-65535表示普通用户,不同的Linux发行版,可能会有所差别。最后一个字段表示用户默认shell的路径,系统用户默认shell一般为/sbin/nologin
,表示该用户不可登录。
第二个字段是用户的密码,x是占位符,用户真正的密码是密文保存在/etc/shadow
文件中的,这个文件只有管理员可读。
# cat /etc/shadow
root:$1$7TJOo0N3$jWOx8FmXcEMN88gdGISg0/::0:99999:7:::
rethink:$6$/XN/F6Eu$yAwE5WN811EnmyLEa.k02MbYCDVw/vWlqn57QItruVRWMpVQGL1LLcg3xbOKhLGpiQ8f/6S7DKt.GJntPu7Kn/:17620:0:99999:7:::
jenkins:$6$oIK6zhjM$GVOCRHB4X1XU.iUhEHi5LHmuv06HFWub7dz7IRT7hHTanKffyBFXyGGZ5mIXt8gD40kB18KdHTZEH4xbOXjFP1:17645:0:99999:7:::
/etc/shadow
文件中各个字段对应的含义,可以通过man 5 shadow
命令来查看。
用户管理命令
使用--help参数,可查看命令更多详细介绍;
- 添加新用户:useradd
# useradd test
# cat /etc/passwd | grep test
test:x:1004:1004::/home/test:/bin/bash
以上可以看到,useradd命令确实新增了一个新用户:test,并且系统会自动设置用户的一些属性,如UID,GID,HOME,SHELL HOME等。我们也可以创建新用户时指定这些信息:
useradd -u UID:指定新用户的UID,这个UID必须大于500,并且没有被其他用户占用;
useradd -g GID/GROUP_NAME:指定用户所属组,可以是GID或GROUPNAME,用户组必须是真实存在的;
useradd -G GROUPS:指定附属用户组;
useradd -c COMMENT:指定用户的备注信息
useradd -d PATH:指定用户的家目录
useradd -s SHELL:指定用户的默认shell
useradd -s /sbin/nologin:该用户不可登录,和系统用户最后一个字段的值相同
- 设置用户的认证信息: passwd,包括用户密码、密码过期时间等
普通用户只能修改自己的密码,直接运行passwd即可 。新建用户后,若要为新用户创建密码,可使用 passwd USERNAME
# passwd test
Changing password for user test.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
- 删除用户: userdel
# userdel USERNAME
`删除用户的同时删除用户HOME目录`
# userdel -r USERNAME
- 修改用户属性信息: usermod
Usage: usermod [options] LOGIN
Options:
-c, --comment COMMENT new value of the GECOS field
-d, --home HOME_DIR new home directory for the user account
-e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE
-f, --inactive INACTIVE set password inactive after expiration
to INACTIVE
-g, --gid GROUP force use GROUP as new primary group
-G, --groups GROUPS new list of supplementary GROUPS
-a, --append append the user to the supplemental GROUPS
mentioned by the -G option without removing
him/her from other groups
-h, --help display this help message and exit
-l, --login NEW_LOGIN new value of the login name
-L, --lock lock the user account
-m, --move-home move contents of the home directory to the
new location (use only with -d)
-o, --non-unique allow using duplicate (non-unique) UID
-p, --password PASSWORD use encrypted password for the new password
-R, --root CHROOT_DIR directory to chroot into
-s, --shell SHELL new login shell for the user account
-u, --uid UID new UID for the user account
-U, --unlock unlock the user account
-Z, --selinux-user SEUSER new SELinux user mapping for the user account
- 检索用户属性信息: id
# id jenkins
uid=1002(jenkins) gid=1002(jenkins) groups=1002(jenkins)
`显示用户UID`
#id -u USERNAME
`显示用户默认组ID`
#id -g USERNAME
`显示用户附加组ID`
#id -G USERNAME
`显示用户/默认组/附加值的名称`
#id -n -g/-G/-u USERNAME
- 检索用户属性信息 : finger,显示格式比id命令更加友好
`安装finger命令`
# yum install finger -y
# finger
Login Name Tty Idle Login Time Office Office Phone Host
root root pts/0 Jun 28 16:28 (101.81.92.18)
# finger jenkins
Login: jenkins Name:
Directory: /home/jenkins Shell: /bin/bash
Last login Wed Jun 27 19:05 (CST) on pts/0
No mail.
No Plan.
# finger -s jenkins
Login Name Tty Idle Login Time Office Office Phone Host
jenkins pts/0 * Jun 27 19:05
查看所有用户组信息
$ cat /etc/group
root:x:0:
bin:x:1:
...
rethink:x:1001:
jenkins:x:1002:
docker:x:1003:
#字段说明
`组名:组密码:GID:以group_name为附加组的用户列表`
# cat /etc/group | grep test:x
test:x:1005:test4,test5
Linux下,每个用户都有一个用户组,系统可以对用户组中的所有用户进行集中的权限管理。当创建用户时,如果没有为其指明所属组,则就为其定义一个私有的用户组,其名称与用户名相同。私有组可以变成普通用户组,当把其他用户加入到该组中时,其就变成了普通用户组。
用户组管理命令
- 添加新用户组:groupadd
# groupadd bbox
# cat /etc/group|grep bbox
bbox:x:1011:
- 删除用户组: groupdel
# groupdel bbox
# cat /etc/group|grep bbox
#
- 重命名用户组:groupmod
`命令格式:groupmod -n new_name old_name`
# groupmod -n test_1 test
# cat /etc/group|grep test_1
test_1:x:1005:test4,test5
补充命令
- who命令、whoami命令、who am i命令和w命令
# who
root tty1 2018-06-28 18:18
root pts/0 2018-07-03 17:43
# who am i
root pts/0 2018-07-03 17:43
# su - docker
Last login: Mon Jul 2 18:51:11 CST 2018 on pts/0
$ whoami
docker
$ who am i
root pts/0 2018-07-03 17:43
$ who
root tty1 2018-06-28 18:18
root pts/0 2018-07-03 17:43
$ w
18:32:24 up 5 days, 15 min, 2 users, load average: 0.00, 0.02, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 Thu18 4days 0.10s 0.10s -bash
root pts/0 101.81.92.18 17:43 0.00s 0.00s 0.00s w
总结如下 :
-
whoami
显示的是当前操作用户的用户名 -
who am i
显示的是登录时的用户名 ,此命令相当于who -m -
who
显示当前真正登录系统中的用户(不会显示那些用su命令切换用户的登录者) -
w
不但可以显示有谁登录到系统,还可以显示出这些用户当前正在进行的工作,并且统计数据相对who命令来说更加详细 ;
- Linux切换用户命令:su
su
是单词switch user的缩写。通过su
命令,可以从普通用户切换到root用户,也可以从root用户切换到普通用户。从普通用户切换到root用户需要密码(该密码是普通用户的密码,但从root用户切换到普通用户不需要密码。su
和su -
的区别
su - root is the same as su - just like login as root,then the shell is login shell,which mean it will expericene a login process,usually .bash_profile and .bashrc will be sourced. su root is the same as su like you open an interactive shell in root name,then only .bashrc will be sourced.
su
命令只是切换到了root身份,但shell工作环境仍然是普通用户的环境;而su -
命令会将用户身份和shell环境一起切换到root,只有切换了shell环境才不会出现PATH环境变量的错误。su切换成root用户以后,pwd
一下,发现工作目录仍然是普通用户的工作目录;而用su -
命令切换以后,工作目录变成root的工作目录了。所以要从当前用户切换到其它用户时,应该使用su -
命令。如:
$ whoami
docker
$ su root
Password:
# echo $PWD
/home/docker
# su - root
Last login: Tue Jul 3 18:54:23 CST 2018 on pts/1
[root@JDu4e00u53f7 ~]# echo $PWD
/root
`用户的HOME目录已经改变了`
【To be continued...】