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 .