Linux系统中的用户管理
1. 用户及用户组存在的意义
1.1 用户存在的意义
由于系统资源是非常有限的,如何合理分配系统资源就成了一个严重的问题。在解决这个问题时就必须要有整个资源配合。
1). 身份 account
2). 授权 author
3). 认证 auth
这就是著名的3A机制,3A机制组成系统中最底层的安全架构。
1.2 用户组存在意义
1). 用户组是一个逻辑容器
2). 对用户进行归类和统一授权
2. 用户及用户组在系统中的存在方式
由于人类对信息的处理量有限,所以人类对于字符串(名称)的感觉比对数字的信息更加敏感,但是电脑是通过算法对信息进行处理的,电脑对数字(id)更加敏感。
id <-------> 名称 ,必须要记录到文件当中用户才能存在
用户存在的方式就是 /etc/passwd 文件中的一行字符
用户组存在的方式就是 /etc/group 文件中的一行字符
3. 用户切换
3.1 用户查看
命令 whoami ##可以查看当前用户
id ##查看用户 id 信息
id 命令后面跟的那个用户就查看那个用户的id,什么都不跟就是看当前所在用户的id)
id - | 用法 |
---|---|
-u | 查看用户的用户id |
-g | 查看用户主组id |
-G | 查看用户所有的组的id |
-n | 显示名称 |
-nG -ng -nu | 显示对应的名称而不再显示数字 |
3.2 用户切换
su - username
- #表示切换用户的环境
在命令窗口中用命令来切换用户时,在切换到对应的窗口完成任务后需要输入 exit 来退出当前用户,回到之前的用户;否则后面会u出现环境错乱,切换的次数很多严重时会导致系统瘫痪。
在命令窗口中输入 su - westos,会将当前用户切换至 westos 用户,如果是超级用户切换到其他用户时会直接切换过去,不需要密码;如果是普通用户切换到超级用户或者其他普通用户时都需要输入密码。
注意:
- 在做用户切换时当使用完毕用户身份及时退出
- 不要在一个shell中反复执行su命令
- 在一个shell中反复执行su命令会导致环境错乱
- 在一个shell中切换身份时,只是在当前 shell 中起作用,在其他shell中还是之前的身份。
4. 用户涉及到的系统配置文件
文件目录 | 代表的内容 |
---|---|
/etc/passwd | 用户身份信息文件 |
/etc/group | 组身份信息文件 |
/etc/skel/.* | 用户环境配置文件模板 |
/etc/shadow | 用户认证信息文件 |
/home/username | 用户家目录 |
/var/spool/mail/username | 用户邮箱文件 |
1) 在用户身份信息中都是固定的7列格式,分别代表的内容:
用户名称:用户密码(密码放在这不安全):用户id:主组id:用户说明:用户家目录:用户默认
2)在组身份信息中都是固定的4列格式,分别代表的内容:
组名称:组密码:组id:组的附加成员有那些
5. 用户和用户组建立及删除
监控用户命令
在命令窗口中输入 watch -n 1 " tail -n 4 /etc/passwd /etc/group; ls -l /home" ; tail -n 4 /etc/passwd /etc/group 表示显示这两个文件内容的后4行,ls -l /home 表示显示 /home 目录中内容的属性。watch -n 1 表示监控以上信息,隔1 秒更新一次结果。
注:执行多条命令可以用分号间隔开
- 用户建立
命令 | 含义 |
---|---|
useradd username | 用户建立 |
useradd -u id username | 指定用户的用户ID建立用户 |
0 Linux超级用户ID | |
用户id范围: 0-65535 (2^16) | 1-200 系统自动保留ID |
201-999 Liunx系统自用ID | |
1000-60000 用户级ID | |
useradd -g id username | 指定主组ID建立用户 |
useradd -G id username | 指定附加组ID建立用户 |
useradd -d dir username | 指定用户家目录建立用户 |
useradd -M username | 建立用户时不建立用户家目录 |
useradd -c word username | 指定用户说明建立用户 |
useradd -s shell username | 指定用shell建立用户 |
1)输入命令 useradd zxk , 即可直接建立用户名称为 zxk 的用户;
2)输入命令 useradd -u 666 zxk , 即可建立用户名称为 zxk 的用户,用户ID 为666;
3)输入命令 useradd -g 1000 zxk , 即可建立用户名称为 zxk 的用户,组ID 为1000;
4)输入命令 useradd -G 72 zxk , 即可建立用户名称为 zxk 的用户,附加组的ID 为72;
5)输入命令 useradd -d /home/upup zxk , 即可建立用户名称为 zxk 的用户,它的家目录为 /home/upup;
6)输入命令 useradd -c “zxk linux” zxk , 即可建立用户名称为 zxk 的用户,它的说明为zxk linux;
7)输入命令 useradd -s /bin/sh zxk , 即可建立用户名称为 zxk 的用户,它使用的shell 为sh ;
8)输入命令 useradd -M zxk , 即可建立用户名称为 zxk 的用户,它使用的shell 为sh ;
注:
- 在建立用户时,如果要指定用户的组ID 那么之前这个组一定要存在,否则在建立用户时会报错;
- 在建立用户时,如果需要指定附加组,那么这个组也一定要存在,在建立的时候才可以将其设定为附加组;
- 可以同时设定用户ID 组ID 附加组ID 等信息.
如:设定用户的ID 为888,组的ID 为7455,附加组的ID 为72。
useradd -u 888 -g 7455 -G 72 zxk
- 用户删除
在做上述实验时应该在做下一个实验之前先删除上一个同名的用户,否则在建立用户时会报错。
userdel -r username ##用户删除
如果没有加 -r ,则只会删除用户的信息,并不会删除用户的根目录。-r 表示删除用户的系统配置文件,如果不加-r 在新建和以删除的用户同名时会报错。
- 组的建立
在新建用户时,如果需要指定给新建用户的组,当这个组不存在时可以先建立这个组。
命令 | 含义 |
---|---|
groupadd groupname | 组建立 |
groupadd -g id groupname | 指定组名称 |
groupdel groupname | 组删除 |
6. 用户和用户组的信息管理
除了上述建立用户和建立组对用户进行管理外,还可以通过更改的方式对其管理。
命令 | 含义 |
---|---|
usermod -l | 更改用户名称 |
usermod -u | 更改用户id |
usermod -g | 更改主组id |
usermod -G | 更改用户附加组身份 |
usermod -aG | 添加用户附加组身份 |
usermod -d | 更改家目录指向字符,但是真实的目录名称并不改变 |
usermod -md | 更改家目录指向字符同时更改家目录名称 |
usermod -c | 更改用户说明 |
usermod -s | 更改默认shell |
usermod -L | 冻结账号 |
usermod -U | 解锁账号 |
groupmod -g | 更改用户组id |
1)输入命令 usermod -l kk123 zxk , 即可把已经存在的zxk 用户名称更改为 kk123 的用户 ;
此更改会更改只会更改用户名称,并不会更改组的身份和文件名称。
2)输入命令 usermod -u 1999 zxk , 即可把已经存在的zxk 用户ID更改为 999 ;
在更改用ID 时,这时的ID 要按照用户ID 的默认规则来改。
3)输入命令 usermod -g 72 zxk , 即可把已经存在的zxk 用户主组ID更改为 72 (此要更改成的组ID必须之前这个组就已经存在);
4)输入命令 usermod -G 7455 zxk , 即可把 zxk 用户的附加组更改为ID为 7455的附加组 ( 如果之前没有附加组,就会将这个组给附加上去;如果之前已经有附加组,就会将之前的附加组更改;如果要取消之前的附加组也可以用usermod -G “” zxk,即可把zxk这个组的附加组去掉);
5)输入命令 usermod -aG 1000,72 zxk , 即可把ID为1000和72的两个组附加给zxk 用户 ;
6)输入命令 usermod -d /home/kk123 zxk , 更改的是 /etc/passwd 家目录指向字符,但是真实的目录名称并不改变 ;
7)输入命令 usermod -md /home/haha zxk , 即可更改家目录指向字符同时更改家目录名称(md 两个字符不能交换顺序);
8)输入命令 usermod -c “kk linux 123” zxk , 即可更改用户说明为kk linux 123 ;
9)输入命令 usermod -s /bin/sh zxk , 即可更改默认 shell 为 sh ;
10)输入命令 groupmod -g 7555 lk , 即可更改lk 这个用户的组ID为7555 ;
输入命令groupmod -g 3888, 即可更改用户 zxk 的组ID 为3888(更改组ID 时不能与已经存在的组ID 相同);
7. 用户认证信息管理
在系统 /etc/shadow 这个文件中有每个用户认证信息的详细显示。
分别代表的含义为:
用户名称 : 用户密码的加密字符 : 用户密码最后一次被修改时间 : 密码最短有效期 : 密码最长有效期 : 密码过期前警告期 : 账号非活跃期 : 账号到期时间 : 用户自定义
7.1 用户名称
输入命令 passwd -S username 可以查看密码状态
LK表示密码被锁定 ,在 /etc/shadow 中显示为 !! ;Passdord locked 表示没有设置密码.
PS 表示密码被设定过, 在 /etc/shadow 中显示为加密的字符串; Password set, SHA512 crypt. 表示设定了密码,加密方式为SHA512.
7.2 用户加密字符
1)更改密码
在超级用户下执行命令 passwd username 即可执行更改密码
也可以用非交互的方式更改zxk 这个用户的密码为zxk.
输入命令 echo zxk | passwd --stdin zxk.
当普通用户更改密码时只需在普通用户下输入 passwd 命令即可更改密码,passwd 后面不可加用户,即使是自己也不行。
注:
- 超级用户更改不需要输入原始密码,并且设定的新密码也特殊强制要求;
- 普通用户更改的密码一定要输入原始密码,并且新设定的密码有一定的要求,如:8位以上无序数字+无序字母组合等规则,否则会报错。
2)冻结认证
命令 | 含义 |
---|---|
passwd -l username | 冻结账号认证 |
passwd -u username | 解锁账号认证 |
如冻结 zxk 这个用户,会出现 LK ,并且在 /etc/shadow 这个文件在也会在加密字符前出现!!.
解锁时输入 passwd -u zxk 结果如下
账户的锁定也可以用 usermod -L 来锁定。
用 usermod -L 锁定 zxk 这个用户,会出现 LK ,并且在 /etc/shadow 这个文件在也会在加密字符前出现一个!。用 usermod -U 解锁也会解锁一个!。在企业8 版本中 冻结和锁定的级别一样,用一个锁定或者冻结,可以用另外一个解冻或者解锁;但是在企业8 之前的版本中,用 passwd -l 锁定之后,需要用 usermod -U 解锁两次才可解锁。
3)密码删除
passwd -d username 删除用户的密码
7.3 密码使用天数
从1970-1-1算其到今天的时间
输入命令 passwd -e username 会修改默认使用时间为0 ,用户在登陆系统完成认证之后,被强制的修改一次密码,否则登陆不了系统。
输入命令 chage -d 0(number) username 也会使用户账号必须改密码才能登陆系统, 但是chage -d number 可以修改为其他指定天数。
7.4 密码最短有效期
passwd -n 1 username
chage -m 1 username
都表示用户在1天内不能改密码.
但是超级用户修改普通用户时没有限制。
7.5 密码最长有效期
passwd -x 40 username
chage -M 40 username
都表示40天内用户必须更新密码否则会被冻结,如果在这个时间段之内修改过密码,则以最后一次修改的时间往后顺延40天.
7.6 密码过期警告
passwd -w 2 lee
chage -W 2 lee
表示账号过期前2天会警告时间
7.7 认证非活跃天数
passwd -i 2 lee
chage -I 1 lee
表示账号认证最大时间超过后还能用多久.
7.8 账号认证到期时间
chage -E "2021-05-11"
表示到 2021-5-11 这天账号会被冻结.
注:
- 只能用chage改不能用passwd 改;
- chage -E “” zxk 可以将zxk 用户的账号到期认证时间改为空格,其他的信息不管是用chage 命令还是用passwd 命令都不能将改过之后的改为空。
7.9 未启用功能
8. 用户权力下放
在系统中普通用户是无法执行系统管理命令的,那么如果需要普通用户执行系统管理动作那么就需要给普通用户一定的权力,此时可以通过超级用户来进行授权。
普通用户授权方式 “sudo”
作用 : 可以使普通用户使用指定的用户身份来运行命令。
授权方法:
输入 visudo命令,此命令作用是编辑 /etc/sudoers 并提供语法检测。虽然 vim 也可以对 /etc/sudoers 命令进行编辑,但是不会提示语法报错;语法检测只能确保语法正确,不能表示设定是否合理或者单词拼写是否错误。如果有语法错误,在编辑完 /etc/sudoers 之后退出时会提示错误,按 e 继续进行编辑。
在对 /etc/sudoers 文件进行编辑时,一般在文件的100行左右进行编辑,确保代码规范性。
hostname 查看当前系统的主机名
需要设定的用户 | 在那台主机上用什么身份执行 | 命令 |
---|---|---|
username | hostname=(newusername) | [NOPASSWD:] /command, /command1 |
如:
表示 zxk 这个用户在 westoslinux.westos.org这台主机上以超级用户的身份免密执行 usr/sbin/useradd, /usr/sbin/userdel 用户建立和用户删除这两个功能。
在需要调用在这个权限命令时需要用到 sudo 这个命令加上要执行的命令。
在没有设定建立组的权限时,即使用了 sudo 也不能获得超级用户的权限,如果想要建立组等权限,我们还需要进一步的设置。
给 zxk 这个用户在westoslinux.westos.org这台主机上以超级用户的身份执行 usr/sbin/useradd, /usr/sbin/userdel ,/usr/sbin/groupadd, /usr/sbin/groupdel 用户建立和用户删除以及组的建立与删除,但是执行的过程需要密码。
可以知道在切换到 zxk 这个用户时,用 sudo 调用权限时,需要输入密码,但是也只是在第一此调用的时候需要输入密码。