用户、组与权限
一、操作系统用户分类
1.1 用户分类
- 管理员用户: root,拥有整个系统下最高权限
- 普通用户:拥有个人用户的最高权限
- 傀儡用户: 只为了运行程序而存在,不能登录
2.2 系统中用户分类表示
| 用户 | UID(default) |
|---|---|
| root | 0 |
| 傀儡用户 | 1-999 |
| 普通用户 | 1000+ |
二、用户相关的配置文件
2.1 用户信息 passwd
bash
root:x:0:0:root:/root:/bin/bash- 第1列:用户名
- 第2列:密码占位符(shadow文件)
- 第3列:UID
- 第4列:GID
- 第5列:用户别名
- 第6列:家目录
- 第7列:命令解释器
2.2 用户组信息 group
bash
root:x:0:- 第1列:组名
- 第2列:组密码
- 第3列:GID
- 第4列:组成员列表,不含组主用户
三、用户相关的目录
3.1 用户家模板 skel
创建用户的流程:
useradd sliman命令创建用户- 将
/etc/skel/目录下的所有隐藏文件拷贝到sliman的家目录 - 修改文件属主和属组
面试题:如果命令行左侧变成bash版本号怎么办?
注释掉
/etc/profile中的PS1赋值行(如有)删除/备份家目录下的
.bash_profile和.bashrc命令
cp /etc/skel/.* .拷贝skel目录下的所有文件到家目录重新进入会话
四、用户相关命令
4.1 创建用户 - useradd
语法格式:
bash
useradd [参数] <用户名>参数:
-s:指定命令解释器-u:指定UID-g:指定GID-M: 不创建家目录-G:附加组
案例:
bash
# 创建一个虚拟用户test01 uid888 gid888 不创建家目录 不允许登录系统
groupadd -g888 test01 # 一定要先创建组
useradd -u888 -g888 -M -s /sbin/nologin test01
# 批量创建10个用户
echo sliman{01..03} | xargs -n1 | sed -r 's#(.*)#userdel \1#g' | bash4.2 删除用户 - userdel
bash
userdel test01 # 删除用户,但保留用户相关文件(不推荐)
userdel -r test01 # 删除用户,同时删除用户相关的所有文件4.3 创建组 - groupadd
bash
groupadd -g888 test01 # 创建一个UID为888的组4.4 删除组 - groupdel
bash
groupdel test014.5 查看用户ID - id
bash
> id sliman
uid=1000(sliman) gid=1000(sliman) groups=1000(sliman)4.6 设置密码 - passwd
方法一:交互式设置密码
bash
passwd # 设置当前用户密码
passwd sliman # 设置指定用户密码方法二:免交互式设置密码
bash
echo 123456 | passwd --stdin slimanPS:Linux 不允许未设置密码的用户登录
4.7 修改文件属主属组 - chown
语法格式:
bash
chown [-R] [用户].[组] <文件/目录名>-R:递归修改目录及其子目录下的所有文件属主 属组
案例:
bash
# 修改文件属主和属组为root
chown root.root 1.txt
# 设置目录及目录下的所有文件属组为root
chown -R .root dir/4.8 修改文件权限 - chmod
语法格式:
bash
chmod [选项] 权限模式 文件-R:递归对当前目录下所有子文件和目录进行权限变更
五、sudo 提权
普通用户下可以通过sudo命令来获取部分root的权限。
bash
sudo [选项] 命令-i:模拟初始登录,加载目标用户的环境-l:列出当前用户可执行的sudo命令-k:撤销sudo凭据缓存
修改sudo配置:
方法一:visudo 命令(推荐)visudo命令支持语法检查
方法二:手动编辑 /etc/sudoers 文件
跳转至100行,使用如下格式添加所有权限
bash
root ALL=(ALL) ALL例:
bash
# 添加cat命令给用户
sliman ALL=(ALL) /usr/bin/cat
# 用户无需输入密码使用命令
sliman ALL=(ALL) NOPASSWD: ALL
# 取反,不允许使用某命令
sliman ALL=(ALL) !/usr/bin/mv,!/usr/bin/rm六、权限位说明
6.1 最佳实践
企业中对于普通文件的最高权限为:644,即:rw-r--r--
6.2 权限对目录的作用
r:什么也干不了w:什么也干不了x:只能进目录r-x:可以正常对目录进行查看,和对目录下的文件进行写入操作rwx:可以对目录进行所有操作,创建、移动、删除等
6.3 默认权限控制 UMASK
mask 控制着 Linux 中文件和目录的默认权限
bash
> umask
0022文件默认权限 = 666 - mask
系统默认权限 = 777 - mask
NOTE
如果UMASK值中含有奇数,则文件的最终权限要在相减后在奇数位 +1
笔试题:如果默认创建000属性的文件请问UMASK值是多少?
答:是 666。
6.4 隐藏权限
查看隐藏权限
bash
> lsattr /etc/passwd
--------------e------- /etc/passwd设置隐藏权限
i:不可变,谁也无法对文件进行任何改动a:也不可变,但是可以追加内容
bash
> lsattr +i /etc/passwd6.5 特殊权限位
特殊权限位是 12 个权限位中的前 3 位,可以通过 stat 命令查看,设置方法与普通权限相同。
suid:4,给文件添加 s 权限后,所有使用这个命令的用户都拥有该命令主人的权限。针对二进制命令或程序,不能作用在脚本上。sgid:2,基本和suid相同,所有使用这个命令的用户都拥有命令主人所属组的权限。sticky:1,粘滞位,每个用户只能管理自己的文件(默认情况下能否删除一个文件看的是上级目录的权限,不看文件权限),例如 /tmp 目录。