Linux权限管理

2025-12-16 15:07:10 693

欢迎来到8455线路检测中心技术小课堂。

一、权限的基本概念

1.1 权限类型

Linux 系统中有三种基本权限:

  • r (read) - 读取权限

  • w (write) - 写入权限

  • x (execute) - 执行权限

1.2 权限作用对象

权限针对三类用户:

  • u (user/owner) - 文件所有者

  • g (group) - 文件所属组

  • o (others) - 其他用户

  • a (all) - 所有用户(u+g+o)

二、权限的表示方法

2.1 字符表示法

-rwxr-xr-x
d rwx r-x r-x
↑  ↑   ↑   ↑
│  │   │   └─ 其他用户权限 (o)
│  │   └─ 所属组权限 (g)
│  └─ 所有者权限 (u)
└─ 文件类型 (-:普通文件, d:目录, l:链接)

2.2 数字表示法(八进制)


权限二进制八进制
---0000
--x0011
-w-0102
-wx0113
r--1004
r-x1015
rw-1106
rwx1117


三、chmod 命令详解

3.1 数字模式(最常用)

# 常用权限组合
chmod 755 file        # rwxr-xr-x
chmod 644 file        # rw-r--r--
chmod 777 file        # rwxrwxrwx(不推荐用于安全文件)
chmod 750 file        # rwxr-x---
chmod 600 file        # rw-------
chmod 700 script.sh   # 确保脚本可执行

3.2 字符模式

# 添加权限
chmod u+x file        # 给所有者添加执行权限
chmod g+r file        # 给组添加读取权限
chmod o+w file        # 给其他用户添加写入权限
chmod a+x file        # 给所有用户添加执行权限
chmod +x file         # 给所有用户添加执行权限(简写)

# 删除权限
chmod u-w file        # 删除所有者的写入权限
chmod g-x file        # 删除组的执行权限
chmod o-r file        # 删除其他用户的读取权限
chmod a-w file        # 删除所有用户的写入权限

# 设置权限
chmod u=rwx file      # 设置所有者权限为 rwx
chmod g=rx file       # 设置组权限为 r-x
chmod o=r file        # 设置其他用户权限为 r--
chmod u=rw,g=r,o= file  # 分别设置不同用户的权限

3.3 递归修改目录权限

# 修改目录及其所有内容
chmod -R 755 directory/    # 递归修改目录权限
chmod -R u+rwx directory/  # 递归添加所有者权限
chmod -R g-w directory/    # 递归删除组写入权限

四、特殊权限

4.1 SUID (Set User ID) - 4

# SUID 权限
chmod 4755 file       # 设置 SUID 权限
chmod u+s file        # 同 4755
ls -l /usr/bin/passwd  # 查看 SUID 示例
  • 作用:程序运行时以文件所有者的身份运行

  • 位置:用户权限的执行位,显示为 s

  • 示例:-rwsr-xr-x

4.2 SGID (Set Group ID) - 2

# SGID 权限
chmod 2755 file       # 设置 SGID
chmod g+s file        # 同 2755
chmod 2770 /shared/   # 常用于共享目录
  • 作用: 文件:运行时以文件所属组的身份运行 目录:新创建的文件继承目录的组

  • 位置:组权限的执行位,显示为 s

  • 示例:-rwxr-sr-x

4.3 Sticky Bit (粘滞位) - 1

# Sticky Bit
chmod 1777 /tmp       # 设置粘滞位
chmod o+t directory   # 同 1777
chmod 1755 directory
  • 作用:只有文件所有者才能删除/重命名自己的文件

  • 位置:其他用户的执行位,显示为 t

  • 示例:drwxrwxrwt(/tmp 目录)

  • 常用场景:/tmp, /var/tmp共享目录

4.4 特殊权限数字表示

# 组合设置
chmod 4755 file       # SUID:4 + 755 = 4755
chmod 2755 file       # SGID:2 + 755 = 2755
chmod 1755 file       # Sticky:1 + 755 = 1755
chmod 6755 file       # SUID+SGID:4+2=6 + 755 = 6755

五、chown 和 chgrp 命令

5.1 更改所有者和组

# 更改所有者
chown user file       # 更改文件所有者
chown user:group file # 同时更改所有者和组
chown :group file     # 只更改组(同 chgrp)
chown user: file      # 更改所有者,组设为用户主组

# 递归更改
chown -R user:group directory/  # 递归更改目录
chown -R www-data:www-data /var/www/  # 常见用例

# 保留符号链接
chown -h user link    # 更改符号链接本身,而不是目标

5.2 更改所属组

# 更改文件所属组
chgrp group file      # 更改文件所属组
chgrp -R group directory/  # 递归更改目录
chgrp staff file.txt

六、umask 详解

6.1 umask 的作用

umask 决定新创建文件的默认权限

