Como chamar chmod e preservar o bit SGID?

1

Eu tenho a seguinte estrutura de diretórios:

+ public/
|-+ pics/
| |-- a
| '-- b
'-+ thumbs/
  |-- a
  '-- b

Gostaria que todos os arquivos da árvore pertencessem ao gallery:http com o modo ug=rwX,o= definido.

O script que cria diretórios em pics e thumbs é executado como o usuário gallery . Eu defino bits SUID / SGID em public , pics e thumbs .

Agora, o problema é que o diretório a será criado com os proprietários gallery:http como deveria, mas não terá a permissão x para o grupo. Se eu chamar chmod , limparei o bit SGID. (Comportamento estranho, mas que realmente acontecerá, provavelmente porque http não é o proprietário do usuário do arquivo.)

Não consigo chamar chown como usuário não raiz para definir primeiro o modo e depois os proprietários.

A única solução parece ser definir umask para ug=rwx,o= , criar todos os diretórios e, em seguida, alterar o umask antes de criar qualquer arquivo regular ou criar os arquivos regulares e, em seguida, alterar seu modo para ug=rw,o= .

Existe uma solução melhor e menos feia que eu não vejo?

    
por David 23.08.2017 / 18:21

2 respostas

2

Se você puder alterar o script, poderá ser a solução mais fácil para alterar as chamadas mkdir para mkdir --mode=770 .

Se você não puder alterar o script, as ACLs poderão ajudar:

setfacl -m d:u::rwx,d:g::rwx,o::- pics thumbs

umask não define permissão executável em arquivos. Nunca define permissões; isso apenas impede que as permissões sejam configuradas na criação de arquivos.

    
por 23.08.2017 / 22:09
1

Você tem algumas opções:

  • chmod g+x a
  • altere a umask
  • use listas de controle de acesso.

Sim, você pode definir bits sem limpar outros bits. Veja a primeira opção. Mas, para torná-lo mais automatizado, siga um destes procedimentos:

  • Defina umask como rwxr-x --- e faça com que cada usuário tenha um grupo padrão privado (seu grupo primário pertence somente a eles).
  • Use as listas de controle de acesso: com elas você pode não apenas definir permissões para vários grupos e usuários, mas também pode definir padrões para diretórios (muito parecido com sgid, mas não apenas o grupo, mas também o modo). veja setfacl, getfacl. veja também O que são as diferentes formas de configurar permissões de arquivos, etc. no gnu / linux
por 23.08.2017 / 23:09