如何收回授予www-data的权限及恢复/etc文件夹的root权限
嘿,先搞定眼前最紧急的sudo报错问题——这个不解决的话,你连切换root的操作都没法正常进行,更别说处理其他权限调整了。
一、修复sudo报错:/etc/sudoers所有者错误
你看到的错误提示说明/etc/sudoers文件被改成了www-data用户(uid33)所有,但这个核心配置文件必须属于root(uid0)才能让sudo正常工作。这里有两种修复方法:
方法1:用pkexec快速修复(如果系统支持)
如果你的系统是Ubuntu/Debian这类带pkexec工具的发行版,直接在终端敲这两行命令就行:
pkexec chown root:root /etc/sudoers pkexec chmod 0440 /etc/sudoers
第一行把文件所有者改回root,第二行设置sudoers文件的正确权限(440是只读,只有root能修改)。
方法2:进入单用户/救援模式修复
如果pkexec也用不了,就得进单用户模式了(以Ubuntu为例,其他发行版操作类似):
- 重启电脑,在GRUB启动菜单里选「Advanced options for Ubuntu」,再挑带「(recovery mode)」的内核选项。
- 进入恢复菜单后,选「root」进入root权限的shell环境。
- 先把根目录重新挂载成可写模式(默认是只读):
mount -o remount,rw / - 修复sudoers的所有者和权限:
chown root:root /etc/sudoers chmod 0440 /etc/sudoers - 敲
exit回到恢复菜单,选「resume」正常启动系统就行。
搞定sudo问题后,再来处理你问的两个权限调整需求:
二、收回授予www-data的权限
得看你之前是给了www-data所有权还是只是访问权限,两种情况处理方式不一样:
如果是收回所有权(把文件/目录改回原所有者)
要是之前用chown www-data:www-data 你的目标路径把某个文件/目录的所有权给了www-data,现在要改回root(或者其他原用户),就用:
sudo chown root:root 你的目标路径
要是要改回其他用户,把root:root换成对应的用户名和组名就行。
如果是收回额外的访问权限
要是只是用chmod或者ACL给了www-data额外的读写执行权限:
- 普通权限调整:比如之前给其他用户加了写权限,现在移除的话:
也可以直接恢复默认权限(文件一般是644,目录是755):sudo chmod o-w 你的目标路径sudo chmod 644 目标文件 sudo chmod 755 目标目录 - ACL权限清理:如果用
setfacl给www-data单独加了权限,执行下面的命令收回:
要是想清空所有ACL规则,就用:sudo setfacl -x u:www-data 你的目标路径sudo setfacl -b 你的目标路径
三、把/etc文件夹恢复为root所有
/etc目录下的所有文件和子目录默认都应该属于root用户和root组,要批量恢复的话,用递归修改所有者的命令就行:
sudo chown -R root:root /etc
这里的-R表示递归处理/etc下的所有内容。不过要注意,像/etc/sudoers这种特殊文件的权限是440,不是默认的644,不过刚才修复sudo的时候已经设置过了,其他文件基本都会恢复正常。
内容的提问来源于stack exchange,提问作者Mehmet Düzoylum

