可以以 root 身份编辑文件,但不能使用 sudo

可以以 root 身份编辑文件,但不能使用 sudo

我刚刚遇到了一个非常奇怪的情况。

我试图编辑 file /usr/lib/thunderbird/thunderbird.sh,它具有以下权限:

$ ll /usr/lib/thunderbird/thunderbird.sh
-rwxr-xr-x 1 root root 2730 Aug 20 12:55 /usr/lib/thunderbird/thunderbird.sh*

我发现如果我发出

sudo vim /usr/lib/thunderbird/thunderbird.sh

当我切换到插入模式时,我收到一条警告消息:

/usr/lib/thunderbird/thunderbird.sh [RO]
W10: Warning: Changing a readonly file
-- INSERT --

而我实际上无法写出任何更改。

但是,如果我发出:

user@hostname:~$ sudo su -
root@hostname:~# vim /usr/lib/thunderbird/thunderbird.sh

我可以毫无问题地编辑该文件。

奇怪的是,我编辑了许多具有类似权限的文件,例如 中的配置文件/etc/,没有问题,并且如果我在同一目录中创建一个文件,则编辑它没有问题:

user@hostname:~$ sudo touch /usr/lib/thunderbird/test.sh
user@hostname:~$ sudo chmod 755 /usr/lib/thunderbird/test.sh
user@hostname:~$ ll /usr/lib/thunderbird/test.sh /usr/lib/thunderbird/thunderbird.sh
-rwxr-xr-x 1 root root    0 Aug 20 13:03 /usr/lib/thunderbird/test.sh*
-rwxr-xr-x 1 root root 2730 Aug 20 12:55 /usr/lib/thunderbird/thunderbird.sh*
user@hostname:~$ sudo vim /usr/lib/thunderbird/test.sh

这是我的 sudoers 文件:

# Cmnd alias specification
Cmnd_Alias  APT = /usr/bin/apt-get update, /usr/bin/apt-get upgrade

# User privilege specification
root    ALL=(ALL:ALL) ALL 

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL 

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL 
%sudo   ALL=(ALL:ALL) NOPASSWD: APT

我的用户在 sudo 组内。

知道为什么会发生这种情况吗?

答案1

我刚刚发现原因,是以下几种情况的集合:

首先,我不知道为什么,但sudo没有HOME正确获取环境变量并使用普通用户的环境变量,所以它读取.vimrc/home/user/.vimrc.

为了看到这一点,我发布了:

user@hostname:~$ sudo bash
[sudo] password for user: 
root@hostname:/home/user# echo $HOME
/home/user

其次,我在用户的 vimrc 文件中启用了折叠持久性,以便存储光标位置:

au BufWinLeave * mkview
au BufWinEnter * silent loadview

这使得每次编辑文件时,都会在$HOME/.vim/view文件夹内创建一个属性文件。就我而言,看起来我没有sudo第一次就尝试编辑该文件,因此折叠文件是作为普通用户创建的:

user@hostname:~$ ll .vim/view/ | grep thunderbird.sh
-rw-rw-r-- 1 user user  2650 Aug 20 15:56 =+usr=+lib=+thunderbird=+thunderbird.sh=

由于 root 为/home/user,所以$HOME当我发出 时,(错误地)使用了相同的折叠文件sudo vim,并且出于某种我忽略的原因,可能与 vim 内部结构有关,如果折叠文件不属于编辑用户所有,则编辑的文件将被打开在只读模式下。

所以,我意识到,如果我删除该文件/home/user/.vim/view/=+usr=+lib=+thunderbird=+thunderbird.sh=,然后尝试使用它进行编辑,sudo vim,则完全没有问题。

因此,在故事的结尾,为了解决这种情况,我刚刚编辑/etc/sudoers并添加了这一行:

Defaults always_set_home

现在一切都按预期进行,我可以sudo再次可靠地使用。

答案2

我用这个命令解决了这个问题:

sudo chattr -i filename

相关内容