Eu estive procurando uma maneira de configurar o OpenSSH umask para 0027
de uma forma consistente em todos os tipos de conexão.
Por tipos de conexão que estou me referindo:
- sftp
- scp
- ssh hostname
- programa ssh hostname
A diferença entre 3. e 4. é que o primeiro inicia um shell que geralmente lê as /etc/profile
informações enquanto o segundo não.
Além disso, lendo este post , tomei conhecimento da opção -u que está presente nas versões mais recentes do OpenSSH. No entanto, isso não funciona.
Devo também acrescentar que /etc/profile
agora inclui umask 0027
.
Indo ponto a ponto:
- sftp - Definir
-u 0027
emsshd_config
como mencionado aqui , não é suficiente.
Se eu não definir esse parâmetro, o sftp usará por padrão umask 0022
. Isso significa que se eu tiver os dois arquivos:
-rwxrwxrwx 1 user user 0 2011-01-29 02:04 execute
-rw-rw-rw- 1 user user 0 2011-01-29 02:04 read-write
Quando uso o sftp para colocá-los na máquina de destino, recebo:
-rwxr-xr-x 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
No entanto, quando eu definir -u 0027
sobre sshd_config
da máquina de destino eu realmente começar:
-rwxr--r-- 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
o que não é esperado, já que deveria ser:
-rwxr-x--- 1 user user 0 2011-01-29 02:04 execute
-rw-r----- 1 user user 0 2011-01-29 02:04 read-write
Alguém entende por que isso acontece?
scp - Independentemente do que está configurado para sftp , as permissões são sempre
umask 0022
. Atualmente, não tenho idéia de como alterar isso.ssh hostname - não há problema aqui, pois o shell lê
/etc/profile
por padrão, o que significaumask 0027
na configuração atual.programa ssh hostname - mesma situação que scp .
Em suma, definir umask sftp
altera o resultado, mas não como deveria, ssh hostname
funciona como a leitura esperada /etc/profile
e ambos scp
e ssh hostname program
parece ter umask 0022
codificado em algum lugar.
Qualquer visão sobre qualquer um dos pontos acima é bem-vinda.
EDIT: Eu gostaria de evitar patches que exigem compilação manual do openssh. O sistema está executando o Ubuntu Server 10.04.01 (lucid) LTS com openssh
pacotes da maverick.
Resposta: Conforme indicado por poige, usar pam_umask fez o truque.
As mudanças exatas foram:
Linhas adicionadas a /etc/pam.d/sshd
:
# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session optional pam_umask.so umask=0027
Além disso, para afetar todos os shells de login, independentemente de serem de origem /etc/profile
ou não, as mesmas linhas também foram adicionadas /etc/pam.d/login
.
Edição : Depois de alguns dos comentários retestei este problema.
Pelo menos no Ubuntu (onde eu testei), parece que se o usuário tiver um umask diferente definido nos arquivos init do shell (.bashrc, .zshrc, ...), o umask do PAM será ignorado e o usuário definido como umask. Alterações no não /etc/profile
afetaram o resultado, a menos que o usuário explique explicitamente essas alterações nos arquivos init.
Não está claro neste momento se esse comportamento ocorre em todas as distros.
UsePAM yes
no seu sshd_config?/etc/profile
. Algo comoalias umask=/bin/true
Respostas:
Eu posso sugerir tentar duas coisas:
fonte
sudo
ou nãosudo su
.Aqui está uma solução que permitirá que você faça o que deseja, por usuário. Ele usa apenas
sshd
recursos nativos e não requer mexer com patches mantidos localmente. Esta solução tira proveito doForceCommand
comportamento do sshd para inserir um script de configuração do ambiente em todas as conexões ssh e, em seguida, execute o comando original.Primeiro, crie um script em algum lugar do seu sistema com o seguinte conteúdo:
Para os fins deste exemplo, assumirei que você chamou isso
/usr/bin/umask-wrapper
.Agora, você tem algumas opções para configurar isso. Se você deseja que essa seja uma configuração obrigatória para todos os usuários (o que parece um pouco improvável), você pode modificar sua configuração sshd para incluir o seguinte:
Se você deseja que isso se aplique apenas a alguns usuários, você pode usar um
Match
bloco (isso ocorre no final do seusshd_config
):Se você deseja que esse seja um comportamento controlável pelo usuário, você pode usar a
command=
opção em umauthorized_key
arquivo para selecionar esse comportamento para chaves específicas. Por exemplo, ao testar isso, adicionei uma entrada ao meuauthorized_keys
arquivo que se parece com isso:E aqui estão alguns resultados do meu teste:
Usando
ssh
sem comando:Usando
ssh
com um comando:Usando
scp
:Usando
sftp
:E aí está. Acredito que esse é o comportamento que você estava procurando. Se você tiver alguma dúvida sobre esta solução, ficarei feliz em fornecer detalhes adicionais.
fonte
command=
é realmente um recurso interessante do ssh.Adotei uma abordagem um pouco diferente para centralizar a configuração.
Isso foi adicionado a
/etc/pam.d/common-session
:Isso foi modificado em
/etc/login.defs
:fonte
Consegui que o pam_umask trabalhasse com ssh, mas não com scp ou sftp.
O método wrapper também não faz nada para sftp ou scp. Não sei se 027 é um bom exemplo, já que a maioria das distros já possui umask configurada para isso. Tente com 002 e veja se isso funciona.
fonte
Os programas que não definem suas próprias umask herdam a umask do aplicativo que o iniciou. Pare o sshd completamente, defina seu umask como 0027 e inicie-o novamente. (Você pode adicionar o comando umask no script init para futuras reinicializações.)
Testado para trabalhar com scp.
fonte
umask 0027
(se eles lerem/etc/profile
), mas reiniciar o ssh não afeta o scp nem o ssh.Se
pam_umask
isso não parece afetar suas sessões de SFTP, verifique seUsePam
está definidoYes
no/etc/ssh/sshd_config
arquivo.Se você desativou a autenticação por senha e
UsePam
foi definido ou o padrãoNo
. Você pode definirChallengeResponseAuthentication No
osshd_config
arquivo porque, caso contrário, poderá ativar inadvertidamente uma autenticação de senha através desse sistema.fonte
Uma observação adicionada à resposta do usuário188737 acima:
Isso pode ser desnecessário, mas se você não estiver usando o pacote openssh-server e tiver compilado manualmente o OpenSSH, certifique-se de "Ativar suporte ao PAM" passando o
--with-pam
sinalizador de configuração.Caso contrário,
UsePAM=yes
em sshd_config, mais as alterações/etc/pam.d/*
serão efetivamente ignoradassshd
.Finalmente me ocorreu por que nenhuma das soluções PAM recomendadas estava tendo algum teste de afetação por meio de conexões SFTP não interativas ...
fonte
Como umask é herdada do processo pai, em um sistema Slackware usado
/etc/rc.d/rc.sshd
para iniciar / parar / reiniciar o sshd, você pode simplesmente colocarumask 0027
uma linha sozinha diretamente acima de "sshd_start" ou "sshd_restart" ou, alternativamente, a qualquer momento antes do A seção principal de execução começa, em/etc/rc.d/rc.sshd
:Ou, como alternativa, na parte superior do arquivo:
fonte
Acabei de testar uma possível melhoria nas opções de larsks sshd_config no solaris 11
Configure um grupo com os usuários a serem gerenciados e mova o script para o próprio arquivo de configuração. No meu caso, eu queria definir o umask como 0002.
a configuração resultante se torna ....
fonte
Estou enfrentando problemas com esse problema, especificamente com permissões de arquivo após copiar um arquivo usando o scp , e finalmente me ocorreu simplesmente usar o ssh para alterar as permissões após a cópia.
Aqui está a solução:
localhost$ scp filename remotehost:umask-test/filename
localhost$ ssh remotehost "chmod go+r umask-test/filename"
O melhor de tudo é que nenhum acesso root é necessário para efetivar esta solução.
fonte