Estou conectado à minha VM remota (esgotando ESXi
) como usuário xyz. Eu queria mudar /etc/hosts
para adicionar alguns nomes de rede que não eram visíveis por padrão.
Eu primeiro tentei correr
sudo vi /etc/hosts
mas quando entrei vi
, ainda me dizia que o arquivo era somente leitura. Aqui estão os privilégios:
>ls -l /etc/hosts
-rw-r--r-- 1 root root 416 2013-06-19 08:08 /etc/hosts
Também notei que quase todos os outros arquivos /etc
possuem um lsattr
of -----------------e-
, hosts
apenas ----i------------e-
. Por exemplo:
>lsattr /etc
...
-----------------e- ./python
----i------------e- ./hosts
...
Então tentei chmod
e aqui está o que consegui:
>sudo chmod +w /etc/hosts
chmod: changing permissions of `/etc/hosts': Operation not permitted
Eu pensei que era estranho porque o root (para o qual eu mudei quando eu sudo
) deveria ser capaz de fazer qualquer coisa. Meu sudoers
arquivo parece bastante comum:
1 # /etc/sudoers
2 #
3 # This file MUST be edited with the 'visudo' command as root.
4 #
5 # See the man page for details on how to write a sudoers file.
6 #
7
8 Defaults env_reset
9
10 # Host alias specification
11
12 # User alias specification
13
14 # Cmnd alias specification
15
16 # User privilege specification
17 root ALL=(ALL) ALL
18
19 # Allow members of group sudo to execute any command after they have
20 # provided their password
21 # (Note that later entries override this, so you might need to move
22 # it further down)
23 %sudo ALL=(ALL) ALL
24 #
25 #includedir /etc/sudoers.d
26
27 # Members of the admin group may gain root privileges
28 %admin ALL=(ALL) ALL
Estou procurando uma explicação de por que isso está acontecendo e como contornar isso.
Responder1
O atributo específico nesta edição é i
, oimutávelatributo.
O arquivo foi marcadoimutável.
Isso significa que é imutável por qualquer usuário, incluindo root. O root ainda pode alterar os atributos e remover o atributo imutável, mas deve fazê-lo primeiro antes de fazer alterações no arquivo, ao contrário das permissões padrão de não gravação em um arquivo que o root pode simplesmente ignorar.
Até onde eu sei, esses atributos são aplicáveis apenas a sistemas de arquivos ext[234].
Você pode ver a página de manual do chattr,
$man chattr
para ver uma lista completa e uma descrição dos atributos disponíveis.
O único que realmente usei foi o i. Mas alguns dos outros incluem:
A: atime remains unmodified when accessed
a: can only be opened for writing in append-only mode
c: compressed automatically
j: all data is written to the journal before being written to the file
s: blocks are zeros when file is deleted
u: contents of file are saved when file is deleted for later undelete
Existem outros atributos, mas eles são um tanto esotéricos e muito mais informações podem ser encontradas sobre eles na página de manual do chattr.
Responder2
Mudei os atributos estendidos para me livrar do i
e então fiquei bem:
>sudo chattr -i /etc/hosts
Mas ainda gostaria de uma explicação de como ler lsattrs
a saída, incluindo o atributo que alterei.