chmod: 记一次权限修改问题

前段时间压力测试部署环境,公司内网分配的测试环境服务器不给 root 用户,而是给一个低权限用户的账号密码,登入后调用 sudo -i 切换为 root 用户。

这样一来 scp 传输文件时,就需要低权限用户也拥有目标文件夹的读写权限。于是在 /usr 路径下创建了一个文件夹 scp。结果在赋予权限时懒癌犯了直接调用了 chmod 777 -R /usr。

之后 sudo 命令直接报错:

sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set

赋予文件 777 并不是像想象中的那样,给一个高权限就可以高枕无忧。就比如说,sudo 命令的权限是 4755,带了 suid。

suid 表示,执行当前文件时,进程的所属者就是文件的所属者,sudo 的所属者是 root,执行 sudo 时,就是以 root 身份执行的。如果将 sudo 命令权限改为 777,调用时则会提示 sudo 必须属于 uid 0(也就是 root)。所以这里要对 sudo 做修正:

chown root:root /usr/bin/sudo

chmod 4755 /usr/bin/sudo

正常的 755 等同于 (rwx r-w r-x),4755 等同于 (rws r-x r-x),这里的 4 即表示 suid,因而可以通过 sudo -i 命令切换到 root 用户。

再之后会报:

sudo: error in /etc/sudo.conf, line 19 while loading plugin "sudoers_policy"

这里继续调整其他文件的权限:

chmod 644 /usr/lib/sudo/sudoers.so

chown -R root /usr/lib/sudo