权限管理是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 = 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 = 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 file或chmod 4755 file作用:程序运行时以文件所有者的身份运行,而不是执行者
典型应用:
/usr/bin/passwd(允许普通用户修改密码文件)
2. setgid(Set Group ID)
设置:
chmod g+s directory或chmod 2755 directory作用:目录中新创建的文件继承目录的组身份
典型应用:团队协作目录
3. sticky(粘滞位)
设置:
chmod +t directory或chmod 1777 directory作用:只有文件所有者和root才能删除目录中的文件
典型应用:
/tmp临时目录