Quando as permissões do diretório Unix são impostas?

2

Digamos que eu tenha um diretório que somente root possa acessar:

 $ sudo -s
 $ mkdir ~/rootonly
 $ chmod 000 ~/rootonly

Dentro desse diretório é um com permissões globais-tudo:

 $ cd ~/rootonly
 $ mkdir openforall
 $ chmod 777 openforall

Não, se eu quiser acessar esse diretório como um usuário normal, aparentemente não consigo (como seria de esperar):

 $ su me
 $ cd ~/rootonly/openforall/
 bash: cd: /home/me/rootonly/openforall: Permission denied
 $ touch ~/rootonly/openforall/foo
 touch: cannot touch '/home/me/rootonly/openforall/foo': Permission denied

No entanto, se eu primeiro cd como root no diretório, e então su para o usuário normal, ele funciona:

 $ sudo -s
 $ cd /home/me/rootonly/openforall
 $ su www-data
 $ touch test
 $ ls
 $ -rw-r--r-- 1 www-data www-data 0 2011-08-05 14:17 test

Por que isso funciona? O primeiro caso é apenas um comportamento específico de "cd", que tenta passar pela pasta da hierarquia de diretórios por pasta? Em outras palavras, para um invasor ignorando o bash, o kernel fornece uma entrada para acessar "openforall" se o caminho for conhecido?

Estou interessado no que está acontecendo nos bastidores aqui.

    
por miracle2k 05.08.2011 / 14:23

1 resposta

1

As permissões são aplicadas quando um comando precisa "atravessar" um diretório.

Quando você touch ~/rootonly/openforall/foo , o comando de toque precisa abrir o diretório rootonly para que ele possa encontrar o local (inode etc) de openforall para poder editar o conteúdo da estrutura de diretório openforall para definir o timestamp de foo .

    
por 05.08.2011 / 15:15

Tags