解决 Ubuntu 16.10 root 用户无法编辑 resolv.conf 文件的问题
首先要从使用 ExpressVPN 讲起
在 Ubuntu 安装 ExpressVPN Debian 软件包
sudo dpkg -i expressvpn_1.1.0_i386.deb
然后提示了如下错误:
Selecting previously unselected package expressvpn.
(Reading database ... 145783 files and directories currently installed.)
Preparing to unpack expressvpn_1.1.0_i386.deb ...
Unpacking expressvpn (1.1.0) ...
dpkg: dependency problems prevent configuration of expressvpn:
expressvpn depends on initscripts; however:
Package initscripts is not installed.
dpkg: error processing package expressvpn (--install):
dependency problems - leaving unconfigured
Processing triggers for systemd (231-9ubuntu1) ...
Processing triggers for ureadahead (0.100.0-19) ...
ureadahead will be reprofiled on next reboot
Processing triggers for man-db (2.7.5-1) ...
Errors were encountered while processing:
expressvpn
这是由于 initscripts 依赖包无法安装引起的问题
可通过如下命令解决:
sudo dpkg -i --ignore-depends=initscripts expressvpn_1.1.0_amd64.deb
忽略这个依赖包就可以成功安装了,激活使用也没有任何问题
但是当我重启之后,系统就会提示说存在没有被完全安装的软件,请使用 sudo apt-get install -f
来修复这个问题
然后我就照做了。。。悲剧就这样开始了。。。
刚刚我们已经发现了, ExpressVPN 就是这个没有被完全安装的软件,因为忽略了一个依赖包
所以如果不忽略这个依赖包,是无法安装这个软件的
sudo apt-get install -f
这个命令的其实就是修复依赖关系(depends)的命令
坑爹的是如果无法成功修复的话,它会把这个软件给卸载掉
没错,TM 的它把 ExpressVPN 卸载了。。。
更坑爹的是,由于我之前已经把 ExpressVPN 打开了,并且连接上了,可以翻墙了
它这一卸载,网络直接就瘫了。。。
多番查找之后,才发现原来 ExpressVPN 在连接成功之后,其实是在 /etc/resolv.conf
文件中添加了相应的 DNS
之前只是把软件删除了,DNS 还是 ExpressVPN 设置的 DNS 。。。
解决问题
既然明确了问题,那就好解决了
想想也简单,就是将 ExpressVPN 设置的的 DNS 删除就 OK 了,然而。。。
当我打开 /etc/resolv.conf
的时候,竟然提示我 ready only ,WTF 我用了 sudo
啊
然后也确认了文件的权限:
-rw-r--r-- 1 root root 237 Dec 10 14:44 /etc/resolv.conf
权限是可写的,这就奇怪了,不明白,只好再去 Google 了
原来在 Linux 系统当中,每个文件其实都是可以有属性的
有时候为了保护一个文件,就会使用 chattr
让它成为不可改变的文件
即使是 root
使用也无法删除或者修改
同时也可以使用 lsattr
来查看文件已经设置了哪些属性
明白了这一点之后,就来查看下该文件:
lsattr /etc/resolv.conf
得到了这个
----ia------------ /etc/resolv.conf
这就表示 resolv.conf
文件曾经被添加了 a
和 i
两个属性
a
禁止修改文件
i
禁止删除文件
所以只需要去掉这两个属性就可以了,使用如下命令:
chattr -a /etc/resolv.conf
chattr -i /etc/resolv.conf
如果要添加属性当然就是将上面的命令中的 减号 替换成 加号就可以了
再执行 lsattr
查看属性
------------------ /etc/resolv.conf
这时候再修改文件就没有任何问题了
又 Get 了个新技能!
参考链接
https://ubuntuforums.org/showthread.php?t=1509499&page=2&s=043674beae98f55e0d9754dbe95c0603
http://www.aboutlinux.info/2005/11/make-your-files-immutable-which-even.html