基本概念:
Linux系统支持多个用户在同一时间内登录,不同用户可以执行不同的任务,并且互不影响。
用户组
是具有相同特征用户的逻辑集合。比如建立一个组,然后将所有需要访问此文件的用户放入这个组中,那么组内用户就具有了和组一样的权限。
用户的用户组的关系:
一对一:一个用户可以是组中唯一成员。
一对多:一个用户可以在多个用户组中,此用户具有这些组的共同权限。
多对一:多个用户可以在一个组中,这些用户具有组的相同的权限。
多对多:多个用户可以在多个组中。
用户和用户组管理相关的文件
用户的相关信息包含以下几项:?
(1)用户基本信息:存储在/etc/passwd文件中?。
(2)用户密码信息:存储在/etc/shadow文件中 。
(3)用户组基本信息:存储在/etc/group文件中 。
(4)用户组密码信息:存储在/etc/gshadow文件中。
(5)用户个人文件:主目录默认位于/home/用户名,邮箱位于/var/spool/mail/用户名。
/etc/passwd
Linux系统将所有用户名与ID的对应关系都存储在/etc/passwd文件中:
[root@6c810f7f0bd8 /]# 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:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
max:x:1000:1000::/home/max:/bin/bash
各个字段以冒号分割,例如最后一行max:x:1000:1000::/home/max:/bin/bash,各个字段的含义如下表所示:
字段序号 | 内容 | 含义 | 1 | max | 用户名 | 2 | x | x表示该用户设有密码,真正的密码保存在/etc/shadow中 | 3 | 1000 | 用户ID(UID) | 4 | 1000 | 用户组ID(GID) | 5 | | 描述信息 | 6 | /home/max | 主目录 | 7 | /bin/bash | 默认shell |
/etc/shadow
Linux系统将所有用户的密码信息储存在/etc/shadow中:
[root@6c810f7f0bd8 /]# cat /etc/shadow
root:$6$Ut8D53FqcZRP/tqH$ckM1ABa3OaPQh/0BHgZ1IxheJn1IVZ8oBXHK2c1zmfHKnWpIjxZSCcWwjxlK/600PJDYm/oYyhCp5eyg7SSY50:18887:0:99999:7:::
bin:*:18397:0:99999:7:::
daemon:*:18397:0:99999:7:::
adm:*:18397:0:99999:7:::
lp:*:18397:0:99999:7:::
sync:*:18397:0:99999:7:::
shutdown:*:18397:0:99999:7:::
halt:*:18397:0:99999:7:::
mail:*:18397:0:99999:7:::
operator:*:18397:0:99999:7:::
games:*:18397:0:99999:7:::
ftp:*:18397:0:99999:7:::
nobody:*:18397:0:99999:7:::
dbus:!!:18600::::::
systemd-coredump:!!:18600::::::
systemd-resolve:!!:18600::::::
max:$6$qzcSyCE4VFQmEcTm$p7ozCf/4pv3KbwS0dK8UXxZMnYjuYp/v3t5XUf42qB0XxXe.X30nWJgRoEqiRTbLv09KodP9BKiLQRlgxt.SA1:18887:0:99999:7:::
各个字段的含义如下表所示:
字段序号 | 含义 | 1 | 用户名 | 2 | 加密密码。目前Linux采用的是SHA512散列算法加密,比MD5或DES加密算法加密等级更高。 | 3 | 最后一次修改时间,显示的是距离Unix元年即1970年1月一日的天数。 | 4 | 最小修改时间间隔,即从最后一次修改时间起多长时间内不能修改密码。 | 5 | 密码有效期。默认99999 | 6 | 密码需要变更前的警告天数,提醒用户“再过n天你的密码就要过期了“ | 7 | 密码过期后的宽限时间,若用户密码过期了没有及时修改,在宽限时间内用户还是可以登录。 | 8 | 账号失效时间。 | 9 | 保留字段。目前还没有使用 |
/etc/group
Linux将用户组的所有信息放在/etc/group文件中:
[root@6c810f7f0bd8 /]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:33:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
users:x:100:
nobody:x:65534:
dbus:x:81:
utmp:x:22:
utempter:x:35:
input:x:999:
kvm:x:36:
render:x:998:
systemd-journal:x:190:
systemd-coredump:x:997:
systemd-resolve:x:193:
ssh_keys:x:996:
max:x:1000:
各个字段的含义如下表所示:
字段序号 | 含义 | 1 | 组名 | 2 | 密码 | 3 | GID | 4 | 用户组中的用户列表,(不含初始组) |
/etc/gshadow
Linux系统将组文件密码储存在/etc/gshadow文件中:
[root@6c810f7f0bd8 /]# cat /etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::
tty:::
disk:::
lp:::
mem:::
kmem:::
wheel:::
cdrom:::
mail:::
man:::
dialout:::
floppy:::
games:::
tape:::
video:::
ftp:::
lock:::
audio:::
users:::
nobody:::
dbus:!::
utmp:!::
utempter:!::
input:!::
kvm:!::
render:!::
systemd-journal:!::
systemd-coredump:!::
systemd-resolve:!::
ssh_keys:!::
max:!::
各个字段的含义如下表所示:
字段序号 | 含义 | 1 | 组名 | 2 | 加密密码,对大多数用户来说,通常不设置组密码。“!”表示没有组密码,也不设组管理员。 | 3 | 组管理员 | 4 | 组附加用户列表 |
用户和用户组管理的命令
添加用户 useradd
# -u 指定用于的pid,需要大于500
# -d 指定用户的主目录(需要绝对路径,注意权限)
# -c 说明,即/etc/passwd文件中各用户信息字段5
# -g 指定用户初始组
# -G 指定用户附加组
# -s 指定用户shell,默认为/bin/bash
# -o 允许创建的用户UID相同
# -r 创建系统用户(UID在1-499)
#创建一个用户Tom,查看其相关信息
[root@6c810f7f0bd8 /]# useradd Tom
[root@6c810f7f0bd8 /]# grep "Tom" /etc/passwd /etc/shadow /etc/group /etc/gshadow
/etc/passwd:Tom:x:1002:1003::/home/Tom:/bin/bash
/etc/shadow:Tom:!!:18887:0:99999:7:::
/etc/group:Tom:x:1003:
/etc/gshadow:Tom:!::
#创建一个用户Jerry,指定UID与root用户相同(0)、初始组(rat)、附加组(root)、主目录(/home/rat)、用户说明(test)、shell(/bin/bash)
[root@6c810f7f0bd8 /]# useradd -u 0 -o -g rat -G root -d /home/rat -c "test" -s /bin/bash Jerry
[root@6c810f7f0bd8 /]# grep "Jerry" /etc/passwd /etc/shadow /etc/group /etc/gshadow
/etc/passwd:Jerry:x:0:1004:test:/home/rat:/bin/bash
/etc/shadow:Jerry:!!:18887:0:99999:7:::
/etc/group:root:x:0:Jerry
/etc/gshadow:root:::Jerry
密码配置 passwd
# -S 查询用户密码的状态,即/etc/shadow中的内容。进root用户使用
# -l 暂时锁定用户,在/etc/shadow文件中指定用户的加密密串前添加“!”,使密码失效,仅root用户使用
# -u 解锁用户,与-l相对应,仅root用户使用
# --sdtin可将通过管道符输出的数据作为用户的密码
# -x 设置该用户密码的有效期
# -n 设置该用户修改密码后,多长时间不能修改密码
# -w 设置用户密码过期前的警告天数
# -i 设置用户密码失效日期
#修改用户Tom的密码
[root@6c810f7f0bd8 /]# passwd Tom
Changing password for user Tom.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
#调用管道符修改密码
[root@6c810f7f0bd8 /]# echo "123456" |passwd --stdin Tom
Changing password for user Tom.
passwd: all authentication tokens updated successfully.
普通用户仅能修改自己的密码
修改用户相关信息 usermod
# -c 修改用户的说明信息
# -d 修改用户的主目录(绝对路径)
# -e 修改用户失效日期,格式“YYYY--MM-DD”
# -g 修改用户的初始组
# -u 修改用户的ID(UID)
# -G 修改用户的附加组
# -l 修改用户的名称
# -L 临时锁定用户
# -U 解锁用户
# -s 修改用户的登录shell
用法和useradd很相似,只是创建变成了修改
修改用户密码状态 chage
# -l 列出用户的详细密码状态
# -d 修改用户密码信息中的最后一次修改密码的日期,格式为YYYY-MM-DD
# -m 修改密码最短保留天数
# -M 修改密码的有效期
# -W 修改密码到期前的警告天数
# -i 修改密码过期后的宽限天数
# -E 修改账号失效日期,格式为YYYY-MM-DD
#查看用户密码状态
[root@6c810f7f0bd8 /]# chage -l Tom
Last password change : Sep 17, 2021
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
删除用户 userdel
仅root用户可以使用。
# -r 删除用户的同时删除用户的家目录(主目录)
[root@6c810f7f0bd8 /]# userdel -r Tom
[root@6c810f7f0bd8 /]# grep "Tom" /etc/passwd /etc/shadow /etc/group /etc/gshadow
输出为空
查看用户UID和GID id
[root@6c810f7f0bd8 /]# id Jerry
uid=0(root) gid=0(root) groups=0(root)
用户间切换 su
# - 切换为指定用户身份,并且包括工作环境(包括PATH变量,MAIL变量),若省略用户名,默认为root
# -l 与‘-’一样,但需要在最后添加使用者
# -p 切换为指定用户身份,但不改变工作环境
# -m 与‘-p’一样
# -c 仅切换用户并执行一次命令,执行后自动切换回来。
[root@6c810f7f0bd8 /]# su -
Last login: Fri Sep 17 11:21:11 UTC 2021 on pts/1
Last failed login: Fri Sep 17 11:29:40 UTC 2021 on pts/1
There was 1 failed login attempt since the last successful login.
#切换到max,但不切换工作目录
[root@6c810f7f0bd8 ~]# su max
[max@6c810f7f0bd8 root]$
添加用户组 groupadd
# -g 指定GID
# -r 创建系统用户组
[root@6c810f7f0bd8 ~]# groupadd grouptest
[root@6c810f7f0bd8 ~]# grep "grouptest" /etc/group /etc/gshadow
/etc/group:grouptest:x:1005:
/etc/gshadow:grouptest:!::
修改用户组相关信息 groupmod
不要随意修改,容易导致管理员逻辑混乱,如果非要修改,则建议先删除旧的,再建立新的。
# -G 修改GID
# -n 修改组名
#将用户组grouptest修改为grouptest1
[root@6c810f7f0bd8 ~]# groupmod -n grouptest1 grouptest
[root@6c810f7f0bd8 ~]# grep "grouptest1" /etc/group /etc/gshadow
/etc/group:grouptest1:x:1005:
/etc/gshadow:grouptest1:!::
删除用户组 groupdel
实质上就是删除/etc/group文件和/etc/gshadow文件中有关目标组的数据信息。
注意:如果有组是某用户的初始组,则无法使用groupdel删除
[root@6c810f7f0bd8 ~]# groupdel root
groupdel: cannot remove the primary group of user 'root'
设置组管理员 gpasswd
# -A user,... 将群组的控制权交给user...等,仅root用户可以使用
# -M user,... 将user...等用户加入此组,仅root用户可以使用
# -r 移除组的密码,仅root用户可以使用
# -R 让组的密码失效,仅root用户可以使用
# -a 将用户加入此组
# -d 从组中移除用户
使用usermod -G也能将用户加入组,但会使用户退出之前加入的组,故最好使用gpasswd命令。?
修改用户的初始组 newgrp
newgrp 指令类似 login 指令,若要使用 newgrp 指令切换群组,您必须是该群组的用户,否则将无法切换到指定的群组。
使用newgrp每一次切换用户的初始组,给用户都会以另一个shell登录(新进程,也可以说是子进程),只不过在新shell上登录的该用户的初始组改变了。
#每执行一次newgrp,使用echo $$查看进程ID
[root@6c810f7f0bd8 ~]# echo $$
274
[root@6c810f7f0bd8 ~]# newgrp root
[root@6c810f7f0bd8 ~]# echo $$
287
[root@6c810f7f0bd8 ~]# newgrp max
[root@6c810f7f0bd8 ~]# echo $$
298
[root@6c810f7f0bd8 ~]# newgrp root
[root@6c810f7f0bd8 ~]# echo $$
309
[root@6c810f7f0bd8 ~]# exit
exit
[root@6c810f7f0bd8 ~]# echo $$
298
[root@6c810f7f0bd8 ~]# exit
exit
[root@6c810f7f0bd8 ~]# echo $$
287
[root@6c810f7f0bd8 ~]# exit
exit
[root@6c810f7f0bd8 ~]# echo $$
274
|