# 用户和用户组管理
# 一、相关概念
# 1. 多用户操作系统
- Windwos 也是多用户操作系统,但是一般都是个人使用
- 多用户的目的是实现隔离
- 用户权限隔离
- 系统资源隔离
- root 用户与普通用户的区分
# 二、用户管理
# 1. 常用命令
-
需要用户权限,注意先切换为 root 用户
-
用户管理
-
新建用户
useradd 用户名
useradd zhangsanid zhangsan-
新建用户操作的背后
- 为用户在 /home 目录下新建同名目录做为用户的家目录。并在该目录下创建和用户相关的配置文件,这些配置文件为隐藏文件
- 将新用户记录到
/etc/passwd文件中 - 将新用户密码信息记录到
/etc/shadow文件中 - 系统为新用户创建用户 id - uid
- 如果没有为新用户指定组,系统为新用户创建一个同名的组
-
修改用户密码
passwd 用户名passwd zhangsan -
删除用户
userdel 用户名-r 删除用户同时删除用户 home 目录,以及同名组
userdel -r zhangsan
-
修改用户属性
usermod 用户名
-d 修改用户 home 目录
-g 修改用户组
useradd lisiusermod -d /home/w1 lisi
-
修改用户密码属性
chage 用户名
-
-
组管理
-
新建用户组
groupadd 组名groupadd group1usermod -g group1 lisi
id lisi# 创建用户同时也可以指定组useradd -g group1 wangwu
id wangwu -
删除用户组
groupdel 组名如果还有用户以要删除的组作为主要组,无法删除!
groupdel group1
-
# 2. 用户切换
-
切换用户
- 当前用户权限不合适,需要临时切换到其他用户身份执行命令
# 切换用户su# 使用 login shell 方式切换用户su - USERNAME -
以其他用户身份执行命令
- 当前用户权限不合适,不切换用户身份,临时使用其他用户身份(root)执行命令
- su 需要知道 root 用户密码,sudo 无需密码
sudo- 以其他用户身份执行命令visudo- 设置需要使用 sudo 的用户- 配置格式分为两段,例如
%group1 ALL=(ALL) NOPASSWD:ALL - 第一段 命令授予哪个用户或组 用户直接使用用户名;如果是组,需要在前面加 %
- 第二段 授权的命令
- 基本格式为
主机=(可切换用户) 命令 - 主机指定用户可以从哪里执行命令,只允许本地执行用 localhost,允许本地和远程用 ALL
- 可切换用户通常可以省略
- 多个命令用逗号分隔,命令使用绝对路径
- 默认需要输入当前用户密码才能执行 sudo。 NOPASSWD 表示不需要密码,但是不安全,添加在命令前,用
:分隔
- 基本格式为
- 配置格式分为两段,例如
# 实验场景 root, lisi# root 用户设置了 30 分钟后关机# lisi 用户工作尚未完成,需要取消关机操作(root) shutdown -h 30
(lisi) su - lisi
(lisi) shutdown -c
# 但是 lisi 当前并无执行 shutdown 命令的权限(root) visudo
# 在文件最下方添加如下配置lisi ALL=/sbin/shutdown, /sbin/useradd
# 如果不需要输入密码,使用下面配置lisi ALL=NOPASSWD: /sbin/shutdown, /sbin/useradd
# 保存退出# 现在 lisi 可以通过 sudo 执行 shutdown 命令(lisi) sudo /sbin/shutdown -c
# 3. 用户配置文件
/etc/passwd用户配置文件- 例如
root:x:0:0:root:/root:/bin/bash - 第一字段 用户名
- 第二字段 是否需要密码验证
- 第三字段 UID
- 第四字段 GID
- 第五字段 用户描述信息
- 第六字段 用户 home 目录
- 第七字段 login shell
- 例如
/etc/shadow用户密码相关配置文件- 只需要了解前两个字段
- 第一字段 对应用户名
- 第二字段 加密后的密码
/etc/group用户组配置文件- 例如
root:x:0: - 第一字段 组名
- 第二字段 是否需要密码验证
- 第三字段 GID
- 第四字段 其他组设置,说明组内某用户的主要组是隶属于其他组的
- 例如
# 三、文件权限
# 1. 文件权限的表示方法
drwx------ 17 root root 544B 4 8 15:20 Downloads | |
类型 权限 所属用户和组 文件名 |
-
文件类型
-普通文件- d 目录文件
- b 块特殊文件 - 块设备
- c 字符特殊文件 - 字符终端
- l 符号链接 - 类似 windows 的快捷方式
- f 命名管道
- s 套接字文件
-
字符权限表示法
- r 读 w 写 x 执行
-
数字权限表示法
- r=4 w=2 x=1
-
文件权限的表示方法
例如:
-rw-r-xr-- 1 lisi group1 mtime filename-
rw- 文件属主的权限
-
r-x 文件属组的权限
-
r-- 其他用户的权限
-
创建新⽂件有默认权限,根据 umask 值计算,属主和属组根据当前进程的⽤户来设定
-
-
目录权限的表示方法
- x 进入目录
- rx 显示目录内的文件名
- wx 修改目录内的文件名
# 2. 文件权限管理常用命令
-
修改文件、目录权限 - chmod
- 用户
- u 属主自己 g 同组用户 o 其他用户 a 所有
chmod u+x /tmp/testfilechmod a+x /tmp/testfilechmod o-r /tmp/testfilechmod g=rw- /tmp/testfile
chmod u=rwx,g-w /tmp/testfile
chmod 755 /tmp/testfile
-
同时更改子目录和文件的权限
使用选项
-R,例如chmod -R u+x /tmp/
- 用户
-
更改属主、属组 - chown
chown 用户名 /tmp/testfilechown :组名 /tmp/testfilechown 用户名:组名 /tmp/testfile
# 3. 针对特定用户或组进行授权
实际是通过设置文件访问控制列表实现的,主要利用两个选项 -m 和 -x 进行设置和取消权限。
- 设置权限
# 指定 zhangsan 用户对 test.txt 有读写权限 | |
setfacl -m u:zhangsan:rx test.txt | |
# 指定 music 组对 test.txt 有读权限 | |
setfacl -m g:music:r test.txt |
其中 acl 格式要特别注意,具体为 类型:具体值:权限 ,
其中:
类型:u 代表用户,g 代表组;
具体值:根据类型填写存在的用户或者组;
权限:采用权限字符表示法或者数字表示法。
-
取消权限
取消的是
setfacl -m命令设置到文件 ACL 的权限,用户或组恢复到默认权限。
# 取消 zhangsan 用户对 test.txt 的 ACL 权限 | |
setfacl -x u:zhangsan test.txt | |
# 取消 music 组对 test.txt 的 ACL 权限 | |
setfacl -x g:music test.txt |
注意取消权限时,acl 格式不需要第三部分
- 查看具体权限(包括 ACL 权限)
getfacl test.txt |
# 4. 案例演示
案例 1 - 文件权限管理
mkdir /test | |
ls -ld /test | |
# 观察默认权限 | |
# 创建三个测试用户 | |
groupadd groupone | |
useradd -g groupone user1 | |
useradd -g groupone user2 | |
useradd user3 | |
chown user1 /test | |
ls -ld /test | |
# 观察权限变化 | |
chown :groupone /test | |
ls -ld /test | |
# 观察权限变化 | |
cd /test | |
touch afile | |
ls -l afile | |
chmod u+x afile | |
# 观察权限变化 | |
chmod g-r afile | |
# 观察权限变化 | |
chmod o=w afile | |
# 观察权限变化 | |
chmod afile | |
# 观察权限变化 | |
chmod 644 afile | |
# 观察权限变化 | |
# 默认权限 666 - umask | |
umask | |
touch bfile | |
# 观察权限 |
案例 2 - 文件权限实际意义
chown user1:groupone afile | |
chmod 400 afile | |
echo 123 > afile # 输出重定向 | |
# 切换到 user1 | |
su - user1 | |
cat /test/afile | |
echo 456 > /test/afile # 有无权限,如何解决? | |
(user1) touch /test/bfile | |
(user1) chmod 020 /test/bfile # 用户和属组权限冲突,权限如何? | |
(user1) echo 123 > /test/bfile | |
(user1) su - user2 | |
(user2) echo 456 > /test/bfile | |
chmod 000 /test | |
su - user1 | |
ls -l # 有无权限? | |
cd /test # 有无权限? | |
chmod u=x /test | |
su - user1 | |
cd /test | |
# 说明什么? | |
chmod 000 /test | |
chmod u=rx /test | |
su - user1 | |
cd /test | |
ls -l | |
# 说明什么? | |
chmod 000 /test | |
chmod u=wx /test | |
su - user1 | |
cd /test | |
rm afile | |
ls -l | |
# 说明什么? |