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

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

Estou tentando criar um script de shell Bash que permita a transferência de arquivos de um dispositivo flash para um arquivo especificado pelo usuário. Embora eu queira impedir que este usuário possa criar nenhum subdiretório neste diretório de arquivo.

OBSERVAÇÃO:Então, em essência, quero que o diretório de arquivo que o usuário cria/especifica seja uma estrutura plana de um nível.

Não tenho a menor ideia de como conseguir isso e agradeceria qualquer ajuda que pudesse obter.

Responder1

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 a criação de arquivos e diretórios porque os diretórios são, na verdade, arquivos. Mas tente desta forma:

  1. Faça com que todos os diretórios de arquivo pertençam a um (ou poucos) usuários diferentes, criados apenas para esse propósito. Vamos assumir seu nome archiveuser.
  2. Faça com que todos os diretórios de arquivo (acho que você tenha muitos) sejam propriedade deste usuário, in.ex .:

    $ chown archiveuser:archiveuser /somedir/archivedir1
    $ chown archiveuser:archiveuser /somedir/archivedir2
    $ chown archiveuser:archiveuser /somedir/archivedir3
    
  3. Restrinja o acesso aos diretórios de arquivo para serem acessados ​​apenas pelo proprietário:

    $ chmod 700 /somedir/archivedir1
    $ chmod 700 /somedir/archivedir2
    $ chmod 700 /somedir/archivedir3
    
  4. Use sudoo mecanismo para conceder cpacesso de comando aos diretórios de arquivo:

    adicionar à /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 sudoo tutorial :-).

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

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

Você pode criar algum alias para torná-lo mais conveniente de usar (ou seja, alias cpt='sudo -u archiveuser cp'). Observe também que cp -ra necessidade de copiar um diretório não é permitida sudoneste caso. Além disso, mkdiro comando é impedido por permissões. Assim seu objetivo é alcançado.

informação relacionada