权限管理是Linux的核心安全机制,彻底理解它,你就能解决大多数“Permission denied”问题。

当你执行 ls -l时,看到的第一个字段就是权限信息:

drwxr-xr-x   # 这是一个目录,所有者有rwx,组和其他人有r-x
-rw-r--r--   # 这是一个文件,所有者有rw-,组和其他人有r--
lrwxrwxrwx   # 这是一个链接文件,所有权限开放

权限字符串分解:​

  • 第1位:​文件类型​ (d=目录, -=普通文件, l=链接文件)

  • 第2-4位:​所有者权限​ (user)

  • 第5-7位:​所属组权限​ (group)

  • 第8-10位:​其他用户权限​ (others)

三种基本权限

权限字符

数字

对文件的含义

对目录的含义

r​ (read)

4

可读取文件内容

可列出目录内容 (ls)

w​ (write)

2

可修改文件内容

可在目录中创建/删除文件

x​ (execute)

1

可作为程序执行

可进入目录 (cd)

两种权限设置方法

数字表示法

原理​:将每组权限转换为数字相加

  • r = 4, w = 2, x = 1

  • 所有者权限 + 组权限 + 其他用户权限

# 文件常用权限
chmod 644 file.txt    # rw-r--r-- (用户可读写,其他人只读)
chmod 755 script.sh   # rwxr-xr-x (用户全权限,其他人可读执行)

# 目录常用权限  
chmod 755 directory/  # rwxr-xr-x (用户全权限,其他人可读和进入)
chmod 700 private/    # rwx------ (仅用户自己有权限)

# 脚本文件需要可执行权限
chmod +x my_script.sh # 给所有用户添加执行权限

符号表示法(更直观)

格式​:[用户类型][操作符][权限]

  • 用户类型:u(用户), g(组), o(其他人), a(所有人)

  • 操作符:+(添加), -(移除), =(精确设置)

  • 权限:r, w, x

# 添加权限
chmod u+x file.txt     # 给用户添加执行权限
chmod g+w file.txt     # 给组添加写权限
chmod o-r file.txt     # 移除其他人的读权限

# 精确设置
chmod u=rwx,g=rx,o= file.txt  # 用户rwx,组rx,其他人无权限

# 快捷方式
chmod a+x script.sh    # 给所有人添加执行权限
chmod go-w file.txt    # 移除组和其他人的写权限

权限相关命令

chmod文件权限

chmod [OPTION]... MODE[,MODE]... FILE...

# 设置文件为644权限 (rw-r--r--)
chmod 644 document.txt

# 设置目录为755权限 (rwxr-xr-x)
chmod 755 my_folder/

# 给脚本添加执行权限
chmod +x backup_script.sh

# 递归修改目录下所有文件的权限
chmod -R 755 web_assets/

chown 文件归属

# 改变文件所有者
chown username file.txt

# 改变所有者和组
chown username:groupname file.txt

# 只改变组
chown :groupname file.txt

# 递归改变目录的所有者
chown -R username:groupname directory/

chgrp 改变文件所属组

使用chown也行了

# 改变文件的所属组
chgrp developers app.py

太好了!权限管理是Linux的核心安全机制,也是机考的绝对重点。彻底理解它,你就能解决大多数“Permission denied”问题。

🔐 Linux权限系统详解

Linux权限基于一个简单的模型:​什么哪些权限。

1. 权限的三要素

当你执行 ls -l时,看到的第一个字段就是权限信息:

drwxr-xr-x   # 这是一个目录,所有者有rwx,组和其他人有r-x
-rw-r--r--   # 这是一个文件,所有者有rw-,组和其他人有r--
lrwxrwxrwx   # 这是一个链接文件,所有权限开放

权限字符串分解:​

  • 第1位:​文件类型​ (d=目录, -=普通文件, l=链接文件)

  • 第2-4位:​所有者权限​ (user)

  • 第5-7位:​所属组权限​ (group)

  • 第8-10位:​其他用户权限​ (others)

2. 三种基本权限

权限字符

数字

