以下是故事经过。
很久很久以前,我不知脑子哪里出问题了,擅自root了/usr/local,并更改了读写权限。因此出现了第一个问题:当我需要sudo的时候,terminal就会温情的告诉我:
sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位。
这个问题本身原因在于sudo的权限变了,因此网上有很多人给出了解决方案。比如https://www.cnblogs.com/chxwkx/p/10686864.html就总结的很不错。但是问题出现在这一句
执行命令chmod 755 /usr
从这句开始,我就踏上了一条布满荆棘的拯救之路。
重启之后,提示
sudo:在加载插件“sudoers_policy”时在 /etc/sudo.conf 第 0 行出错。
这是文件系统在哀嚎,错误的方案是继续人为改变sudoers的读写权限。我劝大家不要一条道走到黑了,以我为例,经过一番骚操作,出现了“failed to start network time synchronization”的错误,至此已经无法开机进入图形界面了,报错信息大概长这样
进入recovery模式后再进入root,根据提示信息输入
systemctl status systemd-timesyncd.service
发现该服务 load 成功了,但是activate 失败了。而网上关于相关错误的描述十分少,总之没有找到答案。我想重装系统了。
给急于解决问题的同学答案:
原因是人为改变了文件系统读写权限。
恢复文件系统权限才是正路
我终于想起来问题可能在于文件系统,所以我开始转换思路,谋求恢复文件系统的所有权和读写权限。
思路就是复制一个正常系统的文件权限配置给崩溃的机器。参考这篇文章https://blog.csdn.net/qq_43626147/article/details/114805792,我的做法是
- 制作一张Ubuntu系统盘,在崩溃的机器启动后从系统盘进入ubuntu试用模式。
- 在试用模式打开终端,输入
cd /usr # cd到正常的试用系统
getfacl -R . > permissions.txt # 将当前目录下左右文件的权限记录在txt文件中
并将txt文件复制到崩溃系统磁盘的/usr下。
- 重启,退盘。进入recovery模式,进入root。
sudo -i
cd /usr # cd到损坏目录
setfacl --restore=permissions.txt # 根据保存的权限,一次还原坏目录
然后重启,看到了久违的紫色图形界面,泪水打湿了我的眼眶。