Skip to Content

常见权限错误

“Permission denied”

# 查看文件权限 ls -la /path/to/file # 查看当前用户和所属组 id

“Operation not permitted”

通常需要 root 权限,使用 sudo:

sudo 命令

文件权限基础

-rwxr-xr-- 1 user group 4096 Mar 24 10:00 file.txt │├─┤├─┤├─┤ │ │ │ └── 其他用户:r-- (读) │ │ └───── 组用户:r-x (读+执行) │ └───────── 文件所有者:rwx (读+写+执行) └─────────── 文件类型(- 普通文件,d 目录,l 链接)

常见场景修复

无法编辑配置文件

# /etc 下的配置文件属于 root sudo nano /etc/xxx/config.conf # 或临时修改权限(不推荐用于系统文件) sudo chmod 666 /path/to/file

无法执行脚本

# 添加执行权限 chmod +x script.sh # 仅所有者可执行 chmod u+x script.sh

Web 服务目录权限

# 典型 Web 目录权限设置 sudo chown -R www-data:www-data /var/www/html sudo chmod -R 755 /var/www/html sudo chmod -R 644 /var/www/html/*.html

挂载硬盘无法写入

NTFS 或 FAT32 分区权限由挂载参数控制:

# 查看当前挂载 mount | grep /dev/sd # 重新挂载 NTFS 为可写 sudo mount -o rw,uid=$(id -u),gid=$(id -g) /dev/sdX1 /mnt/data # 在 /etc/fstab 中配置 # UUID=xxx /mnt/data ntfs-3g defaults,uid=1000,gid=1000 0 0

SSH 密钥权限

SSH 对密钥文件权限有严格要求:

chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub chmod 600 ~/.ssh/authorized_keys chmod 644 ~/.ssh/config

用户主目录权限被改

# 恢复主目录权限 sudo chown -R $USER:$USER ~/ chmod 755 ~/

sudo 相关问题

用户不在 sudo 组

# 需要以 root 登录或使用恢复模式 su - root usermod -aG sudo 用户名 # 用户需注销重新登录

sudo 密码错误

如果忘记密码,通过恢复模式重置:

  1. GRUB 菜单 > Advanced options > Recovery mode
  2. 选择 root 命令行
  3. 执行:passwd 用户名

/etc/sudoers 语法错误导致 sudo 失效

# 使用 pkexec 修复(无需 sudo) pkexec visudo # 或从恢复模式修复 # 确保 /etc/sudoers 包含: # %sudo ALL=(ALL:ALL) ALL

特殊权限

SUID/SGID/Sticky Bit

# 设置 SUID(以文件所有者身份执行) chmod u+s /path/to/file # 设置 SGID(新建文件继承目录的组) chmod g+s /path/to/directory # 设置 Sticky Bit(仅所有者可删除目录中的文件) chmod +t /path/to/directory

ACL 扩展权限

# 安装 ACL 工具 sudo apt install acl # 设置特定用户权限 setfacl -m u:用户名:rwx /path/to/file # 查看 ACL getfacl /path/to/file # 移除 ACL setfacl -b /path/to/file

AppArmor 限制

Ubuntu 使用 AppArmor 进行强制访问控制:

# 查看 AppArmor 状态 sudo aa-status # 临时将某个程序设为宽容模式 sudo aa-complain /usr/bin/程序名 # 禁用某个配置文件 sudo aa-disable /etc/apparmor.d/某配置

排查思路总结

  1. 先用 ls -la 确认文件的所有者、组和权限位
  2. 用 id 确认当前用户身份
  3. 检查用户是否属于需要的组:groups 用户名
  4. 检查 AppArmor 或 SELinux 是否有限制
  5. 检查挂载选项(特别是外部分区)
Last updated on