数字权限是怎么算出来的
Linux 把每个文件的权限分成三组:所有者、所属组、其他人,每组各有读、写、执行三个开关。读记作 4,写记作 2,执行记作 1,把一组里打开的权限相加就得到这一位的数字,三组拼起来就是常见的 755、644。例如 755 表示所有者是 7,等于 4 加 2 加 1,读写执行全有;组和其他人都是 5,等于 4 加 1,可读可执行但不能写。符号表示法把同样的信息写成九个字符 rwxr-xr-x,ls -l 命令显示的就是这种形式,最前面还会多一个字符表示类型,短横线是普通文件,d 是目录,l 是符号链接。
目录、特殊位与安全建议
权限对目录的含义和对文件不同:目录的读权限允许列出里面有哪些文件,写权限允许在里面新建和删除文件,执行权限允许进入目录并访问其中的内容。所以目录几乎总要带 x,一个 644 的目录是进不去的。还要注意删除文件看的是所在目录的写权限,而不是文件自己的权限,这正是 /tmp 要加粘滞位的原因:有了粘滞位,用户只能删除自己创建的文件。
特殊位共三个:setuid 让可执行文件以其所有者的身份运行,passwd 命令就靠它临时获得管理员权限,随意设置会造成提权漏洞;setgid 加在目录上很实用,新建的文件会自动继承目录的所属组,方便团队共享;粘滞位如上所述。符号表示中这些位占用执行位的字符,显示为小写 s、t 说明执行位也是打开的,显示为大写 S、T 说明执行位没开,通常是配置失误。
实践建议:普通文件用 644,需要执行的脚本和目录用 755,私钥和含密码的配置文件必须是 600,否则 SSH 会直接拒绝使用。不要图省事用 777,它意味着服务器上任何账号都能改写你的文件,是最常见的安全事故来源。批量修改时用 find 命令分别处理目录和文件,避免递归地把所有文本文件也变成可执行。