Linux下的用户管理
Linux下的用户管理
1. 用户及用户组存在的意义
用户是操作者在系统中的身份识别,其存在是为了限制权限;组是逻辑概念,是用户的集合,组的存在是为了归类用户以便于管理权限。
2. 用户涉及到的配置文件及内容
登陆 Linux 系统时,虽然输入的是自己的用户名和密码,但其实 Linux 并不认识你的用户名称,它只认识用户名对应的 ID 号(也就是一串数字)。用户名并无实际作用,仅是为了方便用户的记忆而已。Linux 系统将所有用户的名称与 ID 的对应关系都存储在 /etc/passwd 文件中。
Linux 系统中,每个用户的 ID 细分为 2 种,分别是用户 ID(User ID,简称 UID)和组 ID(Group ID,简称 GID),这与文件有拥有者和拥有群组两种属性相对应。每个文件都有自己的拥有者 ID 和群组 ID,当显示文件属性时,系统会根据 /etc/passwd 和 /etc/group 文件中的内容,分别找到 UID 和 GID 对应的用户名和群组名,然后显示出来。
UID号用于唯一标识系统中的用户,这是一个32位无符号整数,Linux规定root用户的UID为0,而其他的一些虚拟用户如bin,daermon等被分配到一些比较小的UID号,这些用户通常被安排在passwd文件的开头部分,从一个比较大的数开始分配真实用户的UID号是一个好习惯,如练习部分的内容可以看出,这样能为虚拟用户提供足够的余地。
所涉及的配置文件 | 内容 |
---|---|
/etc/passwd | 用户信息库 |
/etc/group | 组信息库 |
/home/用户同名目录 | 默认用户家目录(如/home/student) |
/etc/skel/所有文件 | 用户环境配置文件模板 |
/etc/shadow | 用户认证信息 |
/etc/gshadow | 组认证信息 |
[root@workstation Desktop]# vim /etc/passwd
root:x:0:0:root:/root:/bin/bash 【vim下的命令模式中可以看出】
root:(账号名称):x(:账号密码):0(:账号UID):0(:账号GID):root(:用户说明):/root(:用户家目录):/bin/bash(:shell解析)
-
账号名称:和用户UID对应,这是用户登录时使用的账号名称,在系统中是唯一的,不能重复
-
账号密码:早期的Unix系统中,该字段是存放账号密码的,由于安全原因,后来把这个密码字段内容移动到/etc/shadown中,这里可以看到一个字母表示该用户密码在/etc/shadown中保护
-
账户UID:账号UID一般由一个整数表示的,范围是0~65535
-
账户GID:账号GID一般也是由一个整数表示的,范围是0~65535,当添加账户时,默认情况下会同时建立一个与用户同名且UID和GID相同的组
-
用户说明:这个字段是对这个账号二队描述说明
-
用户家目录:用户登录后首先进入的目录,一般为(/home/用户名)这样的目录
3. 用户信息的查看(id)
【1】id
参数 | 所查看内容 |
---|---|
id -u | 查看用户的uid |
id -g | 查看组的gid |
id -G | 查看用户所在的所有组的id |
id -n | 显示名字而不显示id数字 |
【2】实践练习
[root@workstation Desktop]# id student
uid=1000(student) gid=1000(student) groups=1000(student),10(wheel)
[root@workstation Desktop]# id -u student 查看student的uid
1000
[root@workstation Desktop]# id -u root 查看组的gid
0
[root@workstation Desktop]# id -G student 查看组所在组的所有id
1000 10 初始组与附加组
[root@workstation Desktop]# id -n student -n 要与其他在一起使用
id: cannot print only names or real IDs in default format
[root@workstation Desktop]# id -Gn student -n的正确使用
student wheel
4. 用户身份的切换方式及环境变量
【1】注销当前用户
[root@workstation Desktop]# gnome-session-quit --force 【注销当前用户】
此命令的作用等同于如下图所示的常规注销用户的方法,如下图所示。
【2】切换用户
命令 | 作用 |
---|---|
su | 只切换用户身份,不切换用户环境 |
su - | 切换用户身份及用户环境 |
- 检验两种区别
实践练习
[root@workstation Desktop]# su student
(process:5438): dconf-CRITICAL **: 21:52:55.322: unable to create directory '/run/user/0/dconf': Permission denied. dconf will not work properly.
(process:5438): dconf-CRITICAL **: 21:52:55.323: unable to create directory '/run/user/0/dconf': Permission denied. dconf will not work properly.
(process:5438): dconf-WARNING **: 21:52:55.326: failed to commit changes to dconf: Could not connect: Permission denied
[student@workstation Desktop]$ exit
exit
[root@workstation Desktop]# su - student
Last login: Thu Jan 9 21:52:55 EST 2020 on pts/0
[student@workstation ~]$ pwd
/home/student
- 在一个shell里不要反复执行“su -”
当我们开启一个的时候,系统中就会显示开启了一个shell的程序。切换到用户的时候,会发现这种程序会多一个,再次切换到root时会发现,这种程序又会多一个。开的越多系统的性能就会越差。
另一点,如果那样切换的时候,执行命令可能会出问题。举例(执行gedit),切换到student用户时,除了那个shell外,其他的环境都是属于超级用户的,所以普通用户不能调用。继续"su - root"时也不能打开,因为命令是先传递给student。所以切换时只执行一层的。
实践练习
[root@workstation Desktop]# su - student 【切换用户身份与用户环境】
[student@workstation ~]$ pwd
/home/student
[student@workstation ~]$ gedit 【必须开启图形,此处显示未成功建立文件】
Unable to init server: Could not connect: Connection refused
(gedit:2640): Gtk-WARNING **: 22:02:40.640: cannot open display:
[student@workstation ~]$ su - root 【切换到root用户】
Password: 【需要输入密码】
Last login: Thu Jan 9 22:01:45 EST 2020 on tty2
[root@workstation ~]# gedit 【再次进行尝试】
Unable to init server: Could not connect: Connection refused
(gedit:2768): Gtk-WARNING **: 22:04:23.277: cannot open display: 【显示未成功】
[root@workstation ~]# exit 【使用exit,将会退回到原来的用户,此处是回到student】
logout
[student@workstation ~]$ exit 【再次使用exit,将会退回到最初的root】
logout
[root@workstation Desktop]# gedit 【建立成功!如下图所示】
注意: 每次su切换到其他用户操作之后必须退出(exit
),然后再次切换到其他用户。执行时,高级用户切换到低级用户不需要密码,低级用户切换到高级或切换到平级用户切则需要密码。
5. 用户及用户组的建立 / 删除 / 更改
【1】用户建立
groupadd 与 useradd
参数 | 作用 |
---|---|
useradd -u | 指定用户的uid |
useradd -g | 指定用户的gid |
useradd -G | 指定用户的附加组 |
useradd -c | 指定用户的说明 |
useraddd -d | 指定用户的家目录,默认为/home/uesername |
useradd -s | 指定用户默认的shell |
实践练习
[root@workstation Desktop]# useradd -u 1300 westos
[root@workstation Desktop]# useradd -g 33 westos 【此用户以存在不可以直接建立】
useradd: user 'westos' already exists
[root@workstation Desktop]# userdel -r westos 【要删除原来的westos后才能重新建】
[root@workstation Desktop]# useradd -g 33 westos 【33组必须是存在的,可由vim /etc/group查看】
[root@workstation Desktop]# userdel -r westos
[root@workstation Desktop]# useradd -G 40 westos 【40组必须是存在的】
[root@workstation Desktop]# userdel -r westos
[root@workstation Desktop]# useradd -c “westos name” westos
[root@workstation Desktop]# userdel -r westos
[root@workstation Desktop]# useradd -d /home/lee westos
[root@workstation Desktop]#su - westos
[westos@workstation ~]$ pwd
/home/lee
[westos@workstation ~]$ exit
[root@workstation Desktop]# groupadd -g 999 haha 【999组已经存在,就需要重建换一个没用过的组】
groupadd: GID '999' already exists
[root@workstation Desktop]# groupadd -g 666 haha
[root@workstation Desktop]# groupdel haha
在监控模式下看看现象
【2】用户的删除
userdel westos 只删除了用户,并未删除用户的配置文件
userdel -r westos 删除了用户和用户的配置文件
注意:
- 在删除了用户之后,如果想要删除其配置文件则有两种方法:一种是重新建立后利用 " -r "。另一种是找到配置文件所在目录,然后利用“rm -fr ”进行删除。
- 使用useradd想要更改用户信息的时候,需要用userdel先删除再重新建立,具体表现如【1】中命令部分表现。建议在建立好用户后,可以直接使用usermod来更改用户信息。
【3】更改用户信息
参数 | 作用 |
---|---|
-l | 更改用户的名称 |
-u | 更改用户uid |
-g | 更改用户的初始组 |
-G | 更改用户的附加 |
-aG | 添加用户的附加组 |
-G “” | 删除用户所有附加组的身份 |
-c “happy” | 指定用户说明文字 |
-d /home/lee | 更改用户家目录的指向 |
-md /home/lee | 更改用户家目录 |
-s /bin/sh | 更改用户的shell |
-L | 冻结用户 |
-U | 解锁用户 |
实践练习
//建立用户
[root@workstation Desktop]# useradd linux
[root@workstation Desktop]# id linux
uid=1001(linux) gid=1001(linux) groups=1001(linux)
//更改用户名称与用户uid
[root@workstation Desktop]# usermod -l haha linux
[root@workstation Desktop]# usermod -u 1300 haha
[root@workstation Desktop]# id haha
uid=1300(haha) gid=1001(linux) groups=1001(linux)
//更改用户的初始组
[root@workstation Desktop]# usermod -g 21 haha
[root@workstation Desktop]# id haha
uid=1300(haha) gid=21(slocate) groups=21(slocate)
//更改 添加 删除用户的附加组
[root@workstation Desktop]# usermod -G 40 haha
[root@workstation Desktop]# id haha
uid=1300(haha) gid=33(tape) groups=33(tape),40(dip)
[root@workstation Desktop]# usermod -G 21 haha
[root@workstation Desktop]# id haha
uid=1300(haha) gid=33(tape) groups=33(tape),21(slocate)
[root@workstation Desktop]# usermod -aG 40 haha 【-aG表示!添加!用户的附加组】
[root@workstation Desktop]# id haha
uid=1300(haha) gid=33(tape) groups=33(tape),21(slocate),40(dip)
[root@workstation Desktop]# usermod -G “” haha 【!删除!】
[root@workstation Desktop]# id haha
uid=1300(haha) gid=33(tape) groups=33(tape)
//其余的练习内容可以在下图所显示“-c”“-d”“-md”的变化
注意:
区分 -d 与 -md的区别在这里插入图片描述(用户信息监控命令watch -n 1 ‘tail -n 3 /etc/passwd /etc/group;echo “=>/home/ message<=”; ls -l /home/’):
- 使用 -d 只改变用户家目录的指向
- 使用 -md 更改用户家目录
6. 用户认证信息
【1】/etc/shadows ##记录用户认证信息
[root@workstation Desktop]# watch -n 1 tail -n 3 /etc/shadow 【监控命令】
gnome-initial-setup:!!:18038::::::
avahi:!!:18038::::::
haha:!!:18271:0:99999:7: : :
[1] [2] [3] [4] [5] [6] [7] [8] [9]
- [1] 用户名称: haha
- [2]用户密码:!!
-用户的加密字符串,默认用的加密方式为sha512对称加密,如果加密字符串前出现"!"那么用户被冻结 - [3] 用户密码:18271
-最后一次被更改的时间:此时间计算是从1970-1-1开始计算的累计天数 - [4] 用户密码最短有效期:0
-如果此位有设定数字,那么在此数字范围内的天数内是不能修改用户密码的 - [5] 用户密码最长有效期:99999
-用户必须在此有效期内更新密码,如果超时会被冻结 - [6] 密码警告期限:7
-在过期前制定天数内会发送警告信息给用户 - [7] 用户非活跃天数:
-此位默认为空,如果设定数值,那么在密码最长有效期过后仍然可以使用的天数 - [8] 用户到期日:
-默认为空,表示帐号一定会被冻结的时间点 - [9] 用户自定义列,目前没有启用
【2】如何进行修改
注意:
- 用户名称可以用“usermod”进行修改
- 用户密码修改方面
passwd haha ##更改haha密码
passwd -l haha ##在用户密码前加入“!!”即:锁定用户(可以理解为封号)
passwd -u haha ##解除锁定
usermod -L haha ##在用户密码前加入“!”
usermod -U haha ##在密码不为空时使用
passwd -d haha ##清空westos密码
- 普通用户修改密码
1.必须知道当前用户原始密码
2.密码不能和帐号名称相似
3.密码不能是有序的数字或有序纯字母
4.密法如果是纯数字或字母要>8
7.用户授权
【1】sudo作用
sudo 能把某些超级权限针对性的下放 , 并且不需要普通用户知道 root 密码 , 所以 sudo 相对于权限无限制性的 su 来说(此处可以回忆切换用户 “su”部分的知识) , 还是比较安全的。
sudo 执行命令的流程是当前用户切换到 root,然后以 root 身份执行命令 , 执行完成后 , 直接退回到当前用户 ; 而这些的前提是要通过sudo 的配置文件 /etc/sudoers
来进行授权。
【2】如何下放权力
[root@workstation Desktop]# visudo
//使用:100先找到100行,看见如下所示内容时,<i>进入插入模式
root ALL=(ALL) ALL
//插入所需要授权的命令,此处要先
[root@workstation Desktop]# hostname
workstation.lab.example.com
//授权(用户haha可以在workstation.lab.example.com主机以root用户身份免密执行useradd)
haha workstation.lab.example.com=(root) NOPASSWD: /user/sbin/useradd
来源:CSDN
作者:ly_qiu
链接:https://blog.csdn.net/ly_qiu/article/details/103894028