Você não pode fazer o que afirma de uma maneira útil, mas há, sem dúvida, algo próximo o suficiente e que fará o que você realmente quer.
Mesmo que você tenha organizado a criação do diretório, o usuário www-data
ainda não conseguirá acessar /some-path/subdirectory
, porque o subdiretório só pode ser acessado por meio do diretório pai. (Há maneiras de contornar isso, mas nenhuma que eu recomende. Você pode ter um processo que pode acessar /some-path
e /some-path/subdirectory
alterar para /some-path/subdirectory
e, em seguida, descartar privilégios; o processo resultante ainda poderá acessar sua atual diretório (mas não através de seu caminho absoluto) .Você pode montar o diretório em outro local, mas se você for fazer isso, você pode também criar o diretório em outro lugar.)
Organize para que esses diretórios estejam localizados em um diretório que www-data
possa pelo menos acessar ( x
permission bit). Se o problema é que o diretório deve pertencer a outro usuário e outro grupo, defina uma lista de controle de acesso no diretório ( setfacl -m user:www-data:x /some-path
) - consulte Como restringir a execução de comandos em um diretório específico através do SUDOERS? para obter mais informações.
Se o usuário www-data
não puder gravar em /some-path
, você ainda precisará de privilégios elevados para criar o diretório. Você precisará fazer pelo menos duas coisas, talvez três:
- crie o subdiretório como um usuário com privilégios suficientes;
- se necessário, altere a propriedade do subdiretório;
- se necessário, altere as permissões do subdiretório.
Se o subdiretório deve pertencer ao usuário www-data
, você pode criá-lo como um grupo que pode gravar em /some-path
. Se necessário, defina uma ACL que permita que some-group
grave em /some-path
: setfacl -m group:some-group:rwx /some-path
. Então, dê a www-data
o direito de executar o comando mkdir
com sudo . Execute visudo
e adicione a seguinte regra:
www-data ALL = ( : some-group) /bin/mkdir /some-path/[0-9A-Z_a-z]*, !/bin/mkdir /some/path/[!-0-9A-Z_a-z]
Isso permite que www-data
execute sudo -g some-group mkdir /some-path/foo-bar
para criar subdiretórios em /some-path
.
Se o subdiretório precisar pertencer a outro usuário que possa gravar em some-path
, execute o comando mkdir
como esse usuário. Você pode conseguir que o diretório tenha as permissões e a propriedade corretas no momento da criação. Para o arquivo sudoers
:
www-data ALL = (some-user : some-group) /bin/mkdir -m 775 /some-path/[0-9A-Z_a-z]*, !/bin/mkdir /some/path/[!-0-9A-Z_a-z]
Execute sudo -u some-user -g some-group mkdir -m 775 /some-path/foo-bar
para criar um diretório gravável em grupo pertencente a some-user:some-group
em /some-path
.