xinpureZhu

Menu

解决 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 文件曾经被添加了 ai 两个属性

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

— 于 共写了2000个字
— 文内使用到的标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注