Evitar a exclusão da pasta para o proprietário de uma pasta

3

Vamos supor que eu tenha um servidor webhosting rodando no meu sistema Ubuntu 13.04. Para cada cliente que eu recebo que deseja hospedar um site no meu servidor, eu crio um usuário e o adiciono a um grupo chamado 'clientes'. Todos esses clientes obtêm uma pasta privada na minha pasta /home/ , na qual existe uma árvore de pastas que não deve ser excluída. Então, digamos que um dos nomes dos meus clientes seja bob. Ele receberá /home/bob/ como sua pasta privada, mas essa pasta também deve conter uma árvore de pastas como esta:

/home/bob/
     |
     |-> /www/
         |
         |-> /bobsdomain.com/
         |              |
         |              |-> /public_html/
         |              |-> /cgi_bin/
         |
         |-> /bobsotherdomain.com/
                        |
                        |-> /public_html/
                        |-> /cgi_bin/

Bob deve obviamente ser o proprietário de /home/bob porque senão Bob não poderia criar ou excluir arquivos e pastas dentro de sua pasta pessoal. No entanto, tudo entre /www/ e /public_html/ ou /cgi_bin/ nunca deve ser removido. Tudo a partir de /public_html/ ou /cgi_bin/ e abaixo deve ser a escolha de Bob se ele quiser excluí-lo ou não.

Para fazer isso, eu poderia simplesmente definir as pastas entre /www/ e /public_html/ ou /cgi_bin/ como propriedade de root, ou isso faria com que bob não conseguisse adicionar arquivos ao /public_html/ e /cgi_bin/ pastas?
Se isso não for possível, de que outra maneira devo fazer isso?

    
por Gabi Barrientos 25.08.2013 / 20:43

2 respostas

3

Eu encontrei a resposta para minha pergunta. Eu fiz um chown nas pastas que eu não queria que fossem deletadas para root: root, e então chmodded essas pastas usando o o bit pegajoso '(1775 em vez de 0775). Dessa forma, todos podem adicionar arquivos e pastas sobre o ftp como quiserem, mas não podem remover as pastas que eu protegi com o bit pegajoso, já que você teria que ser um proprietário de arquivo ou pasta para fazer isso.

    
por Gabi Barrientos 25.08.2013 / 21:55
0

Você estava no caminho certo. Se você quiser impedir ações como a criação e exclusão de arquivos (incluindo a exclusão de diretórios), o usuário não poderá ter acesso de gravação à pasta pai. Nesse caso, para preservar /home/<user>/www/<domain>/public_html e /home/<user>/www/<domain>/cgi_bin , o usuário não pode ter acesso de gravação a /home/<user>/www/<domain> . Para fazer isso, os diretórios do domínio devem pertencer a outra pessoa e não ser gravável pelo mundo. Note que não precisa ser root : o usuário nobody deve estar bem.

/home/bob
'-- [drwxrwxr-x bob     ]  www
    |-- [drwxrwxr-x nobody  ]  bobsdomain.com
    |   |-- [drwxrwxr-x bob     ]  cgi_bin
    |   '-- [drwxrwxr-x bob     ]  public_html
    '-- [drwxrwxr-x nobody  ]  bobsotherdomain.com
        |-- [drwxrwxr-x bob     ]  cgi_bin
        '-- [drwxrwxr-x bob     ]  public_html
    
por wyrm 18.05.2016 / 19:31