你有没有过这个想法?
每次输完命令还要加个sudo,还要输密码,真的烦死了。
“不就是个权限吗?直接给我全开不就完了?”
然后你去百度搜"如何取消sudo密码",照着教程改了sudoers,从此敲命令再也不用输密码了,爽得飞起。
直到有一天,你手滑敲了个rm -rf /*,然后…就没有然后了。
这篇文章,我就跟你好好聊聊:Linux的权限机制到底是怎么设计的?为什么sudo要这么"反人类"?知道了这些,你再也不会瞎改权限了。

先讲个最简单的:为什么root无所不能?
你可以把Linux系统想象成一个公司。
是不是一下子就懂了?
Windows为什么经常中病毒?因为默认用户就是管理员权限,病毒进来直接就能改系统文件。
Linux为什么安全?因为默认你就是个普通员工,就算病毒进来了,它最多只能删你桌面上的文件,想动系统核心?门都没有。
我自己踩过的坑:
刚玩Linux的时候觉得sudo太麻烦,直接把自己加到了sudoers里免密码,然后有一次写脚本,变量名写错了,变成了rm -rf /$xxx/*,结果xxx是空的,就变成了rm -rf /*。
那是我第一次体会到什么叫"从删库到跑路"。
很多人搞不清sudo和su,觉得都是提权,随便用哪个。
大错特错,这俩完全不是一回事。
| 你自己的 | ||
举个生活化的例子:
哪个安全?一目了然。
实操验证一下:
# 看一下当前用户是谁
whoami
# 用sudo执行whoami,看一下是谁
sudowhoami
你会发现,第一个输出是你的用户名,第二个输出是root。
sudo只是让这一条命令以root身份执行,执行完你还是你自己。
这就是设计的精妙之处:最小权限原则。
很多人遇到权限问题,网上一搜,别人说"chmod 777就好了",然后你敲完,问题解决了,从此遇到权限问题就777。

这是我见过最蠢的行为。
先搞懂这三个数字到底是什么意思。
还是用公司比喻:
那三个数字分别对应:所有者权限 + 组权限 + 其他用户权限
每个数字是权限的和:
所以:
那正确的权限应该是多少?
chmod 777的危害:
比如你的网站配置文件设成777,那只要服务器上有一个漏洞,别人就能直接改你的配置文件,把数据库密码改了,甚至把整个网站删了。
我见过太多公司,测试环境图方便全用777,然后部署到生产也忘了改,最后被黑了都不知道为什么。

说了这么多理论,来点实用的。
ls-l 文件名
输出大概是这样:
-rw-r--r-- 1 alice alice 42 Jun 10 10:00 test.txt
拆解一下:
-:这是个文件(d是目录,l是链接)rw-r--r--# 普通文件改成正确权限
chmod644 test.txt
# 脚本改成可执行
chmod755 run.sh
# 递归改目录下所有文件权限(慎用)
find /path/to/dir -type f -execchmod644{}\;
find /path/to/dir -type d -execchmod755{}\;
sudo-l
这个命令很重要,能看到你到底能执行哪些命令,是不是真的有全部权限。
答:真要改也可以,但不要给所有命令免密,只给你常用的那几个。
sudo visudo
在最后加:
你的用户名 ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/systemctl
这样只有apt和systemctl不用输密码,其他命令还是要输。安全和方便平衡。
答:默认sudo的密码缓存是5分钟,5分钟内不用再输,超过就要重新输。这是安全设计,防止你离开工位的时候别人用你的终端搞破坏。
答:chmod改的是"谁能做什么",chown改的是"这个东西是谁的"。
比如:
chown alice:alice test.txt # 把文件所有者改成alice
chmod644 test.txt # 设alice能改,别人只能看
答:因为sudo的PATH和你普通用户的PATH不一样!很多人踩过这个坑。
你可以用绝对路径:
sudo /home/alice/run.sh
或者改sudoers的secure_path,但不推荐,安全第一。
3句话记住今天的内容:
📌 Debian系统基础安全加固!新手必做的10个操作,堵住90%的安全漏洞
📌 debian服务器开机用了30秒?这5个命令找到启动慢的元凶,能砍掉一半时间
📌Debian系统用着不顺手?改完这8个默认配置,效率提升一倍
感谢你读到最后,如果觉得有帮助,点个“赞”+“推荐”,“分享”给更多人