当前位置:首页>Linux>为什么sudo要输密码?Linux权限机制原来是这么设计的

为什么sudo要输密码?Linux权限机制原来是这么设计的

  • 2026-10-11 07:13:24
为什么sudo要输密码?Linux权限机制原来是这么设计的

你有没有过这个想法?

每次输完命令还要加个sudo,还要输密码,真的烦死了。

“不就是个权限吗?直接给我全开不就完了?”

然后你去百度搜"如何取消sudo密码",照着教程改了sudoers,从此敲命令再也不用输密码了,爽得飞起。

直到有一天,你手滑敲了个rm -rf /*,然后…就没有然后了。

这篇文章,我就跟你好好聊聊:Linux的权限机制到底是怎么设计的?为什么sudo要这么"反人类"?知道了这些,你再也不会瞎改权限了。

一、root到底是什么?为什么这么牛?

先讲个最简单的:为什么root无所不能?

你可以把Linux系统想象成一个公司。

  • root = 公司老板
    :想开谁开谁,想拆哪拆哪,公司里没有它碰不到的东西
  • 普通用户 = 普通员工
    :只能用自己工位的东西,想进财务室?门都没有
  • sudo = 临时授权单
    :员工想干大事,得找老板签字授权,干完权限就收回去

是不是一下子就懂了?

Windows为什么经常中病毒?因为默认用户就是管理员权限,病毒进来直接就能改系统文件。

Linux为什么安全?因为默认你就是个普通员工,就算病毒进来了,它最多只能删你桌面上的文件,想动系统核心?门都没有。

我自己踩过的坑:

刚玩Linux的时候觉得sudo太麻烦,直接把自己加到了sudoers里免密码,然后有一次写脚本,变量名写错了,变成了rm -rf /$xxx/*,结果xxx是空的,就变成了rm -rf /*。

那是我第一次体会到什么叫"从删库到跑路"。


二、sudo和su到底有啥区别?90%的人用错了

很多人搞不清sudo和su,觉得都是提权,随便用哪个。

大错特错,这俩完全不是一回事。

对比项
su
sudo
本质
切换成另一个用户
以另一个用户的身份执行一条命令
需要的密码
目标用户的密码
你自己的
密码
权限时长
一直保持,直到exit
默认5分钟,超时重新输密码
日志
没有详细日志
每条命令都有日志记录

举个生活化的例子:

  • su root
     = 你直接把老板的工牌抢过来戴在自己脖子上,从此你就是老板了,想干嘛干嘛
  • sudo 命令
     = 你拿着审批单找老板签字,老板说"这件事可以干",你去干,干完你还是员工

哪个安全?一目了然。

实操验证一下:

# 看一下当前用户是谁
whoami

# 用sudo执行whoami,看一下是谁
sudowhoami

你会发现,第一个输出是你的用户名,第二个输出是root。

sudo只是让这一条命令以root身份执行,执行完你还是你自己。

这就是设计的精妙之处:最小权限原则。


三、chmod 777到底是什么?为什么说是自杀行为?

很多人遇到权限问题,网上一搜,别人说"chmod 777就好了",然后你敲完,问题解决了,从此遇到权限问题就777。

这是我见过最蠢的行为。

先搞懂这三个数字到底是什么意思。

还是用公司比喻:

  • 文件 = 一个办公室
  • 777 = 这个办公室,老板(文件所有者)、同事(同组用户)、保洁阿姨(其他所有人),都有开门、办公、砸办公室的全部权限

那三个数字分别对应:所有者权限 + 组权限 + 其他用户权限

每个数字是权限的和:

  • 读(r)= 4
  • 写(w)= 2
  • 执行(x)= 1

所以:

  • 7 = 4+2+1 = 读+写+执行 = 什么都能干
  • 6 = 4+2 = 读+写 = 不能执行
  • 5 = 4+1 = 读+执行 = 不能改
  • 4 = 只读 = 最安全

那正确的权限应该是多少?

  • 普通文件(配置、文档):644 = 我能改,别人只能看
  • 可执行文件(脚本、程序):755 = 我能改能跑,别人只能跑不能改
  • 目录:755 = 我能增删文件,别人只能看和进

chmod 777的危害:

比如你的网站配置文件设成777,那只要服务器上有一个漏洞,别人就能直接改你的配置文件,把数据库密码改了,甚至把整个网站删了。

我见过太多公司,测试环境图方便全用777,然后部署到生产也忘了改,最后被黑了都不知道为什么。


四、实操:3条命令搞定90%的权限问题

说了这么多理论,来点实用的。

1. 看权限到底是什么

ls-l 文件名

输出大概是这样:

-rw-r--r-- 1 alice alice 42 Jun 10 10:00 test.txt

拆解一下:

  • 第一个-:这是个文件(d是目录,l是链接)
  • rw-
    :所有者alice能读能写不能执行
  • r--
    :alice组的用户只能读
  • r--
    :其他人只能读

2. 修复文件权限

# 普通文件改成正确权限
chmod644 test.txt

# 脚本改成可执行
chmod755 run.sh

# 递归改目录下所有文件权限(慎用)
find /path/to/dir -type f -execchmod644{}\;
find /path/to/dir -type d -execchmod755{}\;

3. 查看自己有哪些sudo权限

sudo-l

这个命令很重要,能看到你到底能执行哪些命令,是不是真的有全部权限。


五、常见问题(4个高频Q&A)

Q1:我就是想取消sudo密码,怎么改才安全?

答:真要改也可以,但不要给所有命令免密,只给你常用的那几个。

sudo visudo

在最后加:

你的用户名 ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/systemctl

这样只有apt和systemctl不用输密码,其他命令还是要输。安全和方便平衡。

Q2:为什么有时候sudo输完密码,过一会又要输?

答:默认sudo的密码缓存是5分钟,5分钟内不用再输,超过就要重新输。这是安全设计,防止你离开工位的时候别人用你的终端搞破坏。

Q3:chown和chmod有啥区别?

答:chmod改的是"谁能做什么",chown改的是"这个东西是谁的"。

比如:

chown alice:alice test.txt  # 把文件所有者改成alice
chmod644 test.txt         # 设alice能改,别人只能看

Q4:为什么我用sudo执行脚本,提示command not found?

答:因为sudo的PATH和你普通用户的PATH不一样!很多人踩过这个坑。

你可以用绝对路径:

sudo /home/alice/run.sh

或者改sudoers的secure_path,但不推荐,安全第一。


六、核心总结

3句话记住今天的内容:

  1. root是老板,sudo是临时授权单
    ,用完权限就收回去,永远不要直接用root登录
  2. 权限永远给最小够用
    ,能644就不要755,能755就绝对不要777
  3. 遇到权限问题先想"为什么会有权限问题"
    ,而不是上来就777,那是在埋雷

往期推荐

📌 Debian系统基础安全加固!新手必做的10个操作,堵住90%的安全漏洞
📌 debian服务器开机用了30秒?这5个命令找到启动慢的元凶,能砍掉一半时间

📌Debian系统用着不顺手?改完这8个默认配置,效率提升一倍


感谢你读到最后,如果觉得有帮助,点个“赞”+“推荐”,“分享”给更多人

最新文章

随机文章