Car*_*ala 6 root permissions 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*
Run Code Online (Sandbox Code Playgroud)
我发现如果我发出
sudo vim /usr/lib/thunderbird/thunderbird.sh
Run Code Online (Sandbox Code Playgroud)
当我切换到插入模式时,我收到一条警告消息:
/usr/lib/thunderbird/thunderbird.sh [RO]
W10: Warning: Changing a readonly file
-- INSERT --
Run Code Online (Sandbox Code Playgroud)
而且我实际上不能写任何更改。
但是,如果我发出:
user@hostname:~$ sudo su -
root@hostname:~# vim /usr/lib/thunderbird/thunderbird.sh
Run Code Online (Sandbox Code Playgroud)
我可以毫无问题地编辑文件。
奇怪的是,我已经编辑很多类似的权限,如在配置文件中的文件/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
Run Code Online (Sandbox Code Playgroud)
这是我的 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
Run Code Online (Sandbox Code Playgroud)
我的用户在 sudo 组内。
知道为什么会发生这种情况吗?
刚刚才发现原因,是各种情况的集合:
首先,我不知道确切的原因,但是sudo
没有HOME
正确抓取环境变量并使用了普通用户之一,因此它读取了.vimrc
来自/home/user/.vimrc.
为了看到这一点,我发出:
user@hostname:~$ sudo bash
[sudo] password for user:
root@hostname:/home/user# echo $HOME
/home/user
Run Code Online (Sandbox Code Playgroud)
其次,我在用户的 vimrc 文件中启用了折叠持久性以存储光标位置:
au BufWinLeave * mkview
au BufWinEnter * silent loadview
Run Code Online (Sandbox Code Playgroud)
这使得每次编辑文件时,都会在$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=
Run Code Online (Sandbox Code Playgroud)
由于 root 取/home/user
as $HOME
,在我发出时(错误地)使用了相同的折叠文件sudo vim
,由于某种原因我忽略了,可能与 vim 内部有关,如果折叠文件不归编辑用户所有,则打开编辑后的文件在只读模式下。
所以,我意识到如果我删除文件/home/user/.vim/view/=+usr=+lib=+thunderbird=+thunderbird.sh=
然后尝试使用编辑sudo vim,
我完全没有问题。
所以,在故事的结尾,为了解决这种情况,我刚刚编辑/etc/sudoers
并添加了这一行:
Defaults always_set_home
Run Code Online (Sandbox Code Playgroud)
现在一切都按预期工作,我可以sudo
再次可靠地使用。
归档时间: |
|
查看次数: |
23546 次 |
最近记录: |