尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Linux 文件权限到底怎么回事

Linux 文件权限到底怎么回事 Linux 文件权限到底怎么回事不讲复杂的 SELinux只讲日常最常用的文件权限。从一次报错开始$sshuserserver $ ./deploy.sh -bash: ./deploy.sh: Permission denied第一反应是加权限chmod777deploy.sh虽然能跑但 777 意味着任何人都可以改这个文件——这是安全风险。看懂权限之后你会知道应该用chmod x或755。先看懂ls -l的输出ls-ldeploy.sh-rwxr-xr-x 1 root root 123 Apr 28 10:00 deploy.sh拆成三块来看。第一块文件类型和权限10 个字符- rwx r-x r-x │ └┬─ └┬─ └┬─ │ │ │ └── 其他人other │ │ └────── 同组用户group │ └─────────── 文件所有者user └─────────────── 文件类型- 普通文件d 目录l 符号链接每个三位的含义r w x 读 写 执行 4 2 1rwx 421 7可读可写可执行r-x 401 5可读可执行不可写r-- 400 4只读--- 000 0没有权限第二块所有者和组root root └┬── └┬── │ └── 所属组 └──────── 文件所有者谁是这个文件的主人owner这个文件属于哪个组group第三块大小和修改时间123 Apr 28 10:00 大小 修改时间三种改权限的命令chmod— 改权限位用数字方式推荐chmod755deploy.sh# rwxr-xr-x 所有者可读写执行其他人只读执行chmod644config.cfg# rw-r--r-- 所有者可读写其他人只读chmod600id_rsa# rw------- 只有所有者能读写chmod700private/# rwx------ 只有所有者能进入目录chmod777file# 不推荐任何人可读写执行用字母方式单次操作可读性更好chmodx deploy.sh# 加执行权限不影响已有权限chmod-xdeploy.sh# 去掉执行权限chmoduw config.cfg# 给所有者u加写w权限chmodgr config.cfg# 给组g加读r权限chmodo-r config.cfg# 去掉其他人o的读权限chmodax script.sh# 所有人a加执行权限递归修改目录及其内部所有文件chmod-R755/path/to/dirchown— 改所有者chownuser file.txt# 改文件所有者为 userchownuser:group file.txt# 改所有者和组chown:group file.txt# 只改组chown-Ruser:group /data# 递归改目录下所有chgrp— 只改所属组chgrpdevelopers config.cfg目录权限和文件权限不一样这是一定要分清的地方权限对文件的意义对目录的意义r读可以查看文件内容可以列出目录内容lsw写可以修改文件内容可以创建/删除目录里的文件x执行可以执行文件脚本/程序可以进入目录cd文件x是执行目录x是穿过进入。典型配置chmod755/var/www/html# drwxr-xr-x 可以进入和查看chmod700~/.ssh# drwx------ 只有自己能进入目录一般至少需要r-x可以ls和cd才有意义。实战问题排查1. 上传的脚本不能执行$ ./deploy.sh -bash: ./deploy.sh: Permission denied解决ls-ldeploy.sh# 确认没有 x 权限chmodx deploy.sh# 加执行权限2. Nginx 报 403 Forbidden没权限读静态文件# 看 Nginx 以什么用户运行psaux|grepnginx# 通常是 www-data 或 nginx# 看文件权限和所有者ls-l/var/www/html/# 修复sudochown-Rwww-data:www-data /var/www/html/sudochmod-R755/var/www/html/3. SSH 密钥不生效$sshuserserver Permissions 0644forid_rsaare too open.SSH 对私钥文件权限很敏感——太松就拒绝使用chmod600~/.ssh/id_ed25519chmod700~/.sshchmod600~/.ssh/authorized_keys4. 别人创建的文件我删不掉$rm/shared/tmp/file.txt rm: cannot remove: Permission denied在目录有写权限才能删里面的文件ls-ld/shared/tmp/# 看目录权限sudochmod777/shared/tmp/# 让所有人能删不推荐# 或者加 sticky bit更合理sudochmod1777/shared/tmp/# 只有文件所有者和 root 能删SUID / SGID / Sticky Bit这三个特殊权限不那么常用但看到了要知道是什么意思。SUIDSet User IDls-l/usr/bin/passwd-rwsr-xr-x 1 root root ... /usr/bin/passwd所有者位的x变成了s。普通用户执行passwd时会临时有 root 权限因为文件所有者是 root这样才能改/etc/shadow。数字是 4chmod 4755 fileSGIDSet Group IDls-l/shared/dirdrwxr-sr-x 2 user developers ...组位的x变成了s。在这个目录里新建的文件所属组自动继承目录的组。数字是 2chmod 2755 dirSticky Bitls-ld/tmpdrwxrwxrwt 10 root root ...其他人位的x变成了t。在 /tmp 里任何人都能创建文件但只能删自己的文件。数字是 1chmod 1777 /tmp最常用的权限组合权限数字应用场景rwx------700私钥目录~/.sshrw-------600私钥文件、密码配置文件rwxr-xr-x755可执行脚本、目录通用权限rw-r--r--644配置文件、代码文件rwxr-xr-x setgid2755团队共享目录rwxrwxrwt1777/tmp 类共享临时目录日常 90% 的情况只用到 755 和 644。chmod755script.sh# 脚本可以执行chmod644config.yaml# 配置文件只读chmod600.secret# 敏感文件只有自己能看到一行命令快速定位权限问题# 找当前目录下权限有问题太松的的文件find.-perm/ow-ls# 找没有执行权限的 .sh 文件find.-name*.sh!-executable-ls# 看所有者和组find.!-usermyuser-o!-groupmygroup-ls总结你想干什么用什么命令让文件能执行chmod x file让文件只有自己能读chmod 600 file把文件给另一个用户chown user file让目录可进入可查看chmod 755 dir删不掉提示 Permission denied看目录权限不是看文件权限关于 777——尽量别用。权限的本质是最小够用原则需要读就给读需要执行就给执行不需要就不给。
返回列表