Como forço o grupo e as permissões para arquivos criados dentro de um diretório específico?


27

Para arquivos criados a partir da conta testuser no diretório / var / www, preciso que eles tenham g + rwx como permissões e www-data como grupo.

Como posso conseguir isso?

Estou criando os arquivos via SSH.


1
Como o seu usuário está criando arquivos? Via FTP stor/ appe? Via HTTP PUT? Através de uma conta shell? Esses detalhes são importantes, pois afetam bastante as respostas possíveis e precisam estar na sua pergunta.
JdeBP

Obrigado pela entrada :), estou criando tudo via SSH.
precisa saber é o seguinte

Respostas:


53

Para definir o grupo, dê /var/wwwo bit setgid :

chgrp www-data /var/www
chmod g+s /var/www

Para também ajustar subdiretórios: find /var/www -type d -exec chmod g+s {} +

Isso fará com que todos os arquivos recém-criados herdem o grupo do diretório pai, em vez do usuário.


Para definir as permissões de grupo padrão, você precisará usar ACLs . Defina uma ACL "padrão":

setfacl -m "default:group::rwx" /var/www

Para também ajustar subdiretórios: find /var/www -type d -exec setfacl -m d:g::rwx {} +

Nota: O sistema de arquivos deve ter o suporte à ACL ativado. Às vezes, é ativado por padrão; em ext3 ou ext4, você pode obter "Operação não suportada"; nesse caso, ela deve ser ativada manualmente:

  • Para um sistema de arquivos montado atualmente: mount -o remount,acl /

  • Permanentemente - um dos métodos abaixo:

    • no nível fstab: edite /etc/fstabpara ter aclno campo de opções

    • no nível do sistema de arquivos: tune2fs -o acl /dev/diskname


você não pode obter os subdiretórios com chmod -R g + s / var / www? Não parece que você precise do comando find.
bobpaul

4
@obpaul: Não, porque chmodtambém receberia todos os arquivos.
grawity

Observe que alguns comandos, em particular install, conseguem de alguma forma ignorar as ACLs padrão do diretório.
Ulrich Schwarz

@ grrawity Esta é uma resposta realmente ótima e tenho certeza de que existe uma solução para o meu problema, mas não consigo descobrir. Eu tenho uma /var/www/html/projectspasta e quando www-data cria um arquivo, ele tem rw-rw-rpermissões, mas quando faço algo no console, ele cria um arquivo rw-r--r. Como forçar novos arquivos criados a sempre ter rw-rw-rpermissões?
lewis4u 29/07

@ lewis4u: Globalmente ou por diretório? As permissões padrão globais (bem, por processo) são controladas por umask. As permissões padrão por diretório são alteráveis ​​usando-se setfaclcomo na postagem principal.
grawity 29/07

3

Isso pode ter deixado algumas pessoas presas à resposta 'grawity' no setgid, se o grupo da pasta for diferente do seu, talvez seja necessário executar o chmod como root, mas você não receberá nenhum erro indicando que precisa fazer isso.

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                    #no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo       #and the group is still wrong


$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo #and group is set

Eu estava puxando meu cabelo antes de me deparar com isso. Obrigado.
AndrewStevens

0

O grupo dos arquivos que estão sendo criados por um usuário é o grupo desse usuário (em / etc / group). As permissões são controladas pelo parâmetro UMASK, consulte este

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.