系统操作篇-用户和组管理
用户和用户组管理
一、相关概念
1. 多用户操作系统
- Windwos也是多用户操作系统,但是一般都是个人使用
- 多用户的目的是实现隔离
- 用户权限隔离
- 系统资源隔离
- root用户与普通用户的区分
二、用户管理
1. 常用命令
需要用户权限,注意先切换为root用户
用户管理
新建用户
useradd 用户名
useradd zhangsan id zhangsan
新建用户操作的背后
- 为用户在/home目录下新建同名目录做为用户的家目录。并在该目录下创建和用户相关的配置文件,这些配置文件为隐藏文件
- 将新用户记录到
/etc/passwd
文件中 - 将新用户密码信息记录到
/etc/shadow
文件中 - 系统为新用户创建用户id - uid
- 如果没有为新用户指定组,系统为新用户创建一个同名的组
修改用户密码
passwd 用户名
passwd zhangsan
删除用户
userdel 用户名
-r 删除用户同时删除用户home目录,以及同名组
userdel -r zhangsan
修改用户属性
usermod 用户名
-d 修改用户home目录
-g 修改用户组
useradd lisi usermod -d /home/w1 lisi
修改用户密码属性
chage 用户名
组管理
新建用户组
groupadd 组名
groupadd group1 usermod -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表示不需要密码,但是不安全,添加在命令前,用
:
分隔
- 配置格式分为两段,例如
- 设置需要使用sudo的用户
# 实验场景 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/testfile chmod a+x /tmp/testfile chmod o-r /tmp/testfile chmod g=rw- /tmp/testfile chmod u=rwx,g-w /tmp/testfile chmod 755 /tmp/testfile
同时更改子目录和文件的权限
使用选项
-R
,例如chmod -R u+x /tmp/
- 用户
更改属主、属组 - chown
chown 用户名 /tmp/testfile chown :组名 /tmp/testfile chown 用户名:组名 /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
# 说明什么?