1. 用户相关命令
1.1 useradd:添加用户
语法:
useradd [选项] 用户名
选项:
-c <comment>:备注。备注会保存在 passwd 的备注栏中;
-d <家目录>:指定用户登陆后进入的目录;
-D:变更预设值;
-e<有效期限>:指定帐号的有效期限;
-f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;
-g<用户组>:指定用户所属的用户组;
-G<用户组>:指定用户所属的附加用户组;
-m:自动建立用户的家目录;
-M:不要自动建立用户的家目录;
-n:取消建立以用户名称为名的用户组;
-r:建立系统帐号;
-s <shell>:指定用户登入后所使用的 shell;
-u <uid>:指定用户id。
示例:
useradd -d /home/ftp -M -g ftp -s /sbin/nologin -u 1100 xiaoming
passwd xiaoming
上面例子中设置的用户名是 xiaoming,UID 是 1100,使用 /home/ftp
作为家目录,属于 ftp 这个用户组,登陆后默认的 shell 是 /sbin/nologin
(即无法登陆系统)。
1.2 passwd:修改用户登录密码
passwd 用于设置用户的认证信息,包括用户密码、密码过期时间等。
root 用户可以通过 passwd 管理所有用户的密码,一般用户只能使用 passwd 修改自己的密码。
语法:
passwd [选项] [用户名]
选项:
-d:删除密码,仅有系统管理者才能使用;
-f:强制执行;
-k:设置只有在密码过期失效后,方能更新;
-l:锁住密码;
-s:列出密码的相关信息,仅有系统管理者才能使用;
-u:解开已上锁的帐号。
/etc/passwd
文件中,每一行的格式都类似 lihongfeng:x:1000:50::/home/ftp:/bin/bash
,用冒号分隔,分别表示“用户名:密码:UID:GID:描述:家目录:默认的 shell”。
对于 UID,root 用户的 UID 是 0,普通用户从 500 开始(我的 CentOS 7 从 1000 开始)。
示例:
passwd -l xiaoming // 锁定用户 xiaoming,使其不能改密码
passwd -d xiaoming // 删除用户 xiaoming 的密码
passwd // 修改自己的密码
1.3 userdel:删除用户
若不加选项,默认仅删除用户帐号,而不删除相关文件。
语法:
userdel [选项] 用户名
选项:
-f:强制删除用户,即使用户当前已登录;
-r:删除用户的同时,删除与用户相关的所有文件。
1.4 usermod:编辑用户
usermod 命令不允许改变已经登录的用户的名称。
语法:
usermod [选项] 用户名
选项:
-c <comment>:修改用户帐号的备注;
-d <家目录>:修改用户的家目录;
-e <有效期限>:修改帐号的有效期限;
-f <缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g <用户组>:修改用户所属的用户组;
-G <用户组>;修改用户所属的附加用户组;
-l <用户名>:修改用户的用户名;
-L:锁定用户密码,使密码无效;
-s <shell>:修改用户登入后所使用的 shell;
-u <uid>:修改用户ID;
-U:解除密码锁定。
示例:
将用户 xiaowang 添加到 game 用户组中:
usermod -g game xiaowang
将用户 xiaowang 的用户名改为 wang:
usermod -l game wang xiaowang
2. 用户组相关命令
2.1 groupadd:添加用户组
语法:
groupadd [选项] 新的用户组名
选项:
-g:指定新建工作组的 GID;
-r:创建系统工作组,系统工作组的 GID 小于 500;
-K:覆盖配置文件“/ect/login.defs”;
-o:允许添加 GID 号不唯一的工作组。
示例:
groupadd -g 666 gameboy
2.2 groupdel:删除用户组
语法:
groupdel 用户组名
示例:
groupdel gameboy
2.3 groupmod:编辑用户组
语法:
groupmod [选项] 用户组名
选项:
-g<群组识别码>:设置欲使用的群组识别码;
-o:重复使用群组识别码;
-n<新群组名称>:设置欲使用的群组名称。
2.4 newgrp:如果用户属于多个用户组,切换用户组
语法:
newgrp [选项] 用户组名
选项:
-U:解除密码锁定。
3. 用户和用户组的相关文件
用户信息存放在:
/etc/passwd
/etc/shadow
用户组信息存放在:
/etc/group
/etc/gshadow
3.1 /etc/passwd:存放用户的所有信息
3.1.1 解释
/etc/passwd
文件中,每一行的格式都类似 lihongfeng:x:1000:50::/home/ftp:/bin/bash
,用冒号分隔,分别表示“用户名:密码:UID:GID:描述:家目录:默认的 shell”。
真正加密后的用户密码存放到 /etc/shadow
文件中,而在 /etc/passwd
文件的密码字段中只存放一个特殊的字符“x”或“*”。
UID (User ID)一般与用户名一一对应。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的家目录以及不同的登录 Shell 等。
通常 UID 的取值范围是 0~65535。0 是 root 的标识号,1~99 由系统保留,作为管理账号,普通用户的标识号从 100 开始。在 Linux 系统中,这个界限是 500。
可以为用户指定某个 Shell。如果不指定,那么系统使用 sh 为默认的登录 Shell,即这个字段的值为 /bin/sh
。
可以指定用户的登录 Shell 为某个特定的程序,从而可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户自动退出系统。有些 Linux 系统要求只有那些在系统中登记了的程序才能出现在这个字段中。
3.1.2 伪用户(psuedo users)
伪用户在 /etc/passwd
文件中也占有一条记录,但是不能登录,因为它们的登录 Shell 为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。
常见的伪用户如下所示:
bin:拥有可执行的用户命令文件
sys:拥有系统文件
adm:拥有帐户文件
uucp:UUCP 使用
lp:lp 或 lpd 子系统使用
ftp:FTP 使用
nobody:NFS 使用
3.1.3 文件内容
每个用户都在 /etc/passwd 文件中对应一行:
[root@VM_120_242_centos ftp]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:997:995:User for polkitd:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
libstoragemgmt:x:996:994:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:995:993::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
nginx:x:994:992:Nginx web server:/var/lib/nginx:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
lihongfeng:x:1000:50::/home/ftp:/bin/bash
zhangmengfei:x:1001:1001::/home/zhangmengfei:/bin/bash
sambaadmin:x:993:991::/home/sambaadmin:/bin/bash
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
zhanzhiruo:x:1003:50::/home/ftp:/bin/bash
qinyanling:x:1004:50::/home/ftp:/bin/bash
linyushen:x:1005:50::/home/ftp:/sbin/nologin
winyinliang:x:1006:50::/home/ftp:/sbin/nologin
hexiaoyong:x:1007:50::/home/ftp:/sbin/nologin
xuejianglong:x:1008:50::/home/ftp:/sbin/nologin
wenyinliang:x:1009:50::/home/ftp:/sbin/nologin
3.2 /etc/group:存放用户组的所有信息
3.2.1 解释
/etc/group
文件中,每一行的格式都类似 lihongfeng:x:1000:
,用冒号分隔,分别表示“用户组名:密码:组标识号:组内用户列表”。
一般 Linux 系统的用户组都没有密码,这个字段一般为“x”或“*”。
“组内用户列表”是属于这个组(包括主组和附加组)的所有用户的列表,逗号(,)分隔。
Linux 系统中所有用户都属于某个用户组,是管理及控制访问权限的一种手段。
每个用户都属于一个或多个用户组,一个用户组中可以有一个或多个用户。
当一个用户同时是多个组中的成员时,在 /etc/passwd
文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。
用户要访问属于附加组的文件时,必须首先使用 newgrp
命令使自己成为所要访问的组中的成员。
用户组的所有信息都存放在 /etc/group
文件中。此文件的格式也类似于 /etc/passwd
文件,由冒号隔开若干个字段,这些字段有:
3.2.2 文件内容
[root@VM_120_242_centos ftp]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
...
rpc:x:32:
rpcuser:x:29:
nfsnobody:x:65534:
zhanzhiruo:x:1003:
qinyanling:x:1004:
3.3 /etc/shadow:用户密码
3.3.1 解释
/etc/shadow
文件中,每一行的格式都类似 lihongfeng:$1$rPdIHadL$j6ShuTax.3z3ucN5zNCNZ.:17648:0:99999:7:::
,用冒号分隔,分别表示“用户组名:加密后的密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志”。
“最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样,一般是 1970 年 1 月 1 日。
“最小时间间隔”指的是两次修改口令之间所需的最小天数。
“最大时间间隔”指的是口令保持有效的最大天数。
“警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
“不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。
“失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。
/etc/shadow
中的记录行与 /etc/passwd
中的一一对应,它由 pwconv 命令根据 /etc/passwd
中的数据自动产生。
3.3.2 文件内容
[root@VM_120_242_centos ftp]# cat /etc/shadow
root:$1$dfncWgpJ$CRV0AzEgxz250fVrEmXfSu1::0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::
adm:*:16659:0:99999:7:::
...
hexiaoyong:$1$SYyC3AOQ$6kzvHQQc2X0VMyGOwxiC630:17648:0:99999:7:::
xuejianglong:$1$tMrO2qpF$zAMb1m2yONzIE45VIVMY.M0:17648:0:99999:7:::
wenyinliang:$1$kiI..khU$QLR/RoEX2aV9Wy/mdZekZfn/:17648:0:99999:7:::
3.4 /etc/gshadow:用户组的密码
[root@VM_120_242_centos ftp]# cat /etc/gshadow
root:::
bin:::
daemon:::
sys:::
...
nfsnobody:!::
zhanzhiruo:!::
qinyanling:!::