用户与权限

返回 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                 # 只修改所属组

特殊权限

权限数字说明
SUID4xxx执行时以文件所有者身份运行(如 passwd
SGID2xxx执行时以文件所属组运行;目录下新文件继承组
Sticky1xxx目录内只有文件所有者可删除自己的文件(如 /tmp
chmod u+s /usr/bin/program    # 设置 SUID
chmod g+s /shared/dir         # 设置 SGID
chmod +t /tmp                 # 设置 Sticky bit
ls -l /tmp                    # 末位显示 t:drwxrwxrwt

sudo 配置

visudo                        # 安全编辑 /etc/sudoers
 
# 允许 alice 执行所有命令
alice  ALL=(ALL:ALL) ALL
 
# 免密码执行特定命令
alice  ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx
 
# 允许 wheel 组所有成员使用 sudo
%wheel ALL=(ALL) ALL
usermod -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

相关文档