0%

linux权限管理命令

Linux 权限管理详解:从基础权限到 ACL 与 sudo 授权

Linux 系统的安全性很大程度上依赖于严格的权限管理机制。通过控制文件和目录的访问权限,可确保用户仅能操作其被授权的资源。本文将系统讲解 Linux 权限的查看、修改、ACL 高级权限及 sudo 授权等核心内容。

权限的查看与含义

使用 ls -l 命令可查看文件或目录的权限信息,输出结果的第一个字段包含 10 个字符,分别代表文件类型和权限。

权限字段解析

ls -l 的输出为例:

1
2
-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 用于修改文件或目录的权限,支持符号模式数字模式两种方式。

符号模式(直观易懂)

基本语法
1
chmod [对象][±=][权限] 文件名
  • 对象u(所有者)、g(所属组)、o(其他人)、a(所有人,默认)。
  • 操作符+(添加权限)、-(移除权限)、=(设置权限,覆盖原有)。
  • 权限rwx
示例
1
2
3
4
5
6
7
8
# 给所有者添加执行权限
chmod u+x script.sh

# 给所属组添加写权限,移除其他人的读权限
chmod g+w,o-r data.txt

# 给所有人设置读权限(覆盖原有)
chmod a=r logs/

数字模式(高效简洁)

将权限转换为数字(r=4w=2x=1),每组权限为三个数字的和(0-7)。

基本语法
1
chmod [所有者权限][所属组权限][其他人权限] 文件名
常见权限组合
数字 权限含义 适用场景
777 rwxrwxrwx(所有权限) 测试文件(不推荐生产环境)
755 rwxr-xr-x 可执行文件、目录
644 rw-r--r-- 普通文件(如文档、配置)
600 rw------- 敏感文件(如密码文件)
示例
1
2
3
4
5
# 设置所有者可读/写/执行,所属组和其他人可读/执行
chmod 755 app/

# 设置所有者可读/写,所属组和其他人只读
chmod 644 note.txt

所有者与所属组修改

修改所有者:chown 命令

1
2
3
4
5
6
7
8
9
10
11
# 基本语法
chown [选项] 用户名 文件名

# 示例:将 file.txt 的所有者改为 user1
chown user1 file.txt

# 同时修改所有者和所属组(用户名:组名)
chown user1:group1 data/

# 递归修改目录及子文件(-R 选项)
chown -R user2 docs/

修改所属组:chgrp 命令

1
2
3
4
5
6
7
8
# 基本语法
chgrp [选项] 组名 文件名

# 示例:将 dir/ 的所属组改为 dev
chgrp dev dir/

# 递归修改
chgrp -R testgrp logs/

高级权限:ACL(访问控制列表)

传统权限仅支持所有者、所属组、其他人三类身份,ACL(Access Control List)可对单个用户或组设置精细化权限,解决权限管理灵活性不足的问题。

确认 ACL 支持

1
2
3
# 检查分区是否开启 ACL(以根分区为例)
dumpe2fs -h /dev/sda1 | grep acl
# 若输出包含 "user_xattr acl",则已开启

若未开启,临时启用:

1
mount -o remount,acl /  # 重新挂载根分区并启用 ACL

永久启用需修改 /etc/fstab,在对应分区的挂载选项中添加 acl,然后执行 mount -a

ACL 核心命令

(1)查看 ACL 权限:getfacl
1
2
3
4
5
6
7
8
9
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 基本语法
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 文件(自动检查语法错误,避免配置失误):

1
visudo
常见配置格式
1
2
3
4
# 用户  主机=(可切换的用户)  允许执行的命令
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 命令

1
2
3
4
5
6
7
8
# 以 root 权限执行单条命令
sudo systemctl restart sshd

# 切换到 root 环境(需输入当前用户密码)
sudo -i

# 查看当前用户可执行的 sudo 命令
sudo -l

实战案例:权限配置场景

  1. Web 服务器文件权限

    1
    2
    3
    4
    5
    # 网站目录给 apache 用户读写权限,其他用户只读
    chown -R apache:apache /var/www/html
    chmod -R 755 /var/www/html
    # 对上传目录额外开放写权限
    chmod 775 /var/www/html/uploads
  2. 团队协作目录权限

    1
    2
    3
    4
    5
    6
    # 创建共享目录,所属组为 dev
    mkdir /project
    chgrp dev /project
    # 允许组内用户读写,新增文件自动继承组权限
    chmod 770 /project
    setfacl -d -m g:dev:rwx /project # 默认 ACL 确保新文件可写

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10