前言 Linux 是一款多用户操作系统,用户和权限管理是系统安全的基础。无论是管理个人服务器还是企业生产环境,掌握用户与权限管理都是运维人员的必修课。本文将从用户/组管理、文件权限、ACL、特殊权限、sudo 配置等方面进行全面讲解。
一、用户管理 1.1 用户相关文件 Linux 系统中与用户相关的核心文件有:
文件 用途
/etc/passwd用户账户信息(用户名、UID、GID、家目录、Shell)
/etc/shadow用户密码哈希及过期信息(仅 root 可读)
/etc/group用户组信息
/etc/gshadow组密码信息
/etc/login.defs用户创建时的默认配置(UID/GID 范围、密码过期天数等)
/etc/passwd 中一行记录的结构示例:
1 xinyu:x:1000:1000:XinYu:/home/xinyu:/bin/bash
各字段含义:用户名:密码占位符:UID:GID:GECOS注释:家目录:登录Shell。
1.2 用户创建 1 2 3 4 5 6 7 8 9 10 11 useradd -m -s /bin/bash devops useradd -m -u 2001 -G docker,sudo appadmin useradd -r -s /usr/sbin/nologin myservice passwd devops
选项说明:
-m:创建家目录
-s:指定登录 Shell
-u:指定 UID
-G:指定附加组(逗号分隔)
-r:创建系统用户
-g:指定主组
1.3 用户修改与删除 1 2 3 4 5 6 7 8 9 10 usermod -aG docker devops usermod -l newname oldname usermod -d /home/newhome -m devops usermod -L devops usermod -U devops userdel devops userdel -r devops
安全提示 :删除用户前先用 who 或 w 确认用户不在线;慎用 -r 参数,确保已备份重要数据。
二、组管理 2.1 组创建 1 2 3 4 5 6 groupadd developers groupadd -g 3000 devops groupadd -r system-service
2.2 组修改与删除 1 2 3 4 5 6 7 8 9 10 groupmod -n newgroup oldgroup groupmod -g 3100 developers groupdel developers groups devops id devops
2.3 组成员管理 1 2 3 4 5 6 7 8 gpasswd -a devops developers gpasswd -d devops developers gpasswd -A devops developers
三、文件权限管理 3.1 权限基础 1 2 -rw-r--r-- 1 root root 1024 Jun 9 10:00 test.txt drwxr-xr-x 2 root root 4096 Jun 9 10:00 mydir/
每部分的含义:
位置 含义 说明
第1位 文件类型 -普通文件,d目录,l符号链接,c字符设备,b块设备
第2-4位 所有者权限 r读,w写,x执行
第5-7位 所属组权限 同上
第8-10位 其他用户权限 同上
3.2 chmod — 修改权限 1 2 3 4 5 6 7 8 9 10 11 12 13 14 chmod u+x script.sh chmod g-w script.sh chmod o=r script.sh chmod a+x script.sh chmod u=rwx,g=rx,o=r script.sh chmod 755 script.sh chmod 644 config.conf chmod 600 private.key chmod 700 ~/.ssh chmod 750 /shared/project
常用权限速查:
权限值 含义 典型用途
777 所有人可读写执行 危险!仅临时文件
755 所有者完全控制,其他人读+执行 可执行文件、目录
750 所有者完全控制,组读+执行 团队项目目录
700 仅所有者完全控制 私钥、敏感脚本
644 所有者读写,其他人只读 普通配置文件
640 所有者读写,组只读 团队共享配置文件
600 仅所有者读写 SSH密钥、密码文件
3.3 chown — 修改所有者和组 1 2 3 4 chown devops script.sh chown :developers script.sh chown devops:developers script.sh chown -R devops:developers /project
3.4 目录权限的特殊性 目录的权限与文件不同:
读 (r) :可以列出目录内容(ls)
写 (w) :可以在目录中创建/删除/重命名文件
执行 (x) :可以进入目录(cd)和访问文件
1 2 3 chmod 755 /home/devops/shared chmod 1770 /home/devops/shared
四、特殊权限 4.1 SUID (Set User ID) 当可执行文件设置了 SUID,其他用户执行时临时获得文件所有者的权限。
1 2 3 4 5 6 chmod u+s /usr/bin/myapp chmod 4755 /usr/bin/myapp find / -perm /4000 -type f 2>/dev/null
安全风险 :SUID 程序如果存在漏洞可能导致提权攻击。定期审计全系统的 SUID 文件是安全基线要求。
4.2 SGID (Set Group ID)
对 可执行文件 :执行时获得文件所属组的权限
对 目录 :目录内新建的文件自动继承目录的所属组
1 2 3 4 5 6 chmod g+s /shared/projectchmod 2755 /shared/projectls -ld /shared/project
SGID 在团队协作中非常实用。例如设置 /shared/project 的所属组为 developers 并开启 SGID,所有团队成员在此目录下创建的文件自动属于 developers 组,无需手动调整。
4.3 Sticky Bit 设置了 Sticky Bit 的目录中,用户只能删除自己的文件 。
1 2 3 4 5 6 chmod o+t /tmpchmod 1777 /tmp find / -perm /1000 -type d 2>/dev/null
/tmp 和 /var/tmp 是典型的 Sticky Bit 应用场景,所有用户都有写权限,但只能删除自己的文件。
4.4 特殊权限速查
特殊位 数字前缀 符号表示 显示标记
SUID 4 u+s 所有者 x 位变为 s
SGID 2 g+s 组 x 位变为 s
Sticky 1 o+t 其他 x 位变为 t
五、ACL(访问控制列表) 当传统的三级权限(所有者/组/其他)无法满足复杂权限需求时,可以使用 ACL 为单个用户或组设置独立权限。
5.1 启用 ACL 1 2 3 4 5 6 tune2fs -l /dev/sda1 | grep acl apt install acl yum install acl
5.2 ACL 基本操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 getfacl document.txt setfacl -m u:alice:rwx document.txt setfacl -m u:bob:rx document.txt setfacl -m g:developers:rwx /shared/data setfacl -m d:u:alice:rwx /shared/data setfacl -R -m u:alice:rwx /shared/data setfacl -x u:alice document.txt setfacl -x g:developers /shared/data setfacl -b document.txt
5.3 ACL 实战:多用户协作 假设有一个项目目录 /project/website,需要如下权限分配:
所有者 admin 有完整权限
开发组 developers 有读写权限
运维组 ops 有只读权限
审计员 auditor 有只读权限
其他用户无权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 mkdir -p /project/websitechown admin:developers /project/websitechmod 770 /project/website setfacl -m g:ops:rx /project/website setfacl -m u:auditor:rx /project/website setfacl -m d:g:developers:rwx /project/website setfacl -m d:g:ops:r-x /project/website setfacl -m d:u:auditor:r-x /project/website getfacl /project/website
六、sudo 配置 sudo 允许授权用户以其他用户(通常是 root)的身份执行命令,是 Linux 权限管理的核心工具。
6.1 sudo 基础 1 2 3 4 5 6 7 8 9 sudo apt updatesudo -u devops whoami sudo -isudo su -
6.2 配置 sudo 规则 使用 visudo 编辑 /etc/sudoers(切勿直接编辑,语法错误会导致 sudo 失效):
基本语法:
1 user hostname=(runas) TAG:COMMANDS
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 root ALL=(ALL:ALL) ALL %sudo ALL=(ALL:ALL) ALL %wheel ALL=(ALL:ALL) ALL %ci-runner ALL=(ALL) NOPASSWD: ALL devops ALL=(ALL) /usr/bin/systemctl, /usr/bin/journalctl webadmin ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
6.3 使用 sudoers.d 目录 推荐将自定义规则放在 /etc/sudoers.d/ 目录下,便于管理:
1 2 3 4 5 6 7 8 9 10 cat > /etc/sudoers.d/deploy << 'EOF' deployer ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx deployer ALL=(root) NOPASSWD: /usr/bin/systemctl reload nginx deployer ALL=(root) NOPASSWD: /bin/cp /home/deployer/app/* /var/www/ EOF chmod 440 /etc/sudoers.d/deploy
安全原则 :遵循最小权限原则——只赋予用户完成工作所需的最少权限,优先使用命令白名单而不是通配符。使用 NOPASSWD 时需谨慎,确保服务器安全和物理访问安全。
七、密码策略 7.1 密码过期配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 chage -l devops chage -M 90 devops chage -d 0 devops chage -W 7 devops chage -m 1 devops chage -I 5 devops
7.2 全局密码策略 编辑 /etc/login.defs:
1 2 3 4 5 PASS_MAX_DAYS 90 # 密码最大有效天数 PASS_MIN_DAYS 1 # 密码最短使用天数 PASS_WARN_AGE 7 # 过期前警告天数 UID_MIN 1000 # 普通用户起始 UID UID_MAX 60000 # 普通用户最大 UID
如果需要更严格的密码强度要求,可结合使用 libpam-pwquality:
1 2 3 apt install libpam-pwquality
八、umask 与默认权限 umask 决定了新建文件和目录的默认权限:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 umask umask 002 echo 'umask 002' >> ~/.bashrc
umask 文件默认权限 目录默认权限 适用场景
022 644 (rw-r--r--) 755 (rwxr-xr-x) 单用户桌面
002 664 (rw-rw-r--) 775 (rwxrwxr-x) 团队协作
007 660 (rw-rw----) 770 (rwxrwx---) 团队内部项目
077 600 (rw-------) 700 (rwx------) 高安全个人目录
九、实用运维脚本 9.1 用户审计脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #!/bin/bash echo "=== 系统可登录用户列表 ===" awk -F: '$7 ~ /bash|sh|zsh/ {print $1 " (UID: " $3 ", Home: " $6 ")"}' /etc/passwd echo "" echo "=== 具有 sudo 权限的用户 ===" grep -r '^[^#].*ALL' /etc/sudoers /etc/sudoers.d/ 2>/dev/null | \ awk -F: '{print $1 ": " $2}' | sort -u echo "" echo "=== 最近登录记录 ===" last -n 10 echo "" echo "=== 空密码用户(高危)===" awk -F: '($2 == "" || $2 == "!") && $3 >= 1000 {print $1 " 空密码!"}' /etc/shadow
9.2 批量创建用户 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/bin/bash while IFS=: read -r user group shell; do if id "$user " &>/dev/null; then echo "用户 $user 已存在,跳过" continue fi useradd -m -s "$shell " -G "$group " "$user " echo "已创建用户: $user (组: $group )" done < users.txtecho "=== 批量创建完成 ==="
9.3 大范围权限修复 1 2 3 4 5 6 7 8 9 10 #!/bin/bash WEBROOT="/var/www/html" WEB_GROUP="www-data" find "$WEBROOT " -type f -exec chmod 644 {} \; find "$WEBROOT " -type d -exec chmod 755 {} \; chown -R root:"$WEB_GROUP " "$WEBROOT " echo "Web 目录权限修复完成"
十、常见问题排查
问题 可能原因 解决方法
Permission denied 无执行/读取权限 ls -l 查看权限,chmod 调整
Cannot create file in shared dir 无写权限或目录无 x 权限 检查目录权限和 ACL
sudo: command not found 命令不在 sudo 白名单中 编辑 sudoers 添加命令
sudo: no tty present 非交互环境执行需要 tty 的命令 添加 !requiretty 或注释 requiretty
userdel: cannot remove user 用户进程正在运行 killall -u username 后重试
群组内有用户无法访问共享目录 未设置 SGID 或 ACL 配置 chmod g+s 或 setfacl
umask 未生效 shell 配置文件优先级问题 检查 .bashrc、.profile、.bash_profile 顺序
ACL 设置后 getfacl 未显示 文件系统未挂载 acl 选项 挂载时添加 acl 选项
总结 Linux 用户与权限管理是一个系统性的工程,涉及用户账户、文件权限、ACL、sudo 等多个层面。核心原则是 最小权限 ——只授予完成任务所需的最少权限。建议运维人员将以下实践融入日常工作:
使用 /etc/sudoers.d/ 管理授权,保持 sudoers 文件的清晰整洁
利用 ACL 和 SGID 实现精细化的团队协作权限管理
定期审计 SUID/SGID 文件和 sudo 配置
统一配置密码策略,强制复杂密码和定期更新
使用版本管理(如 Git)管理 sudoers 配置和权限脚本
掌握了这些基础,你就能构建一个既高效又安全的 Linux 权限管理体系。
本文由AI辅助生成,内容仅供参考