Como obter controle total de umask / PAM / Permissions?

11

// 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:

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.

Comunidade
fonte

Respostas:

3

Muitas coisas podem estar acontecendo aqui.

Primeiras reflexões:

  • sim, as alterações do pam.d entram em vigor imediatamente
  • /etc/pam.d/common-session é o melhor lugar para definir um padrão umask
  • qualquer pam.d umask seria substituído por qualquer entrada .bashrc,
    mas .bashrcsó será lido em determinadas circunstâncias (shell interativo e sem login)
  • testfile (711) é muito estranho
    • como é /homemontado e você está usando ACLs?
      (por exemplo, o que imprimir ls -ld /homee getfacl /homeimprimir?)
    • fez testfilejá existem antes que você fez a cópia, porque scpnão vai alterar as permissões em um arquivo que já existia (a menos que você use o -pflag)
  • Sabe-se que o Nautilus cria arquivos de uma maneira diferente, não sabe por que ou quais são as regras
  • umask=0113 provavelmente causará problemas
  • o servidor e o cliente estão executando o mesmo sistema operacional?
    por exemplo, se o cliente tiver ACLs ativadas ou for Cygwin, o comportamento poderá ser diferente
  • a melhor maneira de forçar permissões sãs é usar ACLs padrão, exatamente porque, como você descobriu, umaskpode ser substituído pelo usuário em .bashrce .bash_profile.

Atualizar:

  • umask=0113 para sshfs está errado.
    1. Tente montar sem especificar um umask
    2. Crie um novo arquivo dentro do ponto de montagem usando touch.
    3. Você deve ver que só fica -rw-r--r--, por exemplo , sem xbits
    4. Ao mascarar xbits, você pode quebrar diretórios
      e os compiladores podem não conseguir criar arquivos executáveis ​​corretamente

Gambiarra:

Se não pudermos pensar em algo melhor, você pode usar famou gaminobservar novos arquivos sendo criados e corrigir as permissões neles, ou mesmo apenas um script que é executado periodicamente e define as permissões em todos os arquivos.

Mikel
fonte
Obrigado! OK, removi TODAS as configurações do umask, exceto pam.d / common-sessions. Isso resolveu vários problemas! Teste 1 (SCP) e Teste 4 (novo arquivo no Nautilus) agora funcionam bem. Agora os obstáculos estão copiando um arquivo com as permissões do Nautilus para o servidor (Teste 3 - ainda 777 em vez de 664). E os problemas de diretório. O servidor e o cliente são Ubuntu (9.10 vs 10.10), e nenhuma ACLs adicional está ativada.
Parece que copiar com o Nautilus está preservando permissões como cp -pou scp -pfaria.
Mikel
Alguma idéia de como mudar isso?
Qual comportamento você quer? Você pode definir permissões padrão para novos arquivos usando ACLs padrão. O Nautilus respeitará a ACL padrão. Consulte vanemery.com/Linux/ACL/linux-acl.html para obter uma visão geral e suse.de/~agruen/acl/linux-acls/online para obter todos os detalhes.
Mikel
Observe que as ACLs padrão não impõem um conjunto máximo de permissões, elas apenas tornam essas permissões o padrão. cp -p, scp -pe a cópia via Nautilus ainda tentará tornar as permissões da cópia iguais às do arquivo que está sendo copiado.
Mikel
0

Isso não está relacionado ao PAM / umask, mas pode ser útil para você.

Se você definir um diretório, todos os arquivos e diretórios criados nele serão automaticamente atribuídos ao seu grupo.

root@ricarda ~ # mkdir hello      
root@ricarda ~ # chown :users hello 
root@ricarda ~ # chmod g+s hello
root@ricarda ~ # ls -l |grep hello 
drwxr-sr-x. 2 root users  4096 Feb  7 04:05 hello
root@ricarda ~ # touch hello/some_file
root@ricarda ~ # mkdir hello/some_dir
root@ricarda ~ # ls -l hello/       
total 4
drwxr-sr-x. 2 root users 4096 Feb  7 04:16 some_dir
-rw-r--r--. 1 root users    0 Feb  7 04:06 some_file
k0001
fonte
Obrigado! Eu não sabia sobre isso. Não resolve os problemas de permissão, mas é realmente útil!
0

As ACLs devem funcionar bem para você.

Defina uma ACL padrão em todas as pastas do grupo, que será herdada por todos os futuros arquivos e diretórios.

Algo como setfacl -m d:g:uploaders:rwxdeve funcionar.

Para corrigir suas permissões existentes:

find /shared/folder -type d -exec setfacl -m d:g:uploaders:rwx {} \;
find /shared/folder -type f -exec setfacl -m g:uploaders:rw {} \;

Parece que, se "preservar" for definido quando um arquivo é copiado, a ACL padrão não funcionará. Nesse caso, só posso sugerir a execução dos comandos find no cron ou o monitoramento do sistema de arquivos em busca de alterações.

Steven
fonte