O superusuário pode gravar em arquivos somente leitura?

8

Eu tropecei no comportamento de permissão surpreendente (para mim) no FreeBSD. Digamos que eu esteja operando como usuário não raiz . Eu crio um arquivo, defino sua permissão em somente leitura e, em seguida, tento escrever nele:

$ touch f
$ chmod 400 f
$ ls -l f
-r--------  1 user  wheel  f
$ echo a >> t
t: Permission denied.

Até aí tudo bem. Agora faço o mesmo que root e escrevo no arquivo:

# ls -l f2
-r--------  1 root  wheel  f2
# echo a >> f2
# echo $?
0

É um erro ou comportamento pretendido? Posso seguramente assumir que isso funcionaria assim em qualquer Unix & Linux?

    
por arrowd 16.08.2016 / 21:39

2 respostas

12

É normal que root seja capaz de substituir as permissões dessa maneira.

Outro exemplo é root sendo capaz de ler um arquivo sem acesso de leitura:

$ echo hello > tst
$ chmod 0 tst
$ ls -l tst
---------- 1 sweh sweh 6 Aug 16 15:46 tst
$ cat tst
cat: tst: Permission denied
$ sudo cat tst
hello

Alguns sistemas têm o conceito de arquivos imutáveis . por exemplo, no FreeBSD:

# ls -l tst
-rw-r--r--  1 sweh  sweh  6 Aug 16 15:50 tst
# chflags simmutable tst
# echo there >> tst
tst: Operation not permitted.

Agora, até root não pode gravar no arquivo. Mas, é claro, root pode remover o sinalizador:

# chflags nosimmutable tst
# echo there >> tst
# cat tst
hello
there

Com o FreeBSD, você pode ir além e definir um sinalizador de kernel para impedir que root remova o sinalizador:

# chflags simmutable tst
# sysctl kern.securelevel=1
kern.securelevel: -1 -> 1
# chflags nosimmutable tst
chflags: tst: Operation not permitted

Agora ninguém, nem mesmo root , pode alterar este arquivo.

(O sistema precisa ser reinicializado para reduzir o nível de segurança).

    
por 16.08.2016 / 21:56
3

Sim, isso é muito normal. root não tem limites para leitura / gravação (com pouquíssima exceção), porque ele é a raiz.

    
por 16.08.2016 / 21:40