Pode editar o arquivo como root, mas não usando o sudo

6

Acabei de encarar uma situação muito estranha.

Eu estava tentando editar o arquivo /usr/lib/thunderbird/thunderbird.sh , que tem as seguintes permissões:

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

e descobri que, se eu emitir

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

Quando eu alterno para o modo de inserção, recebo uma mensagem de aviso:

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

E eu realmente não posso escrever nenhuma alteração.

No entanto, se eu emitir:

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

Eu posso editar o arquivo sem problemas.

O estranho é que eu editei muitos arquivos com permissões similares, como os arquivos de configuração em /etc/ , sem problemas, e que se eu criar um arquivo dentro do mesmo diretório não tenho problemas para editá-lo:

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

Este é o meu arquivo 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

E meu usuário está dentro do grupo sudo.

Alguma ideia de por que isso acontece?

    
por Carles Sala 20.08.2013 / 13:07

2 respostas

8

Acabei de descobrir o motivo e foi uma coleção de circunstâncias:

Primeiro de tudo, eu não sei exatamente por que, mas sudo não estava pegando a variável de ambiente HOME corretamente e usava a do usuário regular, então ela lia o .vimrc de /home/user/.vimrc.

Para ver isso, eu publiquei:

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

Em segundo lugar, tenho a persistência de dobramento ativada no arquivo vimrc do meu usuário para armazenar a posição do cursor:

au BufWinLeave * mkview
au BufWinEnter * silent loadview

Isso faz com que toda vez que um arquivo seja editado, um arquivo de propriedades seja criado dentro da pasta $HOME/.vim/view . No meu caso, parece que tentei editar o arquivo sem sudo pela primeira vez, então o arquivo dobrável foi criado como usuário regular:

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

Como a raiz usou /home/user como $HOME , o mesmo arquivo de dobragem foi (erroneamente) usado quando emitei sudo vim e, por algum motivo que ignoro, provavelmente relacionado a internals do vim, se o arquivo dobrável for não pertence ao usuário de edição, o arquivo editado é aberto no modo ReadOnly.

Então, percebi que, se eu removesse o arquivo /home/user/.vim/view/=+usr=+lib=+thunderbird=+thunderbird.sh= e depois tentasse editar usando sudo vim, , não tive nenhum problema.

Então, no final da história, para corrigir essa situação, eu apenas editei /etc/sudoers e adicionei esta linha:

Defaults always_set_home

Agora tudo funciona como esperado e posso usar sudo de forma confiável novamente.

    
por 20.08.2013 / 16:07
-2

Eu resolvi o problema com este comando:

sudo chattr -i filename
    
por 01.03.2016 / 15:29