1. 用户配置文件
1.1 用户信息文件 /etc/passwd
/etc/passwd 文件的权限是644,它的部分内容如下:
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
共有7个字段,中间用冒号分割。
第1个字段:用户名称
第2个字段:密码标志(密码存放在 /etc/shadow 文件中)
第3个字段:UID(用户ID)
0 : 超级用户(一般为root)
1-499 : 系统用户(伪用户,不可删除和登陆)
500-65535 : 普通用户(自行添加的用户)
如果把普通用户的UID改为0,则该普通用户就会拥有超级用户的权限,但家目录不会变。
第4个字段:GID(用户初始组ID)
初始组: 指用户一建立就立刻拥有这个用户组的相关权限,每个用户只能有一个初始组。初始组的名称一般和用户名相同。
附加组: 指用户可以加入多个其他的用户组,并拥有相关的组权限,附加组可以有多个。
第5个字段:用户说明(备注)
第6个字段:用户的家目录
超级用户: /root
普通用户:/home/用户名
第7个字段:登录之后的shell
shell就是linux的命令解释器。
在 /etc/passwd 文件中,除了标准shell是 /bin/bash 之外,还可以写成 /sbin/nologin(不可登录)。
1.2 影子文件 /etc/shadow
影子文件 /etc/shadow 的文件权限是000,其中保存了加密后的用户密码。
它的部分内容如下:
root:$6$AM4DdsqkD09LYvbq$ljcjuHOAz8oAowhIhqx6eYnUeER4zQPiTNr44p1GTK/MJmnpHbMSbmKdXa5EOVk/ssQt.y46XTqMRQB5Hw2Uj0:17116:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
shutdown:*:15980:0:99999:7:::
halt:*:15980:0:99999:7:::
mail:*:15980:0:99999:7:::
uucp:*:15980:0:99999:7:::
operator:*:15980:0:99999:7:::
games:*:15980:0:99999:7:::
gopher:*:15980:0:99999:7:::
ftp:*:15980:0:99999:7:::
nobody:*:15980:0:99999:7:::
dbus:!!:17116::::::
vcsa:!!:17116::::::
共有9个字段,中间用冒号分割。
第1个字段:用户名
第2个字段:加密后的密码
加密算法升级为SHA512散列加密算法。
如果密码是 "!!" 或 "*" ,表示没有密码,不能登录。
第3个字段:密码最后一次的修改日期
时间戳表示,使用1970年1月1日作为标准时间,每过一天,它的值加1。
第4个字段:禁止修改密码的时间间隔(和第3个字段相比,0表示没有限制)
第5个字段:密码的有效期(和第3个字段相比)
第6个字段:密码到期前提示修改的警告天数(和第5个字段相比)
第7个字段:密码过期后的宽限天数(和第5个字段相比)
0 : 表示密码过期后,立即失效,没有指明也等同于0。
-1 :表示密码过期后,永远不会失效。
第8个字段:账号失效时间(时间戳表示)
第9个字段:保留字段
时间戳(以天为单位)的换算:
时间戳换算为日期:
date -d "1970-01-01 17116 days"
日期换算为时间戳:
echo $(($(date --date="2017/01/25" +%s)/86400+1))
1.3 用户组信息文件 /etc/group
组信息文件 /etc/group 的权限为644,它的部分内容如下:
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon
tty:x:5:
disk:x:6:
lp:x:7:daemon
mem:x:8:
共有4个字段,中间用冒号分割。
第1个字段:组名称
第2个字段:组密码标志
第3个字段:GID(组ID)
第4个字段:组中的附加用户
1.4 用户组密码文件 /etc/gshadow
组密码文件 /etc/gshadow 的权限是000,它的部分内容如下:
root:::
bin:::bin,daemon
daemon:::bin,daemon
sys:::bin,adm
adm:::adm,daemon
tty:::
disk:::
lp:::daemon
mem:::
共有4个字段,中间用冒号分割。
第1个字段:组名称
第2个字段:组密码(很少用)
第3个字段:组中的管理员用户名称
第4个字段:组中的附加用户
2. 用户管理相关文件
2.1 用户的家目录
- 超级用户:/root,所有者和所属组都是root,权限是550
- 普通用户:/home/用户名,所有者和所属组都是该用户名,权限是700
2.2 用户的邮箱
- /var/spool/mail/用户名
2.3 用户模板目录
- /etc/skel
当创建一个新用户时,用户模板目录中的文件(包括隐藏文件),会自动出现在用户的家目录中。
3. 用户管理命令
3.1 添加用户 useradd
命令格式:useradd [选项] 用户名
常见选项:
-u 用户ID:手工指定用户的UID(不推荐手工指定)
-d 家目录:手工指定用户的家目录(不推荐手工指定)
-c 用户说明:手工指定用户的说明(不推荐手工指定)
-g 组名:手工指定用户的初始组(不推荐手工指定)
-G 组名:指定用户的附加组(多个附加组中间用逗号分隔)
-s shell:手工指定用户的登录shell。默认是/bin/bash。
-r :创建一个系统用户
常见用法:
useradd user01
useradd -r -g mysql -s /bin/false mysql
添加了一个新的用户之后,系统会默认自动创建用户的家目录、用户的初始组(组名和用户名相同)、用户的邮箱,而且 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow 文件的内容也会随之自动更新。
添加一个新用户时,如果没有指定选项,则使用默认值。
用户默认值文件为 /etc/default/useradd,它的内容如下:
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
相关说明:
GROUP:用户的默认组(现在的linux采用私有模式,该选项不会生效)
HOME:用户的默认一级家目录
INACTIVE:密码过期宽限天数(shadow文件的第7个字段)
EXPIRE:密码失效时间(shadow文件的第8个字段)
SHELL:默认的shell
SKEL:用户的模板目录
CREATE_MAIL_SPOOL:是否建立邮箱
还有一个用户默认值文件为 /etc/login.defs,内容较多,这里不作赘述。
3.2 设置用户密码 passwd
添加了用户后,一般都需要给该用户设置密码,否则,该用户就是不完整的,也就不能登录。
命令格式:passwd [选项] 用户名
该命令可用于设置或修改用户的密码,如果后面没有指定用户名,则表示给当前登录用户设置密码。
常见选项:
-S:查询用户密码的密码状态。仅root用户可用。
-l:暂时锁定用户。仅root用户可用。
-u:解锁用户。仅root用户可用。
--stdin:通过管道符将输出的字符串作为用户的密码。
常见用法:
passwd user01
只有超级用户才可以修改其他用户的密码,故只有超级用户才可以在后面指定用户名。
passwd
修改当前登录用户的密码。普通用户更改自己的密码时,必须遵守密码的复杂性原则。
echo "123456" | passwd --stdin user01
将user01的密码设置或修改为123456
3.3 修改用户信息 usermod
命令格式:usermod [选项] 用户名
常见选项:
-u 用户ID:修改用户的UID
-c 用户说明:修改用户的说明信息
-G 组名:修改用户的附加组
-L:临时锁定用户
-U:解锁
常见用法:
usermod -c "test user01" user01
修改user01用户的说明信息
usermod -G root user01
将user01用户加入附加组root
3.4 修改用户密码状态 chage
命令格式:chage [选项] 用户名
常见选项:
-l:列出用户的详细密码状态
-d 日期:修改密码最后一次的更改日期(shadow文件的第3个字段)
-m 天数:两次密码的修改间隔(shadow文件的第4个字段)
-M 天数:密码的有效期(shadow文件的第5个字段)
-W 天数:密码过期前的警告天数(shadow文件的第6个字段)
-I 天数:密码过期后的宽限天数(shadow文件的第7个字段)
-E 日期:账号失效时间(shadow文件的第8个字段)
其实,通过vi命令修改shadow文件会更加方便。
常见用法:
chage -l user01
查看user01用户的详细密码状态。
chage -d 0 user01
把密码最后一次的修改日期归0,这样用户一登录就必须修改密码。这条命令比较常用。
3.5 删除用户 userdel
命令格式:userdel [-r] 用户名
常见选项:
-r:删除用户的同时,删除用户的家目录
常见用法:
userdel -r user01
删除user01用户,同时删除它的家目录。
删除用户实际上是对 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow 文件中的相关行进行删除,同时还会删除用户的家目录和用户的邮箱。
3.6 查看用户ID信息 id
命令格式:id 用户名
常见用法:
id user01
查看用户的UID、GID和组名(包括初始组和附加组)。
3.7 切换用户身份 su
命令格式:su [选项] 用户名
常见选项:
-:连带用户的环境变量一起切换
-c 命令:仅执行一次命令,而不切换用户身份
超级用户切换为其他用户时不需要密码,而普通用户切换为其他用户时需要密码。
常见用法:
su user01
切换为user01用户,但并不同时切换环境变量。这种用法会出现一些问题,故不推荐。
su - user01
完全切换为user01用户,同时切换环境变量。推荐使用。
su - root -c "useradd user02"
仅执行一次添加用户的命令,而不切换为root。
4. 用户组管理命令
4.1 添加用户组 groupadd
命令格式: groupadd [选项] 组名
常见选项:
-g 组ID:手工指定组的ID
常见用法:
groupadd testgroup01
4.2 修改用户组 groupmod
命令格式:groupmod [选项] 组名
常见选项:
-g 组ID:修改组的ID
-n 新的组名:修改组的名称
常见用法:
groupmod -n testgroup02 testgroup01
把组名testgroup01修改为testgroup02
4.3 删除用户组 groupdel
命令格式:groupdel 组名
注意:如果组中有初始用户,则不可使用该方法删除组。附加用户不会影响组的删除。
4.4 修改组中的成员 gpasswd
命令格式:gpasswd [选项] 组名
常见选项:
-a 用户名:向组中添加附加用户
-d 用户名:把组中的附加用户删除
注意:gpasswd 只能对组中的附加用户进行添加或者删除操作。
常见用法:
gpasswd -a user01 root
向root组中添加附加用户user01
gpasswd -d user01 root
把root组中的附加用户user01删除