对文件的含义

对目录的含义

r​ (read)

4

可读取文件内容

可列出目录内容 (ls)

w​ (write)

2

可修改文件内容

可在目录中创建/删除文件

x​ (execute)

1

可作为程序执行

可进入目录 (cd)


🧮 两种权限设置方法

方法一:数字表示法(最常用)

原理​:将每组权限转换为数字相加

  • r = 4, w = 2, x = 1

  • 所有者权限 + 组权限 + 其他用户权限

常见权限组合:​

# 文件常用权限
chmod 644 file.txt    # rw-r--r-- (用户可读写,其他人只读)
chmod 755 script.sh   # rwxr-xr-x (用户全权限,其他人可读执行)

# 目录常用权限  
chmod 755 directory/  # rwxr-xr-x (用户全权限,其他人可读和进入)
chmod 700 private/    # rwx------ (仅用户自己有权限)

# 脚本文件需要可执行权限
chmod +x my_script.sh # 给所有用户添加执行权限

方法二:符号表示法(更直观)

格式​:[用户类型][操作符][权限]

  • 用户类型:u(用户), g(组), o(其他人), a(所有人)

  • 操作符:+(添加), -(移除), =(精确设置)

  • 权限:r, w, x

示例:​

# 添加权限
chmod u+x file.txt     # 给用户添加执行权限
chmod g+w file.txt     # 给组添加写权限
chmod o-r file.txt     # 移除其他人的读权限

# 精确设置
chmod u=rwx,g=rx,o= file.txt  # 用户rwx,组rx,其他人无权限

# 快捷方式
chmod a+x script.sh    # 给所有人添加执行权限
chmod go-w file.txt    # 移除组和其他人的写权限

🛠️ 核心权限管理命令

1. chmod- 改变文件权限

# 设置文件为644权限 (rw-r--r--)
chmod 644 document.txt

# 设置目录为755权限 (rwxr-xr-x)
chmod 755 my_folder/

# 给脚本添加执行权限
chmod +x backup_script.sh

# 递归修改目录下所有文件的权限
chmod -R 755 web_assets/

2. chown- 改变文件所有者

# 改变文件所有者
chown username file.txt

# 改变所有者和组
chown username:groupname file.txt

# 只改变组
chown :groupname file.txt

# 递归改变目录的所有者
chown -R username:groupname directory/

3. chgrp- 改变文件所属组

# 改变文件的所属组
chgrp developers app.py

📊 权限设置实战场景

场景1:网页服务器权限配置

# 网页文件:所有者可读写,其他人只读
chmod 644 index.html style.css

# 脚本文件:所有者可读写执行,其他人只执行
chmod 755 cgi-bin/script.cgi

# 上传目录:允许web服务器写入
chmod 775 uploads/
chown www-data:www-data uploads/  # 通常web服务器用户是www-data

场景2:个人私有文件

# 创建完全私有的目录
mkdir private_docs
chmod 700 private_docs/     # 仅自己可读、写、进入
chmod 600 secret.txt        # 仅自己可读写

场景3:团队协作目录

# 创建团队项目目录
mkdir team_project
chown :developers team_project/  # 设置组为developers
chmod 775 team_project/          # 用户和组有完整权限,其他人只能读和进入

# 设置setgid位,保证新建文件继承组权限
chmod g+s team_project/

⚠️ 特殊权限位(高级但重要)

1. setuid(Set User ID)

  • 设置​:chmod u+s filechmod 4755 file

  • 作用​:程序运行时以文件所有者的身份运行,而不是执行者

  • 典型应用​:/usr/bin/passwd(允许普通用户修改密码文件)

2. setgid(Set Group ID)

  • 设置​:chmod g+s directorychmod 2755 directory

  • 作用​:目录中新创建的文件继承目录的组身份

  • 典型应用​:团队协作目录

3. sticky(粘滞位)

  • 设置​:chmod +t directorychmod 1777 directory

  • 作用​:只有文件所有者和root才能删除目录中的文件

  • 典型应用​:/tmp临时目录