- A folder with the setgid bit set force all its content to have the same owner group as the folder
Sim. Arquivos recém-criados recebem o grupo do diretório, o grupo do arquivo pode ser alterado posteriormente. (Nós os chamamos diretórios, não pastas.)
- A program with the setgid bit set always run on behalf of the owner group
Sim. Embora você não precise setgid no diretório, se você está apenas criando arquivos através de um binário setgid. Um programa setgid obtém o grupo em questão como o grupo primário, portanto, quaisquer arquivos que ele cria são de propriedade desse grupo por padrão (e não o grupo do usuário chamador).
- I set setgid bit for the shell script
Esta é a parte que não funciona. A maioria dos sistemas não respeita bits setuid e setgid em scripts interpretados , já que isso leva facilmente a vários problemas de segurança .
O que você precisa fazer é escrever um wrapper de programa C que execute o script e faça o wrapper setgid; ou (preferencialmente) use algo como sudo
para permitir que seus usuários executem o script com os direitos de outro grupo. ( sudo
já lida com coisas como limpeza de variáveis de ambiente que podem ser problemáticas.) Em ambos os casos, verifique se o script e seu interpretador estão em diretórios que os usuários não podem modificar.
Para sudo
, a configuração necessária (em /etc/sudoers
) seria algo assim:
username ALL=(:privgroup) /path/to/script
Isso permitiria que o usuário username
executasse /path/to/script
como o grupo privgroup
. Você pode usar %groupname
em vez de username
para permitir que todos os membros de groupname
executem o script. Os usuários precisarão executar o script usando sudo -g privgroup /path/to/script
porque sudo
por padrão tentará executar o comando nomeado como root
, e nós não permitimos isso. Mas você pode escrever um wrapper para esse comando.