Definir um proprietário padrão "automaticamente" exigiria que um diretório setuidse comportasse como setgid. Entretanto, embora isso possa ser configurado no FreeBSD, outros sistemas UNIX e Linux simplesmente ignoram u+s. No seu caso, no entanto, pode haver outra solução.
O que eu quero é ter um diretório que possa ser compartilhado adicionando um grupo a um usuário. Qualquer coisa criada neste diretório herda o esquema de permissão de seu pai. Se existe uma maneira melhor do que estou tentando, sou todo ouvidos.
Então, basicamente, pelo que vejo, você deseja controlar o acesso a um diretório usando o mecanismo de grupos. No entanto, isso não requer que você restrinja as permissões em toda a estrutura de diretórios. Na verdade, o --xbit de execução do diretório pode ser exatamente o que você precisa. Deixe-me lhe dar um exemplo. Assumindo que...
- O grupo que controla o acesso ao
group_dirdiretório é ourgroup.
- Somente pessoas do
ourgroupgrupo podem acessar group_dir.
user1e user2pertence a ourgroup.
- O umask padrão é 0022.
... considere a seguinte configuração:
drwxrws--- root:ourgroup |- group_dir/
drwxr-sr-x user1:ourgroup |---- group_dir/user1_submission/
drwxr-sr-x user2:ourgroup |---- group_dir/user2_submission/
-rw-r--r-- user2:ourgroup |-------- group_dir/user2_submission/README
Aqui, vamos assumir que cada item foi criado por seu proprietário.
Agora, nesta configuração:
- Todos os diretórios podem ser navegados livremente por todos os usuários
ourgroup. Qualquer pessoa do grupo pode criar, mover, excluir arquivos em qualquer lugar dentro group_dir(mas não em profundidade).
- Quem não
ourgroupestiver dentro será bloqueado group_dire, portanto, será incapaz de manipular qualquer coisa sob ele. Por exemplo, user3(quem não é membro ourgroup), não pode ler group_dir/user2_submission/README(mesmo que ele tenha r--permissão no próprio arquivo).
No entanto, há um pequeno problema neste caso: devido ao umask típico, os itens criados pelos usuários não podem ser manipulados por outros membros do grupo. É aqui que as ACLs entram. Ao definir as permissões padrão, você garantirá que tudo esteja bem, apesar do valor umask:
$ setfacl -dRm u::rwX,g::rwX,o::0 group_dir/
Esta chamada define:
rw(x)Permissões padrão para o proprietário.
rw(x)Permissões padrão para o grupo.
- Por padrão, não há permissões para os outros. Observe que, como os outros não podem acessar de
group_dirqualquer maneira, não importa realmente quais permissões estão abaixo dele.
Agora, se eu criar um item como user2:
$ touch group_dir/user2_submission/AUTHORS
$ ls -l group_dir/user2_submission/AUTHORS
rw-rw---- user2:ourgroup group_dir/user2_submission/AUTHORS
Com essa ACL, podemos tentar reconstruir nossa estrutura anterior:
drwxrws---+ root:ourgroup |- group_dir/
drwxrws---+ user1:ourgroup |---- group_dir/user1_submission/
drwxrws---+ user2:ourgroup |---- group_dir/user2_submission/
-rw-rw----+ user2:ourgroup |-------- group_dir/user2_submission/README
Aqui, novamente, cada item é criado por seu proprietário.
Além disso, se você quiser dar um pouco mais de energia / segurança para aqueles que usam o diretório, considere um pouco complicado. Isso impediria, por exemplo, a user1exclusão user2_submission(já que ele tem -w-permissão group_dir):
$ chmod +t group_dir/
Agora, se user1tentar remover user2o diretório, ele ficará adorável Operation not permitted. Observe no entanto que, embora isso impeça modificações na estrutura de diretórios group_dir, os arquivos e diretórios abaixo ainda estão acessíveis:
user1@host $ rm -r user2_submission
Operation not permitted
user1@host $ cat /dev/null > user2_submission/README
user1@host $ file user2_submission/README
user2_submission/README: empty (uh-oh)
Outra coisa a considerar é que as ACLs que usamos configuram permissões padrão . Portanto, é possível que o proprietário de um item altere as permissões associadas a ele. Por exemplo, user2pode executar perfeitamente ...
$ chown g= user2_submission/ -R
or
$ chgrp nobody user2_submission -R
... portanto, tornando seu diretório de envio completo indisponível para qualquer pessoa do grupo.
No entanto, como você originalmente deseja dar rwsacesso total a qualquer pessoa do grupo, presumo que você confie nesses usuários e que não esperaria muitas operações maliciosas deles.