Linux 用户与权限全攻略:从 chmod 到 chown,带你搞懂权限设计的底层逻辑

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 系统运维 发布于3天前 更新于3天前 16

权限管理,是 Linux 系统中最容易被低估、但最容易出问题的部分之一。 你是不是也遇到过:

  • 明明部署完了 Laravel 项目,结果 Nginx 报 403?
  • 明明已经 chmod -R 777,为啥还是不能写文件?
  • 同一个服务器多个服务账号交叉操作,怎么设计权限不越权又不麻烦?

这些问题的根源,其实不在命令,而在你是否真正理解 Linux 权限模型的设计哲学。

本文将不仅讲解命令,还讲原理 + 实战经验 + 权限设计策略,从开发者角度深入展开。


一、Linux 权限模型核心结构

Linux 的权限模型是围绕三类用户的访问控制表(ACL)展开的:

用户类型 权限位
文件拥有者 user
所属用户组 group
其他用户 others

每类用户都有 3 个权限位:r(读) w(写) x(执行),总共 9 位。例如:

-rwxr-xr--

含义是:

  • 拥有者:可读写执行
  • 同组用户:可读执行
  • 其他人:只读

权限除了影响操作本身,也影响脚本能否被执行、Web 服务器是否能访问、服务是否能写日志等。


二、chmod:权限修改的两种方式

1. 数值法(最常见)

权限 数字
r 4
w 2
x 1

每 3 位用户的权限加和,形成一个 3 位数字:

chmod 755 app.sh  # rwx r-x r-x
chmod 644 config.php  # rw- r-- r--

2. 符号法(更灵活)

chmod u+x deploy.sh      # 给用户增加执行权限
chmod g-w index.html     # 删除组的写权限
chmod o=r index.html     # 设置其他人只读

实战经验:

  • 不建议随意使用 chmod -R 777,会给项目埋下权限失控的雷。
  • 对于 Laravel 项目,storagebootstrap/cache 目录应设置为 775,所有者为 www-data

三、chown:文件归属设置的关键命令

chown 用户名:用户组 文件/目录

示例:

chown www-data:www-data /var/www/html -R
  • 修改所有者和组
  • -R 表示递归修改整个目录

常用变种

chown :nginx /etc/nginx/nginx.conf   # 仅修改组
chown deployer .env                  # 仅修改所有者

踩坑提示:

某些情况下即使权限是 777,程序也不能访问文件? → 可能是不是同一个用户(Nginx 的用户和文件归属不同) → 建议统一:用 chown 设定好归属,然后用 chmod 755/644 控制权限。


四、查看用户与组的命令合集

查看当前用户

whoami

查看用户 UID、组 ID、附属组

id

查看所有系统用户

cut -d: -f1 /etc/passwd

每个用户信息都在 /etc/passwd,格式:

用户名:x:UID:GID:注释:主目录:Shell

查看所有用户组

cut -d: -f1 /etc/group

五、如何给用户添加到一个组?

usermod -aG groupname username

例如把 alin 添加到 www-data 组:

sudo usermod -aG www-data alin

然后重新登录才能生效(或用 newgrp)。


六、开发者视角的权限设计策略

现在最重要的一部分来了:

🔒 多人协作项目:如何安全设置权限?

  • 文件归属统一:部署目录全部归属 www-data:www-data(或 nginx)是最稳妥的。
  • 日志/缓存/上传目录设置为可写,例如:
chown -R www-data:www-data storage bootstrap/cache
chmod -R 775 storage bootstrap/cache
  • 开发者加入部署组
usermod -aG www-data alin
  • 源码控制用 644,执行脚本用 755
chmod 644 *.php
chmod 755 *.sh

🤖 自动部署中使用 sudo 权限?

尽量避免。推荐的方式是:

  • 设置 deploy 用户只拥有目标目录写权限
  • 使用 capistranoansible 等工具做权限管理自动化

七、权限调试技巧

排查文件权限问题的流程:

ls -l file.txt
stat file.txt

→ 看归属是谁 → 看权限够不够 → 看运行服务(如 nginx、php-fpm)用的是什么用户 → 实在不行,用 strace 跟踪失败 syscall


结语

Linux 权限机制不是为了“折磨程序员”,而是为了在多用户、多进程环境下保证安全隔离。你越早理解它的逻辑,项目上线出问题的概率就越低。

建议建立一个权限管理 checklist,比如每次上线前检查哪些目录权限、归属是否设置正确,谁有写权限等等。

THE END

喜欢就支持一下吧!

版权声明:除却声明转载或特殊注明,否则均为艾林博客原创文章,分享是一种美德,转载请保留原链接,感谢您的支持和理解

死水滋生毒素

威·布来克

下一篇

暂无数据

推荐阅读

Linux系统常见命令以及使用方式详解

Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,文章整合大多数linux问题以及命令的...

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 04月18日

Linux df 和 du 命令详解

这篇文章详细介绍了Linux系统中df和du命令的用法及其常见选项,帮助用户监控和管理磁盘空间使用情况。文章还提供了多个...

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 09月12日

PHP 如何递归获取父级和子级数据

在PHP中,递归获取父级和子级数据是一个常见的需求。本文将详细介绍如何使用递归方法分别获取父级和子级数据,并提供了示例代...

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 03月06日

查看内存系列命令应用以及介绍【Linux 篇】

在日常运维Linux系统时,物理内存是其中最重要的一方面。Linux 本身提供了少的方法来帮助我们查看相关信息!下面是一...

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 12月08日

深度解析:PHP Laravel 框架中的缓存策略与优化

深入剖析 PHP Laravel 框架中的缓存策略,涵盖缓存驱动原理、应用场景及优化技巧,助力开发者提升应用性能。

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 03月04日

Phpstorm+Phpstudy 搭建xdebug调试

在日常的工作或者学习中,项目调试是是开发过程中不可缺少的存在,他不仅能帮你更直接的作为一个观察者查阅项目运行流程,更重要...

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 02月24日

深入浅出:后端开发中的缓存机制

这篇文章深入探讨了后端开发中的缓存机制,包括缓存的定义、分类、常见使用场景、挑战与解决方案,以及如何选择合适的缓存工具,...

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 01月15日

PHP的JIT魔法:解锁代码性能的秘密

深入探讨PHP 8的即时编译(JIT)特性,包括其工作原理、性能优化示例,以及在不同场景下的应用和局限性。

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 04月07日