Alterando variáveis de ambiente de grupo e retenção

4

No campus, o grupo primário de todos é user e cada pessoa é adicionalmente associada a grupos, dependendo dos cursos que ele ou ela está fazendo, do laboratório em que ele ou ela trabalha, etc.

Meu colega de trabalho e eu somos membros do grupo foo , por isso usamos newgrp foo e umask 7 para garantir que nossos arquivos sejam acessíveis a nós dois sem conceder a permissão everyone . Nenhum de nós se importou com isso.

No entanto, agora precisamos que nossa variável de ambiente PATH aponte primeiro para a pasta bin do nosso laboratório antes do restante no PATH . Pensamos que um script simples funcionaria, mas não como o conteúdo de PATH não persiste após a execução de newgrp :

#!/bin/tcsh
setenv PATH "/path/to/lab/bin:$PATH"
newgrp foo

O shell padrão é tcsh . Alguém tem alguma sugestão?

Obrigado!

    
por alfyboza 08.04.2011 / 22:22

1 resposta

3

A menos que você precise digitar uma senha quando executar newgrp (um recurso usado muito raramente), não será necessário usar newgrp para criar arquivos pertencentes ao grupo apropriado. Você pode usar chmod . Por exemplo, em vez do seguinte fluxo de trabalho:

newgrp lab1
mkdir project1
$EDITOR project1/file1

você pode fazer isso:

mkdir project1
chgrp lab1 project1
$EDITOR project1/file1
chgrp lab1 project1/file1

Na maioria dos unices atuais, project1/file1 já pertence a lab1 , como o diretório que contém (* BSD), ou você pode forçar esse comportamento (Linux, Solaris,…):

mkdir project1
chgrp lab1 project1
chmod g+s project1
$EDITOR project1/file1

Tudo isso requer que seu umask seja definido como 002 ou 007.

É mais fácil gerenciar as permissões se listas de controle de acesso (ACL) forem aceitas. O suporte da ACL deve estar presente no driver do sistema de arquivos do disco e ativado nas opções de montagem e novamente no sistema de arquivos da rede, se aplicável. O suporte de ACLs ainda não está generalizado, então você pode não tê-lo.

Para ver se você pode usar ACLs, em um cliente Linux, tente executar

touch foo
setfacl -m user:myfriend:rwx foo
ls -l foo

Se as permissões de foo aparecerem como -rw-rw-r--+ ou similar (com + no final), as ACLs serão ativadas. Se o utilitário setfacl não estiver disponível, sua rede de campus provavelmente não terá ACLs ao redor.

Se você tem ACLs, então não precisa ter umask permissiva, pode ficar com 022 ou 077. Com ACLs, para configurar um diretório gravável em grupo (onde os arquivos recém-criados serão graváveis pelo grupo também), faça

mkdir project1
setfacl -m group:lab1:rwx project1; setfacl -d -m group:lab1:rwx project1

Além de não exigir umask permissiva, as ACLs permitem compartilhar arquivos entre um conjunto arbitrário de usuários e grupos.

    
por 08.04.2011 / 23:10