Como permitir que um usuário crie um diretório, embora não crie um subdiretório

2

Estou tentando criar um script de shell Bash que permita a transferência de arquivos de um dispositivo flash para um arquivo no qual o usuário especificará. Embora eu queira impedir que esse usuário não crie subdiretórios nesse diretório de arquivos.

OBSERVAÇÃO: Então, na essência, eu quero que o diretório do arquivo que o usuário crie / especifique seja uma estrutura plana de um nível.

Eu não tenho a menor idéia de como conseguir isso e gostaria de receber ajuda.

    
por Michael 06.10.2014 / 14:42

1 resposta

2

Não existe nenhum mecanismo nativo para alcançá-lo facilmente. O sistema de permissões do Linux não pode especificar permissões separadas para criar arquivos e diretórios, porque os diretórios são arquivos de fato. Mas tente assim:

  1. Faça com que todos os diretórios de arquivamento sejam de propriedade de um usuário (ou poucos diferentes), criados apenas para essa finalidade. Vamos assumir o nome do arquivo useruser.
  2. Faça todos os diretórios de arquivamento (eu acho que você tem muitos) para ser de propriedade deste usuário, in.ex .:

    $ chown archiveuser:archiveuser /somedir/archivedir1
    $ chown archiveuser:archiveuser /somedir/archivedir2
    $ chown archiveuser:archiveuser /somedir/archivedir3
    
  3. Restringir o acesso aos diretórios de arquivamento a serem acessados somente pelo proprietário:

    $ chmod 700 /somedir/archivedir1
    $ chmod 700 /somedir/archivedir2
    $ chmod 700 /somedir/archivedir3
    
  4. Use o mecanismo sudo para dar acesso ao comando cp aos diretórios de arquivamento:

    adicione a /etc/sudoers :

    someuser1 ALL=(archiveuser) NOPASSWD:/bin/cp /path/to/pendrive/* /somedir/archiveuser/*
    someuser2 ALL=(archiveuser) NOPASSWD:/bin/cp /path/to/pendrive/* /somedir/archiveuser/*
    

    É claro que é conveniente criar um grupo adequado para todos os usuários que devem ter permissão para usar este comando. Leia o tutorial sudo : -).

  5. Isso é tudo. Os usuários precisam usar:

    $ sudo -u archiveuser cp /path/to/pendrive/somefile /somedir/archiveuser/ 
    

Você pode criar um alias para torná-lo mais conveniente de usar (por exemplo, alias cpt='sudo -u archiveuser cp' ). Observe também que cp -r necessário para copiar um diretório não é permitido por sudo neste caso. Também o comando mkdir é impedido por permissões. Assim, seu objetivo é alcançado.

    
por 06.10.2014 / 17:27