ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Linux chmod 755详解:权限模型与数字符号模式实战

Linux chmod 755详解:权限模型与数字符号模式实战 1. 权限模型入门先搞懂 Linux 为什么需要 chmod很多新手第一次在教程里看到chmod 755 file.txt这行命令时脑子里全是问号755 是什么为什么要敲这串数字file.txt 到底被怎么了我当年刚开始碰 Linux 时也绕了好一阵子后来发现只要理解了权限模型整条命令就是一目了然的事情。Linux 是一个多用户操作系统服务器上可能同时跑着几十个甚至上百个进程和账户。为了保证谁也不干扰谁、不越权动别人的文件系统给每个文件都设置了一套访问控制规则这就是“权限”。chmod这个命令全称是change mode作用是修改文件或目录的访问模式也就是权限配置。755则是你要设置的具体权限值而file.txt是操作对象。合在一起就是“把 file.txt 这个文件的权限设置为 755”。这套权限机制最核心的设计思想只有一句话对不同类型的用户给不同的操作能力。所谓“不同类型用户”Linux 把它分成了三类文件所有者owner、文件所属的用户组group、其他所有人others。所谓“操作能力”也分成三种读rread、写wwrite、执行xexecute。三种用户各自拥有三种权限组合起来就是一个 3×3 的权限矩阵。打个生活化的比方你租了一套房子你就是 owner可以有钥匙自由进出你的家人是 group也可以进但可能不能改装修外面的访客是 others只能在你允许的情况下进门参观。“进出”就是执行权限“改装修”就是写权限“看房间”就是读权限。理解了这套模型你再看chmod 755就不会觉得神秘了。2. 从 755 到 rwx数字和符号是怎么对应上的2.1 755 拆开看三位数字分别代表谁755 这个写法其实是“八进制权限表示法”。它由三位数字组成第一位 7、第二位 5、第三位 5。这三个数字分别对应前面说的三类用户第一位 7文件所有者owner的权限第二位 5文件所属组group的权限第三位 5其他用户others的权限那 7 和 5 又是怎么来的这里用到了二进制编码。读权限记作 4写权限记作 2执行权限记作 1。把需要的权限数值相加就得到一个 0~7 之间的数字数值二进制对应权限含义0000---无任何权限1001--x仅可执行2010-w-仅可写3011-wx可写、可执行4100r--仅可读5101r-x可读、可执行6110rw-可读、可写7111rwx可读、可写、可执行所以 755 就是owner7 4 2 1 rwx读、写、执行全开group5 4 1 r-x可读、可执行不能写others5 4 1 r-x可读、可执行不能写如果用ls -l查看文件详情你会看到权限列长这样-rwxr-xr-x 1 user group 1234 Jan 1 12:00 file.txt开头第一个字符-表示这是普通文件。后面的九位字符rwxr-xr-x分成三组rwxowner、r-xgroup、r-xothers。跟 755 是完全等价的两种写法一个用数字一个用符号。2.2 为什么执行权限对脚本和程序如此重要很多初学者会忽略执行权限的意义觉得只要文件能读能写就行了。但在 Linux 里如果你想让一个脚本直接通过./script.sh运行或者让一个二进制程序被系统执行文件必须带有 x 权限。否则就算文件内容完全正确系统也会甩给你一句Permission denied。我实测过一个场景把一段 Python 脚本拷到服务器上写好了python3 test.py能跑但直接./test.py就报权限错误。原因很简单——文件没有执行权限。加一句chmod x test.py或者chmod 755 test.py就好了。对于可执行文件来说755 是相当常见的配置。owner 拥有完整控制权可以修改、替换、删除group 和其他用户可以运行查看但不能乱改保证了程序的完整性。2.3 目录的 755 和文件的 755 含义并不一样同一个 755用在文件上和用在目录上效果差别很大。对于普通文件r 表示可以读取内容w 表示可以修改内容x 表示可以当作程序执行。但对于目录r可以列出目录里有哪些文件ls 能看到名字w可以在目录里创建、删除、重命名文件x可以进入这个目录cd 进去或者访问目录内文件的具体属性关键点在于如果目录没有 x 权限即使有 r 权限你也无法真正进入目录查看文件详情。x 是目录的“通行证”。755 对目录来说意味着 owner 可以完全控制目录内的增删改group 和其他用户可以进入目录、查看文件列表但不能在目录里创建或删除文件。这个配置非常常用比如网站根目录、代码仓库目录基本都是 755。3. chmod 的各种写法数字之外还有字母模式3.1 符号模式ux、g-w、or 这些怎么读数字模式简单直接但有时候你只想调整某一类用户的某一项权限用数字反而要心算一遍。这时候可以用字母模式。它的格式是chmod [谁][操作][什么权限] 文件名“谁”用 uuser/owner、ggroup、oothers、aall代表全部三类表示“操作”用 添加、-移除、设置成确切值表示“什么权限”用 r、w、x 表示。举个例子chmod ux file.txt # 给 owner 添加执行权限 chmod g-w file.txt # 移除 group 的写权限 chmod or file.txt # 把 others 的权限设为只读 chmod ax script.sh # 所有用户都加上执行权限 chmod urwx,grx,orx # 等价于 chmod 755最后一行这种写法其实就是 755 的符号版本。日常维护中我经常用chmod ux这种加执行权限的写法因为它只改需要改的位不会动到其他权限设置。3.2 什么时候用数字什么时候用字母我的习惯是写脚本、部署项目、给目录设统一权限时用数字模式因为可以一条命令把整个权限矩阵定死不给意外留空间临时调试、给某个脚本加执行权限时用字母模式因为手快、不容易错。举个例子你刚创建了一个 shell 脚本想让它能运行直接chmod x deploy.sh注意这里我没写 u/g/o直接用了x。当你省略“谁”时chmod 默认是a即所有用户都加上执行权限。对个人开发的脚本问题不大但对服务器上的敏感脚本最好明确写成ux避免向所有人开放执行。3.3 chmod 777 为什么被反复警告网上到处能看到chmod 777这种写法意思是 owner、group、others 全都拥有 rwx 全部权限。为什么大家都在喊着不要随便用因为 777 等于你把文件的所有控制权交给了系统里每一个用户。只要任何账户被攻破你的文件都可以被任意读写执行。我见过不少新手为图省事把网站目录直接 777结果被扫描工具扫到可写权限后塞了木马。如果你只是想让自己方便地操作文件正确的思路是把 owner 设为当前用户目录给 755文件给 644 就足够了。644 的含义是 owner 可读可写group 和 others 只读这是普通文件的默认常用权限。4. 实操场景拆解chmod 755 在各种场景下怎么用4.1 创建脚本后第一时间赋权假设我在/home/user/bin下写了一个备份脚本backup.sh内容是可执行的 shell 代码。创建完成后用ls -l看到权限是-rw-r--r--也就是 644。此时直接运行./backup.sh系统会报Permission denied。原因就是文件没有 x 权限。修复chmod 755 /home/user/bin/backup.sh赋权之后再次运行就正常了。这套流程在写自动化脚本时每天都会重复一定要养成“创建脚本后立刻赋权”的习惯。4.2 部署 Web 项目时的权限分配原则部署 Nginx 或者 Apache 站点时涉及 web 根目录、静态资源、上传目录和日志文件。推荐的做法是chmod 755 /var/www/html chmod 644 /var/www/html/index.html chmod 755 /var/www/html/assets这样 web 服务器用户比如 www-data可以读取页面、进入目录但没法修改文件只有 owner也就是你自己才有权限更新文件。如果某个目录需要接收用户上传比如图片上传目录那就需要让 web 进程写进去再单独给目录加上写入权限而不是对整个站点开 777。4.3 修改系统配置文件时的临时提权很多系统配置文件默认是 644root 拥有写权限普通用户只读。你自己日常操作时如果需要临时改一下配置通常配合 sudo 使用sudo chmod 644 /etc/nginx/nginx.conf注意一个反向操作有些文件出于安全考虑会被故意去掉写权限即使 root 也改不了。这时候你会发现sudo vim /etc/xxx都报只读。不要急先看权限位确认是否需要加写权限改完再恢复。例如某些 SSH 相关文件就建议保持严格的权限乱改反而有安全风险。4.4 一条命令批量赋权find 与 chmod 的组合实际项目中经常要批量处理。比如给某个项目下所有目录设为 755、所有文件设为 644一条命令搞定find /path/to/project -type d -exec chmod 755 {} \; find /path/to/project -type f -exec chmod 644 {} \;用-type d匹配目录、-type f匹配文件比直接无脑chmod -R 755 /path更精细。后者不管文件还是目录都设成 755会让普通文件也带上了执行权限不优雅也没必要。如果只是临时给一批脚本统一加上执行权限也可以用chmod x /path/*.sh这种通配符写法在交互式 Shell 里用起来非常顺手。5. 权限相关的常见坑与排查实录5.1 查看权限ls -l 的输出怎么读排查权限问题第一件事就是看当前权限。ls -l是基本功ls -l file.txt输出里权限位的格式是-rwxr-xr-x。第一个字符代表文件类型-普通文件、d目录、l软链接。后面九个字符就是上文说的三类用户权限。如果某些位是-就代表对应权限缺失。还有一个小细节权限位的顺序永远是 r w x不会乱。比如你不可能看到-wr-这种排列。看到-r-x就知道少了写权限。5.2 为什么我已经 chmod 755 了还是无法访问有几次我已经正确设置了权限但访问还是失败。排查后发现是父目录的权限不够。Linux 在解析路径时需要你有路径上每一个目录的 x 权限才能“穿过”它到达目标文件。举例说明你有一个文件/home/alice/data/file.txt就算 file.txt 是 755只要/home/alice是 700其他用户根本进不了 alice 的家目录也就访问不到 data 里的文件。这种情况下你需要在路径的每一个目录层都确保合理的权限。所以排查权限问题时不要只看目标文件本身要从根路径一层层查下来namei -l /home/alice/data/file.txt这条命令会打印路径上每一级的权限情况一眼看出哪一层堵住了。5.3 /tmp 目录的特殊权限粘滞位/tmp目录通常是 1777你看到这个数字可能会奇怪前面怎么多了个 1这个 1 是粘滞位sticky bit它的作用是在 /tmp 这种公共目录下任何人都能创建文件但只有文件的 owner 或 root 才能删除自己的文件。如果没有这个粘滞位所有用户都拥有对 /tmp 的写权限意味着任何用户都能删除别人的临时文件这显然不行。你执行ls -ld /tmp会看到权限位是drwxrwxrwt末尾的 t 就是粘滞位标志。这个机制和 755 是两回事但经常一起出现在权限配置的学习路径里。5.4 umask 与默认权限为什么新文件不是 755你有没有疑惑过新建的文件为什么默认是 644新目录默认是 755这个默认值不是拍脑袋定的而是由 umask 控制的。umask 是一个掩码表示你在创建文件时要“扣掉”哪些权限。默认情况下文件的基准权限是 666rw-rw-rw-目录是 777rwxrwxrwx。umask 通常是 022意思是去掉 group 和 others 的写权限666 去掉 022 644777 去掉 022 755想临时修改默认权限比如希望新文件默认是 600owner 可读写其他人都没有权限可以umask 077之后创建的文件默认就是 600。想永久生效把umask 077写进~/.bashrc或/etc/profile。但从安全角度想umask 设成 022 是国内服务器最常见的配置适合大多数场景。5.5 特殊用途setuid 和 setgid 一般别乱动有些可执行文件权限位会出现s比如/usr/bin/passwd显示为-rwsr-xr-x。这个 s 是 setuid 位意思是程序运行时临时以文件 owner 的身份执行而不管是谁启动的。系统用它来实现普通用户修改自己密码这种需要 root 权限的操作。出于安全考虑普通用户请不要随便给程序加 setuid。如果你看到某个陌生文件的权限位是-rwsr-xr-x反而要警惕这可能是被利用来提权的后门程序。排查时可以用find / -perm -4000 -type f列出系统里所有带 setuid 位的文件检查是否正常。6. 权限管理习惯几个我在实际项目中坚持的原则这么多年用下来我总结了几条非常实用的权限管理习惯。第一权限最小化。能不给写权限就不给能不给执行权限就不给。比如日志目录只需要写入不需要执行静态资源目录只需要读取不需要写入。第二区分文件和目录。目录用 755 保持通行文件用 644 保持只读可写脚本再单独加 x。第三定期审计。一个月做一次系统性权限检查重点排查是否有 777 的配置、是否有异常 setuid、web 目录是否被改动过。有一次我接手一台老服务器发现登录用户的主目录全是 777里面的配置文件和脚本也是各种宽松权限。这时候如果慢慢一个个改容易遗漏。我的做法是先用find把权限异常的项都捞出来再逐项修复。具体命令可以这样写find /home -type f -perm -002 -exec ls -l {} \;-perm -002表示匹配“others 拥有写权限”的文件列出它们然后按业务重要性挨个处理。对于 web 项目我通常会用 git 管理代码然后通过部署脚本控制权限而不是直接在生产环境手动 chmod。这样即使某次操作失误也能从 commit 记录里追踪哪里出了问题。如果文件被误改权限导致服务异常先查看是否有人执行过 chmod、有没有备份权限的机制。保存当前目录权限快照的一个重要技巧是getfacl -R /path/to/dir perms.txt需要恢复时执行setfacl --restoreperms.txt如果你启用了 ACL访问控制列表这套方法比单纯记住 chmod 数字更完整。权限问题从来不只是 “chmod 755 怎么打” 这一层而是一整套关于“谁能动什么”的治理思路。学命令只是第一步真正形成稳定的权限管理习惯才能让服务器和项目少踩坑。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表