linux权限管理命令
Linux 权限管理详解:从基础权限到 ACL 与 sudo 授权
Linux 系统的安全性很大程度上依赖于严格的权限管理机制。通过控制文件和目录的访问权限,可确保用户仅能操作其被授权的资源。本文将系统讲解 Linux 权限的查看、修改、ACL 高级权限及 sudo 授权等核心内容。
权限的查看与含义
使用 ls -l 命令可查看文件或目录的权限信息,输出结果的第一个字段包含 10 个字符,分别代表文件类型和权限。
权限字段解析
以 ls -l 的输出为例:
-rw-------. 1 root root 946 Feb 14 16:13 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 Feb 15 15:47 Desktop
第 1 个字符:文件类型
-:普通文件d:目录l:软链接c:字符设备(如键盘)b:块设备(如硬盘)p:管道文件s:套接字文件
第 2-10 个字符:权限位(9 位,每 3 位一组)
分为三组,分别对应所有者(u)、所属组(g)、其他人(o) 的权限:r(读权限,4):可查看文件内容或列出目录文件。w(写权限,2):可修改文件内容或增删目录文件。x(执行权限,1):可执行文件或进入目录。
示例解析:
rw-------:所有者有读、写权限,所属组和其他人无权限。rwxr-xr-x:所有者有读、写、执行权限,所属组和其他人有读、执行权限。
权限修改:chmod 命令
chmod 用于修改文件或目录的权限,支持符号模式和数字模式两种方式。
符号模式(直观易懂)
基本语法
chmod [对象][±=][权限] 文件名
- 对象:
u(所有者)、g(所属组)、o(其他人)、a(所有人,默认)。 - 操作符:
+(添加权限)、-(移除权限)、=(设置权限,覆盖原有)。 - 权限:
r、w、x。
示例
# 给所有者添加执行权限
chmod u+x script.sh
# 给所属组添加写权限,移除其他人的读权限
chmod g+w,o-r data.txt
# 给所有人设置读权限(覆盖原有)
chmod a=r logs/
数字模式(高效简洁)
将权限转换为数字(r=4、w=2、x=1),每组权限为三个数字的和(0-7)。
基本语法
chmod [所有者权限][所属组权限][其他人权限] 文件名
常见权限组合
| 数字 | 权限含义 | 适用场景 |
|---|---|---|
| 777 | rwxrwxrwx(所有权限) |
测试文件(不推荐生产环境) |
| 755 | rwxr-xr-x |
可执行文件、目录 |
| 644 | rw-r--r-- |
普通文件(如文档、配置) |
| 600 | rw------- |
敏感文件(如密码文件) |
示例
# 设置所有者可读/写/执行,所属组和其他人可读/执行
chmod 755 app/
# 设置所有者可读/写,所属组和其他人只读
chmod 644 note.txt
所有者与所属组修改
修改所有者:chown 命令
# 基本语法
chown [选项] 用户名 文件名
# 示例:将 file.txt 的所有者改为 user1
chown user1 file.txt
# 同时修改所有者和所属组(用户名:组名)
chown user1:group1 data/
# 递归修改目录及子文件(-R 选项)
chown -R user2 docs/
修改所属组:chgrp 命令
# 基本语法
chgrp [选项] 组名 文件名
# 示例:将 dir/ 的所属组改为 dev
chgrp dev dir/
# 递归修改
chgrp -R testgrp logs/
高级权限:ACL(访问控制列表)
传统权限仅支持所有者、所属组、其他人三类身份,ACL(Access Control List)可对单个用户或组设置精细化权限,解决权限管理灵活性不足的问题。
确认 ACL 支持
# 检查分区是否开启 ACL(以根分区为例)
dumpe2fs -h /dev/sda1 | grep acl
# 若输出包含 "user_xattr acl",则已开启
若未开启,临时启用:
mount -o remount,acl / # 重新挂载根分区并启用 ACL
永久启用需修改 /etc/fstab,在对应分区的挂载选项中添加 acl,然后执行 mount -a。
ACL 核心命令
(1)查看 ACL 权限:getfacl
getfacl file.txt # 输出示例:
# file: file.txt
# owner: root
# group: root
user::rw-
user:test1:r-- # 额外给 test1 用户读权限
group::r--
mask::r--
other::r--
(2)设置 ACL 权限:setfacl
# 基本语法
setfacl [选项] 权限规则 文件名
# 示例 1:给用户 test1 授予 file.txt 的读写权限
setfacl -m u:test1:rw file.txt
# 示例 2:给组 dev 授予 dir/ 的读执行权限
setfacl -m g:dev:r-x dir/
# 示例 3:递归设置目录及子文件(-R)
setfacl -m u:test2:rwx -R data/
# 示例 4:设置默认 ACL(对目录新增文件生效,-d)
setfacl -m d:u:test3:rw -R docs/ # 未来在 docs/ 中创建的文件自动继承该权限
-m:添加或修改 ACL 规则。-x:删除指定用户 / 组的 ACL 规则(如setfacl -x u:test1 file.txt)。-b:清除所有 ACL 规则。
sudo 授权:普通用户的管理员权限
sudo 允许普通用户以 root 权限执行特定命令,避免直接使用 root 账号的安全风险。
配置 sudo 权限
通过 visudo 命令编辑 /etc/sudoers 文件(自动检查语法错误,避免配置失误):
visudo
常见配置格式
# 用户 主机=(可切换的用户) 允许执行的命令
user1 ALL=(ALL) ALL # user1 可执行所有命令(需输入密码)
user2 ALL=(ALL) NOPASSWD: ALL # user2 免密码执行所有命令
user3 ALL=(root) /usr/bin/systemctl restart nginx # 仅允许重启 nginx
ALL=(ALL) ALL:允许在所有主机以所有用户身份执行所有命令。NOPASSWD::执行命令时无需输入密码(谨慎使用)。
使用 sudo 命令
# 以 root 权限执行单条命令
sudo systemctl restart sshd
# 切换到 root 环境(需输入当前用户密码)
sudo -i
# 查看当前用户可执行的 sudo 命令
sudo -l
实战案例:权限配置场景
Web 服务器文件权限:
# 网站目录给 apache 用户读写权限,其他用户只读 chown -R apache:apache /var/www/html chmod -R 755 /var/www/html # 对上传目录额外开放写权限 chmod 775 /var/www/html/uploads团队协作目录权限:
# 创建共享目录,所属组为 dev mkdir /project chgrp dev /project # 允许组内用户读写,新增文件自动继承组权限 chmod 770 /project setfacl -d -m g:dev:rwx /project # 默认 ACL 确保新文件可写