目录
Linux下的用户管理
Linux系统的管理员之所以是root,并不是因为它的名字叫root,而是因为该用户的身份号码即UID(User IDentification)的数值为0。在Linux系统中,UID就相当于我们的身份证号码一样具有唯一性,因此可通过用户的UID值来判断用户身份。
1. 用户及用户组存在的意义
名称 | 作用 |
用户 | 限制权限 |
用户组 | 归类用户便于管理权限 |
用户:是操作者在系统中的身份标识,它们拥有不同的用户号码(UID,User IDnetification),通过建立不同权限的用户,合理的利用资源和管理文件,达到限制权限的目的。
用户组:是一种逻辑概念,用户的集合。为了方便管理属于同一组的用户,Linux系统中还引入了用户组的概念。通过使用用户组号码(GID,Group IDentification),我们可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。
2. 用户在系统中的存储方式
存在形式:系统配置文件里的一行字符以及这行字符所指定调用的系统资源。
3. 用户配置文件
3.1. /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
...
insights:x:977:975:Red Hat Insights:/var/lib/insights:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
dsd:x:1000:1000:dsd,,,,:/home/dsd:/bin/bash
我们可以很清楚的看到,该文件信息中每一行都被划分为7列。
1、用户名称
2、密码(加密,密码信息转移到/etc/shadow中,只有在root用户处才可以访问)
3、UID(用户ID,超级用户ID为0,rhel7中系统用户ID为1-999,rhel6中系统用户ID为1-499,登录用户ID为1000-65534)
4、用户初始组的ID
5、用户的说明,即名称备注
6、用户的家目录,即用户登录系统以后默认所在系统的位置
7、用户默认所使用的shell
3.2. /etc/group ## 用户组信息库,记录组名称和组ID对应关系的文件
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:
...
gdm:x:42:
rpcuser:x:29:
gnome-initial-setup:x:976:
sshd:x:74:
insights:x:975:
avahi:x:70:
slocate:x:21:
dip:x:40:
tcpdump:x:72:
dsd:x:1000:
1、名称
2、密码(加密,数据保存在/etc/gshadow中)
3、初始组的ID
4、组内的成员
3.3. /home/用户同名目录 ## 默认用户家目录
[root@localhost Desktop]# ls /home/
dsd
[root@localhost Desktop]# su - dsd
Last login: Wed Jan 1 01:40:18 PST 2020 on tty2
[dsd@localhost ~]$ pwd
/home/dsd
3.4. /etc/skel/所有文件 ## 用户环境配置文件模板
[root@localhost Desktop]# ls -a /etc/skel/
. .. .bash_logout .bash_profile .bashrc .mozilla
[root@localhost Desktop]# touch /etc/skel/dsdfile
[root@localhost Desktop]# ls -a /etc/skel/
. .. .bash_logout .bash_profile .bashrc dsdfile .mozilla
[root@localhost Desktop]# useradd test
[root@localhost Desktop]# su - dsd
Last login: Wed Jan 1 06:20:03 PST 2020 on pts/0
[dsd@localhost ~]$ ls -a /etc/skel/
. .. .bash_logout .bash_profile .bashrc dsdfile .mozilla
用户在建立的时候会把/etc/skel/下的所有文件都复制过去,若我们向让所有的用户家目录中都有某个文件的时候,可以直接将该文件建立在/etc/skel/下。
以上四种配置文件,可以统称为系统的身份配置文件,只控制系统的用户身份,除此之外,系统中还有用户认证,密码就叫做用户的认证。
3.5. /etc/shadow ## 用户认证信息
root:$6$PBkW5wBQIJKTPJRD$7PSYLXXfqNkmg34MDxtG/nbG9gf1gHbStZi.syKl7JFStd8SEPnk4YTENCFp5S8/XagqKIJ2wHmJ81zDJ0HGo1:18262:0:99999:7:::
bin:*:17784:0:99999:7:::
daemon:*:17784:0:99999:7:::
adm:*:17784:0:99999:7:::
lp:*:17784:0:99999:7:::
sync:*:17784:0:99999:7:::
shutdown:*:17784:0:99999:7:::
halt:*:17784:0:99999:7:::
mail:*:17784:0:99999:7:::
operator:*:17784:0:99999:7:::
games:*:17784:0:99999:7:::
...
rpcuser:!!:18262::::::
gnome-initial-setup:!!:18262::::::
sshd:!!:18262::::::
insights:!!:18262::::::
avahi:!!:18262::::::
tcpdump:!!:18262::::::
dsd:$1$fGZns4jL$rm3RqkcdPV1sAJjpk5De21:18262:0:99999:7:::
test:!!:18262:0:99999:7:::
1、用户名称
2、用户密码,!!表示锁定状态下
3、密码已使用时长
4、密码最短有效期
5、密码最长有效期
6、密码到期前警告
7、密码非活跃天数
8、密码到期日
3.6. /etc/gshadow ## 组认证信息
root:::
bin:::
daemon:::
sys:::
adm:::
tty:::
disk:::
lp:::
mem:::
kmem:::
...
gnome-initial-setup:!::
sshd:!::
insights:!::
avahi:!::
slocate:!::
dip:!::
tcpdump:!::
dsd:!::
test:!::
1、组名称
2、组密码
3、组管理员
4、组内成员
4. 用户信息查看
参数 | 作用 |
-u | 查看用户的uid |
-g | 查看用户的gid |
-G | 查看用户所在的所有组的id |
-n | 显示名字不显示id |
4.1 通过cat查看文件全部内容
[root@localhost Desktop]# useradd student
[root@localhost Desktop]# cat /etc/passwd
...
student:x:1002:1002::/home/student:/bin/bash
4.2 通过gentent直接指定student查找 (除了系统用户,还可以查看网络用户)
[root@localhost Desktop]# getent passwd student
student:x:1002:1002::/home/student:/bin/bash
4.3 查看当前用户
[root@localhost Desktop]# whoami
root
4.4 查看指定用户id信息
[root@localhost Desktop]# id -u student
1002 ## 查看用户的UID,即用户id
[root@localhost Desktop]# id -g student
1002 ## 查看用户的初始组id
[root@localhost Desktop]# id -G student
1002 ## 查看该用户所有组的id,包括初始组和所有附加组
现在将student加到dsd组中,显示信息如下,可以看到多了一个组的身份,即附加组
[root@localhost Desktop]# id -G student
1002 1000
[root@localhost Desktop]# id -a student
uid=1002(student) gid=1002(student) groups=1002(student),1000(dsd) ## 表示查看这个用户所有的id信息
[root@localhost Desktop]# id -un student
student ## 表示显示这个用户的名称
[root@localhost Desktop]# id -gn student
student ## 表示显示这个初始组的名称
[root@localhost Desktop]# id -Gn student
student dsd ## 表示显示所有组的名称
5. 用户身份的切换
5.1 图形界面中身份切换
5.2 shell中身份切换
命令 | 作用 |
gnome-session-quit | 60秒后注销用户 |
gnome-session-quit --logout | 等同于第一条命令 |
gnome-session-quit --force | 注销当前用户 |
gnome-session-quit --power-off | 关机 |
gnome-session-quit --reboot | 重启 |
gnome-session-quit --no-prompt | 不提示 |
5.3 用户之间的切换
命令 | 作用 |
su | 只切换用户身份,不切换用户环境 |
su- | 切换用户身份和用户环境 |
实例:
[root@localhost Desktop]# su dsd
[dsd@localhost Desktop]$ pwd
/root/Desktop
[root@localhost Desktop]# su - dsd
Last login: Wed Jan 1 07:33:35 PST 2020 on pts/0
[dsd@localhost ~]$ pwd
/home/dsd
由上可知,通过su切换时,只是切换了用户身份,用户环境还是在root下,而通过su - 方式切换的时候其用户身份和用户环境均切换。
注意:1、每次su切换到其他用户,操作完之后必须要退出,然后再次切换到其他用户;
2、高级用户切换至低级用户不需要密码,但是低级用户切换到高级需要,平级用户之间切换也需要密码。
6. 用户的建立、删除以及修改
6.1 用户及用户组的建立、删除
命令 | 作用 |
useradd 名称 | 用户建立 |
useradd -u 名称 | 指定用户的uid |
useradd -g 名称 | 指定用户的gid |
useradd -G 名称 | 指定用户的附加组 |
useradd -c 名称 | 指定用户的说明 |
useradd -d 名称 | 指定用户的家目录,默认为/home/username |
useradd -s 名称 | 指定用户的默认shell |
useradd -M 名称 | 指定用户不创建家目录 |
命令 | 作用 |
userdel 名称 | 用户删除 |
userdel -u 名称 | 删除指定用户的uid |
userdel -g 名称 | 删除指定用户的gid |
userdel -G 名称 | 删除指定用户的附加组 |
userdel -c 名称 | 删除指定用户的说明 |
userdel -d 名称 | 删除指定用户的家目录 |
useradd -s 名称 | 指定用户的默认shell |
useradd -M 名称 | 指定用户不创建家目录 |
实例:
(1)增加一个组dsd2333
(2)删除一个组dsd2333
(3)新建一个组dsd2333,并修改它的初始组id为6666
(4)删除新建的组dsd2333
(5)新建一个用户du961028
(6)在这里要注意,要指定用户的UID,在用户建立的时候就指定,用户已经建立好后就没有办法直接指定它的UID。
删除用户du961028,主要中间一定要加-r,不加-r只会删除用户的信息,环境配置所涉及的文件仍然保留,Id会裸露出来。
(7)在建立的时候直接指定uid,那么uid和组id是一样的,默认被指定。
指定初始组的id,要注意的是,指定初始组或者附加组时,组的身份一定要存在。
(8)指定用户的备注名称
6.2 用户的修改
命令 | 作用 |
groupmod -g | 修改用户的gid |
groupmod -n | 修改组名 |
usermod -l | 修改用户名称 |
usermod -u | 修改用户uid |
usermod -g | 修改用户gid |
usermod -aG | 指定用户的附加组 |
usermod -c | 修改用户的说明 |
usermod -md | 修改用户的家目录,默认为/home/username |
usermod -s | 修改用户的shell类型 |
7. 用户认证信息文件
dsd:$1$fGZns4jL$rm3RqkcdPV1sAJjpk5De21:18262:0:99999:7 : : :
[1] [2] [3] [4][5] [6]][7][8]
[1]:用户名称
[2]:用户密码,用户的加密字符串,默认用的加密方式为sha512对称加密,如果加密字符串前出现"!/!!",表示用户被冻结
[3]:用户密码最后一次被更改的时间,此时间计算是从1970-1-1开始计算的累计天数
[4]:用户密码最短有效期。如果此位没有设定数字,那么在此数字范围内的天数内是不能修改用户密码的
[5]:用户密码最长有效期。用户必须在此有效期内更新密码,如果超时会被冻结
[6]:密码警告期限。在过期数天内发出警告信息
[7]:非活跃天数。密码过期后仍可登陆系统的天数
[8]:到期日。用户在此日被冻结
相关命令:
(1)passwd -S dsd:查看用户dsd信息
(2)passwd dsd:更改dsd的密码
(3)passwd -l dsd:在用户密码前加 !!,锁住用户密码
(4)passwd -u dsd:解锁用户密码
8. 用户认证管理
命令1 | 作用 | 命令2 | 作用 |
passwd -S dsd | 查看用户信息 | ||
passwd -l dsd | !!锁住用户 | usermod -L dsd | !锁住用户 |
passwd -u dsd | !!解锁,消失 | usermod -U dsd | 解锁用户 |
passwd -d dsd | 删除密码 | ||
passwd -e dsd | 将已使用时间清零 | chage -d 20 dsd | 改变密码已使用时间 |
passwd -n 2 dsd | 密码最短有效期 | chage -m 2 dsd | 密码最短有效期 |
passwd -x 40 dsd | 密码最长有效期 | chage -M 20 dsd | 密码最长有效期 |
passwd -w dsd | 密码到期前警告 | chage -W 2 dsd | 密码到期前警告 |
passwd -i dsd | 密码非活跃天数 | chage -I 5 dsd | 密码非活跃天数 |
chage -E "2020-01-21" | 密码到期日 |
9. 用户权力下放
1、在系统中超级用户可以下放普通用户不能执行的操作给普通用户下放权力配置文件:
/etc/sudoers
2、下放权力的方法
visudo
用超级用户执行visudo进入编辑/etc/sudoers模式
输入格式:
获得权限用户 主机名称=(获得到的用户身份) 命令
dsd localhost.localdomain=(root) /usr/sbin/useradd /usr/sbin/userdel /usr/sbin/usermod
将命令添加到配置文件中,wq保存退出。
3、切换到test用户,test能在desktop0.example.com以超级用户身份执行/usr/sbin/useradd命令
4、执行下放权限命令
我们在运行的时候发现在第一次执行sudo时需要输入当前用户密码
sudo command
passwd
若是嫌需要输入密码繁琐,在这里我们也可以通过权限下放的方式来省略这个步骤,用超级用户执行visudo进入编辑/etc/sudoers模式。将输入改为:
dsd localhost.localdomain=(root) NOPASSWD /usr/sbin/useradd /usr/sbin/userdel /usr/sbin/usermod
退出保存即可,这样就可以完成调用sudo命令的时候不需要再输入密码操作。