655 字
3 分钟
Linux 文件系统、用户与权限
Linux 权限问题通常来自三个方面:文件属于谁、当前进程以谁的身份运行、路径上的每一级目录是否允许访问。
常见目录
/etc:系统和服务配置。/var:日志、缓存、数据库等可变数据。/home:普通用户主目录。/root:root 用户主目录。/tmp:临时文件,可能在重启后清理。/usr:系统安装的软件和共享资源。/opt:第三方或自包含应用。/srv:服务提供的数据。
不要把应用数据随意散落在系统目录中。部署时明确配置、程序、日志和持久化数据的位置。
查看权限
ls -ld /path/to/filestat /path/to/filenamei -l /path/to/file典型输出:
-rw-r----- 1 app app 1280 Jul 30 09:00 config.yaml第一组是所有者权限,第二组是所属组权限,第三组是其他用户权限。
r:读取。w:写入。x:执行;对目录来说表示可以进入和访问其中条目。
修改权限
符号写法更容易读:
chmod u+x deploy.shchmod g+r config.yamlchmod o-rwx secret.env数字写法:
chmod 640 config.yamlchmod 750 deploy.sh对应关系:读取 4、写入 2、执行 1。
修改所有者
sudo chown app:app /srv/myapp/config.yamlsudo chown -R app:app /srv/myapp/data递归修改前先确认路径。对系统根目录或不确定变量使用 -R 风险很高。
用户与组
idid appgetent passwd appgetent group dockersudo usermod -aG docker app新增组成员后,用户通常需要重新登录才能获得新的组列表。
sudo 的正确使用
sudo -lsudo systemctl restart nginx尽量只让需要权限的命令通过 sudo 执行,不要长期使用 root Shell。编辑受保护文件时可使用:
sudoedit /etc/nginx/nginx.conf默认权限与 umask
umaskumask -Sumask 会从程序请求的默认权限中屏蔽位。服务创建的文件权限异常时,应同时检查服务账户、启动脚本和 systemd 中的 UMask= 设置。
特殊权限
- setuid:程序以文件所有者身份执行。
- setgid:目录中的新文件继承目录所属组。
- sticky bit:共享目录中用户只能删除自己拥有的文件。
共享协作目录常见配置:
sudo chown -R root:developers /srv/projectsudo chmod 2775 /srv/project权限排查顺序
- 使用
id确认当前身份和组。 - 使用
namei -l检查完整路径。 - 使用
ls -l、stat检查目标文件。 - 确认进程实际运行账户。
- 再判断是否需要修改权限或所有者。
不要用 chmod 777 掩盖根因。它会让所有用户可写,可能引入配置篡改和代码执行风险。
参考资料
Linux 文件系统、用户与权限
https://zh19990906.github.io/fuwari/posts/linux-files-permissions/