用户与权限
→ 返回 Linux
用户管理
# 创建用户
useradd -m -s /bin/bash alice # -m 创建主目录,-s 指定 shell
useradd -r -s /sbin/nologin appuser # 系统用户(无登录 shell)
# 设置密码
passwd alice
# 修改用户
usermod -aG docker alice # 追加到 docker 组
usermod -s /bin/zsh alice # 修改默认 shell
usermod -L alice # 锁定账户
usermod -U alice # 解锁账户
# 删除用户
userdel alice # 保留主目录
userdel -r alice # 同时删除主目录
# 查看用户信息
id alice # UID、GID、所属组
whoami
last # 登录历史
cat /etc/passwd # 用户列表组管理
groupadd developers
groupdel developers
gpasswd -a alice developers # 添加用户到组
gpasswd -d alice developers # 从组移除用户
groups alice # 查看用户所属组
cat /etc/group # 组列表文件权限
-rwxr-xr-- 1 alice dev 1024 Jan 1 12:00 file.sh
│├──┤├──┤├──┤
││ │ │ └─ 其他用户(o)
││ │ └──── 所属组(g)
││ └──────── 所有者(u)
│└──────────── 文件类型(- 普通文件,d 目录,l 链接)
权限值:r=4 w=2 x=1
# 数字模式
chmod 755 file.sh # rwxr-xr-x
chmod 644 file.txt # rw-r--r--
chmod 600 ~/.ssh/id_rsa # rw-------
# 符号模式
chmod u+x file.sh # 所有者加执行
chmod g-w file.txt # 组去掉写
chmod o=r file.txt # 其他只读
chmod a+x script.sh # 所有人加执行
# 递归
chmod -R 755 /opt/app/所有者与所属组
chown alice file.txt # 修改所有者
chown alice:dev file.txt # 修改所有者和组
chown -R appuser:appuser /opt/app # 递归修改
chgrp dev file.txt # 只修改所属组特殊权限
| 权限 | 数字 | 说明 |
|---|---|---|
| SUID | 4xxx | 执行时以文件所有者身份运行(如 passwd) |
| SGID | 2xxx | 执行时以文件所属组运行;目录下新文件继承组 |
| Sticky | 1xxx | 目录内只有文件所有者可删除自己的文件(如 /tmp) |
chmod u+s /usr/bin/program # 设置 SUID
chmod g+s /shared/dir # 设置 SGID
chmod +t /tmp # 设置 Sticky bit
ls -l /tmp # 末位显示 t:drwxrwxrwtsudo 配置
visudo # 安全编辑 /etc/sudoers
# 允许 alice 执行所有命令
alice ALL=(ALL:ALL) ALL
# 免密码执行特定命令
alice ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx
# 允许 wheel 组所有成员使用 sudo
%wheel ALL=(ALL) ALLusermod -aG wheel alice # CentOS/RHEL:加入 wheel 组
usermod -aG sudo alice # Ubuntu:加入 sudo 组
sudo -l # 查看当前用户 sudo 权限
sudo -u appuser command # 以指定用户执行命令ACL(访问控制列表)
标准 ugo 权限不够细粒度时使用 ACL:
# 查看 ACL
getfacl file.txt
# 设置 ACL
setfacl -m u:bob:rw file.txt # 给 bob 读写权限
setfacl -m g:dev:rx /opt/app # 给 dev 组读执行权限
setfacl -R -m u:bob:rwx /opt/app # 递归设置
# 删除 ACL
setfacl -x u:bob file.txt
setfacl -b file.txt # 删除所有 ACL