// Atualizado em 8 de fevereiro - Breves edições em aberto:
- Como umask diretórios diferente dos arquivos?
- Como umask no Nautilus copiar / colar?
- Como definir umask para SSHFS?
NOSSA SITUAÇÃO
Várias pessoas da nossa empresa efetuam login em um servidor e enviam arquivos. Todos precisam ser capazes de carregar e substituir os mesmos arquivos. Eles têm nomes de usuário diferentes, mas fazem parte do mesmo grupo. No entanto, como este é um servidor da Internet, os "outros" usuários devem ter (em geral) apenas acesso somente leitura. Então, o que eu quero é essas permissões padrão:
arquivos: 664
diretórios: 771
Meu objetivo é que todos os usuários não precisem se preocupar com permissões. O servidor deve ser configurado de forma que essas permissões se apliquem a todos os arquivos e diretórios, recém-criados, copiados ou sobrescritos. Somente quando precisamos de algumas permissões especiais, mudaríamos isso manualmente.
Carregamos arquivos no servidor por SFTP-ing no Nautilus, montando o servidor usando sshfs e acessando-o no Nautilus como se fosse uma pasta local e SCP-ing na linha de comando. Isso basicamente cobre nossa situação e o que pretendemos fazer.
Agora, eu li muitas coisas sobre a bela funcionalidade umask. Pelo que entendi, umask (junto com o PAM) deve permitir que eu faça exatamente o que quero: defina permissões padrão para novos arquivos e diretórios. No entanto, depois de muitas horas de leitura e tentativa e erro, ainda não consigo fazer isso funcionar. Eu recebo muitos resultados inesperados. Eu realmente gosto de ter uma sólida compreensão do umask e tenho muitas perguntas sem resposta. Vou postar essas perguntas abaixo, juntamente com minhas descobertas e uma explicação dos meus estudos que levaram a essas perguntas. Dado que muitas coisas parecem dar errado, acho que estou fazendo várias coisas erradas. Portanto, há muitas perguntas.
NOTA: Estou usando o Ubuntu 9.10 e, portanto, não posso alterar o sshd_config para definir o umask para o servidor SFTP. SSH OpenSSH_5.1p1 instalado Debian-6ubuntu2 <necessário OpenSSH 5.4p1. Então aqui vão as perguntas.
1. PRECISO REINICIAR AS ALTERAÇÕES DO PAM PARA EFETUAR O EFEITO?
Vamos começar com isso. Havia tantos arquivos envolvidos e eu não conseguia descobrir o que afeta e o que não afeta as coisas, também porque eu não sabia se precisava ou não reiniciar o sistema inteiro para que as alterações no PAM entrassem em vigor. Fiz isso depois de não ver os resultados esperados, mas isso é realmente necessário? Ou posso simplesmente sair do servidor e efetuar login novamente, e as novas políticas do PAM devem ser eficazes? Ou existe algum programa 'PAM' para recarregar?
2. HÁ UM ÚNICO ARQUIVO PARA MUDAR QUE AFETA TODOS OS USUÁRIOS EM TODAS AS SESSÕES?
Então, acabei alterando MUITOS arquivos, ao ler MUITAS coisas diferentes. Acabei definindo o umask nos seguintes arquivos:
~/.profile -> umask=0002
~/.bashrc -> umask=0002
/etc/profile -> umask=0002
/etc/pam.d/common-session -> umask=0002
/etc/pam.d/sshd -> umask=0002
/etc/pam.d/login -> umask=0002
Quero que essa alteração se aplique a todos os usuários, para que algum tipo de alteração em todo o sistema seja melhor. Isso pode ser alcançado?
3. Afinal, essa coisa incomoda, funciona?
Então, depois de alterar umask para 0002 em todos os locais possíveis, eu executo testes.
------------ SCP -----------
TESTE 1:
scp testfile (which has 777 permissions for testing purposes) server:/home/
testfile 100% 4 0.0KB/s 00:00
Vamos verificar as permissões:
user@server:/home$ ls -l
total 4
-rwx--x--x 1 user uploaders 4 2011-02-05 17:59 testfile (711)
UPDATE: corrigido definindo SOMENTE umask em pam.d / common-sessions (veja comentários)
--------- SSH ------------
TESTE 2:
ssh server
user@server:/home$ touch anotherfile
user@server:/home$ ls -l
total 4
-rw-rw-r-- 1 user uploaders 0 2011-02-05 18:03 anotherfile (664)
-------- SFTP -----------
Nautilus: sftp: // servidor / home /
Copie e cole o novo arquivo do cliente para o servidor (777 no cliente)
TESTE 3:
user@server:/home$ ls -l
total 4
-rwxrwxrwx 1 user uploaders 3 2011-02-05 18:05 newfile (777)
Crie um novo arquivo através do Nautilus. Verifique as permissões de arquivo no terminal:
TESTE 4:
user@server:/home$ ls -l
total 4
-rw------- 1 user uploaders 0 2011-02-05 18:06 newfile (600)
Quero dizer ... O que aconteceu aqui ?! Nós deve obter 644 cada vez. Em vez disso, recebo 711, 777, 600 e depois uma vez 644. E a 644 só é alcançada ao criar um novo arquivo em branco através do SSH, que é o cenário menos provável.
Estou perguntando, afinal, umask / pam funciona?
UPDATE: correção do teste 4, configurando SOMENTE umask em pam.d / common-sessions (veja comentários)
4. O QUE SIGNIFICA UMASK SSHFS?
Às vezes, montamos um servidor localmente, usando sshfs. Muito útil. Mas, novamente, temos problemas de permissão.
Aqui está como montamos:
sshfs -o idmap=user -o umask=0113 user@server:/home/ /mnt
NOTA: usamos umask = 113 porque, aparentemente, o sshfs começa em 777 em vez de 666, portanto, com 113, obtemos 664, que é a permissão de arquivo desejada.
Mas o que acontece agora é que vemos todos os arquivos e diretórios como se fossem 664. Navegamos no Nautilus para / mnt e:
- Clique com o botão direito do mouse -> Novo arquivo (novo arquivo) --- TESTE 5
- Clique com o botão direito do mouse -> Nova Pasta (nova pasta) --- TESTE 6
- Copie e cole um arquivo 777 do nosso cliente local --- TESTE 7
Então, vamos verificar na linha de comando:
user@client:/mnt$ ls -l
total 8
-rw-rw-r-- 1 user 1007 3 Feb 5 18:05 copyfile (664)
-rw-rw-r-- 1 user 1007 0 Feb 5 18:15 newfile (664)
drw-rw-r-- 1 user 1007 4096 Feb 5 18:15 newfolder (664)
Mas ei, vamos verificar esta mesma pasta no lado do servidor:
user@server:/home$ ls -l
total 8
-rwxrwxrwx 1 user uploaders 3 2011-02-05 18:05 copyfile (777)
-rw------- 1 user uploaders 0 2011-02-05 18:15 newfile (600)
drwx--x--x 2 user uploaders 4096 2011-02-05 18:15 newfolder (711)
O que?! As permissões de arquivo REAL são muito diferentes das que vemos no Nautilus. Então, essa umask no sshfs apenas cria um 'filtro' que mostra permissões irreais de arquivo? E eu tentei abrir um arquivo de outro usuário, mas do mesmo grupo que tinha 600 permissões reais, mas 644 permissões 'falsas', e eu ainda não conseguia ler isso, então, de que serve esse filtro?
5. O UMASK É TUDO SOBRE ARQUIVOS. MAS E OS DIRETÓRIOS?
Nos meus testes, vejo que o umask que está sendo aplicado também influencia de alguma forma as permissões do diretório. No entanto, quero que meus arquivos sejam 664 (002) e meus diretórios 771 (006). Portanto, é possível ter uma umask diferente para diretórios?
6. Talvez o UMASK / PAM esteja REALMENTE FRESCO, MAS UBUNTU É APENAS ERRADO?
Por um lado, li tópicos de pessoas que obtiveram sucesso com o PAM / UMASK e Ubuntu. Por outro lado, eu encontrei muitos erros mais antigos e mais recentes sobre o umask / PAM / fuse no Ubuntu:
- https://bugs.launchpad.net/ubuntu/+source/gdm/+bug/241198
- https://bugs.launchpad.net/ubuntu/+source/fuse/+bug/239792
- https://bugs.launchpad.net/ubuntu/+source/pam/+bug/253096
- https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/549172
- http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=314796
Então, eu não sei mais no que acreditar. Devo simplesmente desistir? A ACL resolveria todos os meus problemas? Ou tenho novamente problemas ao usar o Ubuntu?
Uma palavra de cautela com backups usando tar. As distribuições do Red Hat / Centos suportam acls no programa tar, mas o Ubuntu não suporta acls durante o backup. Isso significa que todas as ACLs serão perdidas quando você criar um backup.
Estou muito disposto a atualizar para o Ubuntu 10.04 se isso resolver meus problemas também, mas primeiro quero entender o que está acontecendo.