umask               # 查看当前 umask
umask 022           # 设置 umask
umask 027
umask -S            # 以符号形式显示

6.2 权限计算规则

  • 目录权限 = 777 - umask

  • 文件权限 = 666 - umask(文件默认无执行权限)

常见 umask 值:

# 默认权限
umask 0022          # 目录:755(rwxr-xr-x), 文件:644(rw-r--r--)
umask 0002          # 目录:775(rwxrwxr-x), 文件:664(rw-rw-r--)
umask 0077          # 目录:700(rwx------), 文件:600(rw-------)

6.3 永久设置 umask

# 用户级设置
vim ~/.bashrc       # 添加:umask 022
vim ~/.bash_profile

# 系统级设置
vim /etc/profile
vim /etc/bashrc

七、实用示例

7.1 文件和目录权限设置

# 安全配置文件权限
chmod 600 ~/.ssh/id_rsa         # 私钥文件
chmod 644 ~/.ssh/id_rsa.pub     # 公钥文件
chmod 700 ~/.ssh/              # SSH 目录
chmod 755 /usr/local/bin/      # 可执行程序目录
chmod 644 /etc/passwd          # 敏感配置文件
chmod 600 /etc/shadow          # 密码文件

# Web 服务器权限
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
find /var/www/html -type f -exec chmod 644 {} \\\\\\\\;
find /var/www/html -type d -exec chmod 755 {} \\\\\\\\;

# 共享目录设置
mkdir /shared
chown :developers /shared
chmod 2775 /shared            # SGID 确保继承组权限

7.2 脚本和程序权限

# 确保脚本可执行
chmod +x script.sh
chmod 755 script.sh

# 只有所有者可写
chmod 755 /usr/local/bin/myapp
chmod 644 /etc/myapp.conf

# 特权程序
chmod 4755 /usr/bin/sudo      # SUID

7.3 权限检查

# 查看权限详细信息
ls -la file
ls -ld directory/    # 只查看目录权限
stat file           # 查看详细权限信息
getfacl file        # 查看 ACL 权限

# 查找有特殊权限的文件
find /usr/bin -perm -4000  # 查找 SUID 文件
find /usr/bin -perm -2000  # 查找 SGID 文件
find / -perm -1000 -type d 2>/dev/null  # 查找粘滞位目录

八、高级权限控制

8.1 访问控制列表 (ACL)

# 安装 ACL 支持
sudo apt-get install acl      # Debian/Ubuntu
sudo yum install acl          # RHEL/CentOS

# 设置 ACL
setfacl -m u:username:rwx file     # 给用户添加权限
setfacl -m g:groupname:rx file     # 给组添加权限
setfacl -m o::r file              # 设置其他用户权限
setfacl -m d:u:username:rwx dir/  # 默认 ACL(对新文件生效)

# 查看 ACL
getfacl file
ls -l file       # 有 ACL 的文件会显示 +

# 删除 ACL
setfacl -x u:username file    # 删除用户权限
setfacl -b file               # 删除所有 ACL

8.2 默认权限配置文件

# 创建文件模板
vim /etc/skel/.bashrc
# 添加:umask 022

# 检查系统默认设置
vim /etc/login.defs
# 查看 UMASK 设置

九、常见问题解决

9.1 权限问题诊断

# 权限拒绝错误
ls -l file        # 检查权限
id               # 检查当前用户和组
groups username  # 检查用户所属组

# 文件不可执行
chmod +x script.sh
./script.sh

# 无法写入目录
chmod +w directory/
chown username directory/

9.2 安全最佳实践

# 最小权限原则
1. 文件默认权限 644
2. 目录默认权限 755
3. 敏感文件权限 600
4. 脚本文件权限 755
5. 共享目录使用 SGID
6. 临时目录使用粘滞位
7. 避免不必要的 SUID/SGID
8. 定期检查权限:find / -perm -4000 -o -perm -2000

十、权限管理速查表


数字权限描述
400r--------所有者可读
644rw-r--r--默认文件权限
755rwxr-xr-x默认目录/脚本权限
600rw-------所有者可读写
700rwx------所有者完全控制
750rwxr-x---所有者和组
777rwxrwxrwx所有用户完全控制(危险!)
特殊描述
------------
4755rwsr-xr-xSUID 权限
2755rwxr-sr-xSGID 权限
1755rwxr-xr-t粘滞位权限
1777rwxrwxrwt完全开放的粘滞位目录


这个详细的权限管理指南涵盖了 Linux 权限的所有重要方面,包括基本权限、特殊权限、umask 设置和 ACL 控制。理解这些概念对于系统管理和安全配置至关重要。8455线路检测中心官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,8455线路检测中心整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。

更多技术知识,8455线路检测中心期待与你一起探索。



提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题:
XML 地图