Skip to content

Linux 文件权限 详解

chmod 的八进制与符号模式,以及 setuid、setgid 和粘滞位。

每个文件有三类主体:所有者、组和其他人。每类主体由三个位相加:读是 4,写是 2,执行是 1。三个八进制数字构成权限模式。

参考表格 · 42 条目
42 of 42 rows
数字(八进制)
所有者完全访问;组和其他人可读和执行。chmod 755 script.sh
所有者可读写;组和其他人只读。chmod 644 notes.txt
仅所有者可读写;其他人无任何权限。chmod 600 ~/.ssh/id_rsa
仅所有者完全访问;其他人无任何权限。chmod 700 ~/.ssh
所有人完全访问。存在安全风险。chmod 777 shared/
所有人可读写。不设置执行位。chmod 666 log.txt
所有者完全访问;组可读和执行;其他人无权限。chmod 750 app/
所有主体仅可执行。目录可穿越但不能列出内容。chmod 111 dir/
任何主体都无权限。root 仍可读取文件。chmod 000 private.key
所有者和组完全访问并加 setgid;团队共享目录的常用模式。chmod 2775 /srv/team
umask 结果
默认掩码。新文件为 644;新目录为 755。umask 022
私有掩码。新文件为 600;新目录为 700。umask 077
符号模式
为所有者添加执行权限。chmod u+x deploy.sh
移除组的写权限。chmod g-w config.yml
移除其他人的读权限。chmod o-r secret.env
为所有主体设为只读。chmod a=r readme.md
为所有主体授予全部权限。chmod ugo+rwx public/
特殊位
设置 setuid 位。二进制文件以文件所有者身份运行。chmod 4755 /usr/bin/passwd
设置 setgid 位。新文件和子目录继承目录的组。chmod 2755 /shared
设置粘滞位。只有文件所有者才能删除。chmod 1777 /tmp
普通文件上的粘滞位。这是现代 Linux 已忽略的旧式驻留交换提示。chmod 1755 legacy.sh
命令
更改文件模式位。chmod 755 file
更改文件所有者和组。chown user:group file
更改文件的属组。chgrp devs file
为新文件设置默认权限掩码。umask 022
以长格式列出文件及权限。ls -l /etc
显示文件的 POSIX ACL 条目。getfacl report.pdf
设置或修改 POSIX ACL 条目。setfacl -m u:alice:rw report.pdf
查找权限位匹配指定模式的文件。find / -perm /4000
打印文件元数据,包括八进制模式。stat -c '%a %n' file
列出路径中每个组成部分的权限。namei -l /var/www/index.html
更改文件属性,例如不可变。chattr +i /etc/resolv.conf
列出文件属性。lsattr /etc/resolv.conf
显示授予文件的能力。getcap /usr/bin/ping
授予文件能力,无需 setuid。setcap 'cap_net_raw=+ep' /usr/bin/ping
列出当前 shell 生效的能力。capsh --print
显示用户的 UID、GID 和所属的组。id alice
列出用户所属的组。groups alice
按 sudoers 策略以其他用户身份运行命令。sudo systemctl restart nginx
带语法检查地编辑 sudoers 文件。visudo
切换到其他用户账户。su - deploy
以不同的主组启动 shell。newgrp developers