什么是文件权限?

每个Linux文件都有3组权限:

  • 所有者
  • 所属组
  • 其他人

每组权限有3种:

  • 读(r)- 可查看
  • 写(w)- 可修改
  • 执行(x)- 可运行(脚本、程序)

查看权限

ls -l 查看:

1
ls -l file.txt

输出:

1
-rwxr-xr--  1  user  group  1024  Feb 13 10:00  file.txt

前10个字符分解:

  • 第1位:文件类型(-普通文件,d目录)
  • 第2-4位:所有者权限(rwx
  • 第5-7位:所属组权限(r-x
  • 第8-10位:其他人权限(r--

chmod - 修改权限

数字表示法

权限用数字表示:

  • 4 = 读(r)
  • 2 = 写(w)
  • 1 = 执行(x)

三种组合:

  • 7 = 4+2+1 = rwx(读写执行)
  • 6 = 4+2 = rw-(读写)
  • 5 = 4+1 = r-x(读执行)
  • 4 = r–(只读)
  • 0 = —(无权限)

基本用法

1
2
3
chmod 755 file.txt          # rwxr-xr-x
chmod 644 file.txt # rw-r--r--
chmod 777 file.txt # rwxrwxrwx(所有人都能读写执行)

带目录递归

1
chmod -R 755 /path/to/dir   # 递归修改目录及其内容

符号表示法

1
2
3
4
5
6
chmod +x script.sh          # 给所有角色添加执行权限
chmod -w file.txt # 移除写权限
chmod u+x file.txt # 只给所有者(user)添加执行权限
chmod g+w file.txt # 只给所属组(group)添加写权限
chmod o+r file.txt # 只给其他人(other)添加读权限
chmod a+rw file.txt # 给所有角色(all)添加读写

常用权限值

权限 含义 适用场景
755 rwxr-xr-x 脚本、可执行文件
644 rw-r–r– 配置文件、普通文件
600 rw——- 私钥、敏感文件
777 rwxrwxrwx 临时共享目录(谨慎)

chown - 修改所有者

基本用法

1
2
3
chown user file.txt         # 修改所有者
chown user:group file.txt # 同时修改所有者和所属组
chown :group file.txt # 只修改所属组

递归修改

1
chown -R user:group /path/to/dir

查看所有者和组

1
ls -l file.txt             # 输出第3、4列是用户和组

实战场景

场景1:部署网站

1
2
3
# 网站文件所有者是www-data,权限755
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html

场景2:SSH私钥

1
2
# 私钥只能所有者读写
chmod 600 ~/.ssh/id_rsa

场景3:脚本无法执行

1
2
# 脚本需要执行权限
chmod +x script.sh

场景4:目录无法进入

1
2
# 目录需要执行权限才能进入
chmod +x directory

特殊权限

SUID(4开头)

1
2
chmod 4755 file.txt         # 所有者执行时以所有者身份运行
# 示例:/usr/bin/passwd 命令

SGID(2开头)

1
chmod 2755 directory        # 新建文件继承所属组

Sticky Bit(1开头)

1
2
chmod 1777 directory        # 只能删除自己的文件
# 示例:/tmp 目录

常见问题

Q: 为什么我改了权限还是没权限?
A: 可能是父目录没有执行权限,或挂载点权限限制。

Q: chmod 777 安全吗?
A: 不安全!不要给所有文件777权限,只按需给最小权限。

Q: root能修改任何文件吗?
A: 是的,root用户不受权限限制。


总结

  • 权限三组:所有者、组、其他人
  • 权限三种:读4、写2、执行1
  • chmod 改权限,chown 改所有者
  • 递归用 -R 参数
  • 最小权限原则:只给需要的权限

下一篇:定时任务crontab。