用户和组管理
文章目录
一、用户和组概念
1.用户和组概念
例子 |
---|
火车站刷脸 |
上下班刷指纹 |
天地会接头暗号 |
用户存在的目的是为了实现资源的分派。
例子 |
---|
共享单车抱回家 |
总经理行使权利 |
Authentication:认证
Authorization:授权
Accouting:审计
2.用户分类
Linux用户分为管理员和普通用户两种:
用户类别 | 用户ID |
---|---|
管理员 | 0 |
普通用户 | 1-65535 |
其中普通用户又分为系统用户和登录用户两种:
用户类别 | 用户ID |
---|---|
系统用户 | 1-999(为守护类进程获取系统资源而完成权限指派的用户) |
登录用户 | 1000-60000(为了完成交互式登录使用的用户) |
3.Linux安全上下文
运行中的程序:进程(process)
以进程发起者的身份运行
root:cat
tom:cat
进程所能够访问的所有资源的权限取决于进程的发起者的身份
Linux通过安全上下文的概念完成用户权限的指派。
先判断用户是否是某文件的属主
再判断用户是否属于某个组
最后定其为其他用户
4.Linux用户组类别
用户组类别 | 特性 |
---|---|
私有组 | 创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名相同的组 |
基本组 | 用户的默认组 |
附加组(额外组) | 默认组以外的其它组 |
二、Linux用户和组相关的配置文件
1.各配置文件说明
配置文件 | 作用 |
---|---|
/etc/passwd | 用户及其属性信息(名称、uid、基本组id等等) |
/etc/group | 组及其属性信息 |
/etc/shadow | 用户密码及其相关属性 |
/etc/gshadow | 组密码及其相关属性。在用户执行基本组切换时使用 |
|配置文件| /etc/passwd| /etc/group|
|:—😐 | |
|第一字段| 用户名 |组名|
|第二字段| 密码占位符| 组密码|
|第三字段| UID |GID|
|第四字段| GID |当前组为附加组的用户列表(分隔符为逗号)|
|第五字段| 用户的描述信息||
|第六字段| 用户家目录 |
|第七字段| 用户的登录shell|
/etc/passwd:
[root@192 ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@192 ~]# grep root /etc/group
root:x:0:
配置文件 | /etc/shadow |
---|---|
第一字段 | 登录名 |
第二字段 | 加密后的密码 |
第三字段 | 最近一次更改密码的日期 |
第四字段 | 密码的最小使用期限 |
第五字段 | 密码的最大使用期限 |
第六字段 | 密码警告时间段 |
第七字段 | 密码禁用期 |
第八字段 | 帐号的过期日期 |
第九字段 | 保留字段 |
[root@192 ~]# grep root /etc/shadow
root:$6$hyfgh043SHOGl3gb$a6kPU8Oo.04J6h.YaJbiPJ17M5jDslQhL.tHXFXQ/nHUgzA/tMI8bPh/woxyqBdeqadnbB/MOWAAqDhrWtD0s/::0:99999:7:::
2.密码复杂性
密码复杂性策略:
使用数字、大写字母、小写字母及特殊字符中至少3种
足够长
使用随机密码,不要使用有意义的单词或数字
定期更换,不要使用最近曾经使用过的密码
用户和组相关的管理命令
一、用户管理
1.用户创建命令useradd
useradd: //语法:useradd [option] USERNAME
useradd -u UID: //[UID_MIN,UID_MAX]定义在/etc/login.defs文件中
[root@192 ~]# useradd -u 2022 yy
[root@192 ~]# id yy
uid=2022(yy) gid=2022(yy) groups=2022(yy)
useradd -g GID: //指定用户所属基本组,可为组名或GID
[root@192 ~]# groupadd -g 2020 admins
[root@192 ~]# useradd -g 2020 yy1
[root@192 ~]# id yy1
uid=2023(yy1) gid=2020(admins) groups=2020(admins)
useradd -G groupname,...: //附加组,可以有多个,用逗号隔开。组groupname必须事先存在
[root@192 ~]# useradd -G admins yy3
[root@192 ~]# id yy3
uid=2025(yy3) gid=2025(yy3) groups=2025(yy3),2020(admins)
useradd -c "COMMENT": //注释信息
[root@192 ~]# useradd -c "bass" yy2
[root@192 ~]# grep yy2 /etc/passwd
yy2:x:2024:2024:bass:/home/yy2:/bin/bash
useradd -d /path/to/directory: //指定用户的家目录。此目录必须不能事先存在,否则将不会从/etc/skel中复制环境设置文件
[root@192 ~]# useradd -d /path/to/directory yy4
useradd: cannot create directory /path/to/directory
[root@192 ~]# grep yy4 /etc/passwd
yy4:x:2026:2026::/path/to/directory:/bin/bash
useradd -s shell: //这里的shell最好使用/etc/shells里面有的shell
// /etc/shells指定了当前系统可用的安全shell
useradd -M: //创建用户时不给其创建家目录
useradd -r: //添加一个系统用户
[root@192 ~]# useradd -r -M -s /sbin/nologin yy5
[root@192 ~]# id yy5
uid=995(yy5) gid=992(yy5) groups=992(yy5)
[root@192 ~]# grep yy5 /etc/passwd
yy5:x:995:992::/home/yy5:/sbin/nologin
useradd -D: //直接打印/etc/default/useradd文件的内容或配合其它选项
//(例如-s SHELL)直接修改/etc/default/useradd文件中的默认值
2.用户删除命令userdel
userdel: //语法:userdel [option] USERNAME
[root@192 ~]# userdel yy
[root@192 ~]# id yy
id: 'yy': no such user
userdel -r: //删除用户的同时删除其家目录(userdel默认不会删除其家目录)
[root@192 ~]# userdel -r yy4
userdel: yy4 mail spool (/var/spool/mail/yy4) not found
userdel: yy4 home directory (/path/to/directory) not found
3.查看用户帐号的信息命令id
id: //查看用户的帐号属性信息
[root@192 ~]# id yy2
uid=2024(yy2) gid=2024(yy2) groups=2024(yy2)
id -u: //查看UID
[root@192 ~]# id -u yy2
2024
id -g: //查看GID
[root@192 ~]# id -g yy2
2024
id -G: //查看Groups
[root@192 ~]# id -G yy2
2024
4.修改用户帐号属性的命令usermod
usermod: //修改用户属性
usermod -u UID: //更改用户uid
[root@192 ~]# usermod -u 2002 yy2
[root@192 ~]# id -u yy2
2002
usermod -g GID: //更改用户gid
[root@192 ~]# groupadd call
[root@192 ~]# usermod -g call yy2
[root@192 ~]# id -g yy2
2026
usermod -a -G groupname: //不使用-a选项,会覆盖此前的附加组
[root@192 ~]# useradd -G call,admins yy4
[root@192 ~]# id yy4
uid=2026(yy4) gid=2027(yy4) groups=2027(yy4),2020(admins),2026(call)
[root@192 ~]# usermod -G call yy4
[root@192 ~]# id yy4
uid=2026(yy4) gid=2027(yy4) groups=2027(yy4),2026(call)
usermod -d -m: //改变用户家目录的同时把原来家目录的文件移动到新的家目录中
[root@192 ~]# useradd -d /path/to/directory yy6
useradd: cannot create directory /path/to/directory
[root@192 ~]# grep yy6 /etc/passwd
yy6:x:2027:2028::/path/to/directory:/bin/bash
[root@192 ~]# usermod -md /opt/yy yy6
usermod: directory /opt/yy exists
[root@192 ~]# grep yy6 /etc/passwd
yy6:x:2027:2028::/opt/yy:/bin/bash
usermod -L: //锁定帐号
//被锁定的帐号在/etc/shadow文件中密码前面会有一个!感叹号
[root@192 ~]# useradd hzz
[root@192 ~]# echo 123456 | passwd --stdin hzz
Changing password for user hzz.
passwd: all authentication tokens updated successfully.
[root@192 ~]# usermod -L hzz
[root@192 ~]# grep hzz /etc/shadow
hzz:!$6$ZLV.EsYkg3IaNmVz$UkmeYa9xnwm1GR4fVDiSOtZmBBGy8VWwHOcbxlNbyAA4yBOi1Gz3GsR3kgerR8YEJoFMgH7puJsL0us/pc3Rr0:19178:0:99999:7:::
usermod -U: //解锁帐号
[root@192 ~]# usermod -U hzz
[root@192 ~]# grep hzz /etc/shadow
hzz:$6$ZLV.EsYkg3IaNmVz$UkmeYa9xnwm1GR4fVDiSOtZmBBGy8VWwHOcbxlNbyAA4yBOi1Gz3GsR3kgerR8YEJoFMgH7puJsL0us/pc3Rr0:19178:0:99999:7:::
//chsh 修改用户的默认shell
//语法:chsh [options] [username]
-s SHELL
5.切换用户命令su
切换用户的方式 | 特点 |
---|---|
su USERNAME | 非登录式切换,即不会读取目标用户的配置文件 |
su - USERNAME | 登录式切换,即会读取目标用户的配置文件。完全切换 |
su - | 不指定用户时默认切换至root用户 |
root su至其他用户不需要密码,非root用户su至其他用户时需要输入目标用户的密码
//语法:su [options] [-] [USER [arg]...]
-c 'COMMAND' //切换身份执行命令,命令执行结束后又回到原来的身份
su USERNAME:
[root@192 ~]# su yy1
[yy1@192 root]$ exit
exit
su - USERNAME:
[root@192 ~]# su - hzz
Last login: Tue Jul 5 20:23:54 CST 2022 on pts/0
[hzz@192 ~]$
su -:
[hzz@192 ~]$ su -
Password:
Last login: Tue Jul 5 20:25:07 CST 2022 on pts/0
[root@192 ~]#
bash的配置文件:
配置文件类型 | 配置文件路径 |
---|---|
全局配置 | /etc/profile、/etc/profile.d/*.sh、/etc/bashrc |
个人配置 | ~/.bash_profile、~/.bashrc |
配置文件类型 | 功能 |
---|---|
profile类 | 为交互式登录的shell提供配置,用来设定环境变量、运行命令或脚本 |
bashrc类 | 为非交互式登录的shell提供配置,用来设定本地变量、定义命令别名 |
登录式shell如何读取配置文件?
/etc/profile --> /etc/profile.d/.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非登录式shell如何读取配置文件?
~/.bashrc --> /etc/bashrc --> /etc/profile.d/.sh
二、密码管理命令passwd
1.密码管理命令passwd
passwd: //passwd [options] [USERNAME]
[root@192 ~]# passwd yy
Changing password for user yy.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
passwd --stdin USERNAME: //从标准输入获取用户密码, 例:echo "redhat"|passwd --stdin user1
[root@192 ~]# useradd yy
[root@192 ~]# echo 123456 | passwd --stdin yy
Changing password for user yy.
passwd: all authentication tokens updated successfully.
2.密码生成工具openssl
//语法:openssl command [ command_opts ] [ command_args ]
command //包含标准命令、消息摘要命令、加密命令
version //查看程序版本号
dgst //提取特征码
passwd //生成密码
rand //生成伪随机数
//提取特征码
[root@localhost ~]# openssl dgst -md5 /etc/fstab
MD5(/etc/fstab)= a977cc5e638d779ed880f3fee6d7067e
//生成密码 openssl passwd -1 -salt string //string一般为8位
[root@localhost ~]# openssl passwd -1 -salt hellotom
Password:
$1$hellotom$HpEDmPGqWwhP/eHg0kJHA0
//生成随机数 openssl rand -base64 NUM
//NUM表示随机数的长度
[root@localhost ~]# openssl rand -base64 20
S/q8tjUSBuUNHb+0cgDX66dbvTQ=
三、组管理
1.创建组命令groupadd
groupadd: //创建组
[root@192 ~]# groupadd runtime
[root@192 ~]# grep runtime /etc/group
runtime:x:2031:
groupadd -g GID: //指定GID
[root@192 ~]# groupadd -g 3000 runtime1
[root@192 ~]# grep runtime1 /etc/group
runtime1:x:3000:
groupadd -r GROUPNAME: //创建系统组
[root@192 ~]# groupadd -r runtime2
[root@192 ~]# grep runtime2 /etc/group
runtime2:x:991:
2. 删除组命令groupdel
groupdel: //语法:groupdel [options] GROUP
//删除组时只需要指定组名即可
[root@192 ~]# groupdel runtime
[root@192 ~]#
p runtime1 /etc/group
runtime1❌3000:
groupadd -r GROUPNAME: //创建系统组
[root@192 ~]# groupadd -r runtime2
[root@192 ~]# grep runtime2 /etc/group
runtime2❌991:
##### 2. 删除组命令groupdel
```bash
groupdel: //语法:groupdel [options] GROUP
//删除组时只需要指定组名即可
[root@192 ~]# groupdel runtime
[root@192 ~]#