Como posso definir o caminho para usuários não interativos autenticados usando LDAP?

Como posso definir o caminho para usuários não interativos autenticados usando LDAP?

Em um Mac executando o OSX 10.7.5, preciso definir o PATH para usuários não interativos que se conectam via ssh e são autenticados usando LDAP. É a mesma pergunta que foi feita (e respondida) aqui:

https://serverfault.com/questions/139426/updating-the-path-for-running-an-command-through-ssh-with-ldap-user-account

mas não estou familiarizado o suficiente com PAM ou LDAP para entender completamente a resposta.

Parece que preciso:

add a line to /etc/pam.d/sshd saying "auth      required    pam_env.so"
create a file named /etc/security/pam_env.conf

mas a documentação do pam_env.conf é realmente confusa e não sei dizer se preciso de um valor DEFAULT ou OVERRIDE.

Estou certo de que essas são as etapas corretas? Qual é a linha que devo colocar em pam_env.conf?

Obrigado, Chris

ps Tentei colocar a linha "auth required pam_env.so debug" em /etc/pam.d/sshd e não estou vendo nada em /var/log/system.log que pareça vir de pam_env.so. Também criei /etc/security/pam_env.conf e coloquei nele a linha "PATH DEFAULT=/usr/fred OVERRIDE=/usr/george" e não teve nenhum efeito visível no PATH.

pps Se eu executar:

ssh USER@MACHINE echo \$SHELL

Diz /bin/bash. Se eu entrar no MACHINE e adicionar esta linha ao /etc/bashrc:

export Test=Fred

e voltar para minha máquina e executar:

ssh USER@MACHINE echo \$Test

não retorna nada. Quando faço logon dessa maneira usando LDAP, ele não executa /etc/bashrc.

ppps Algumas informações adicionais que podem ser importantes: Em MACHINE não existe nenhum usuário local chamado USER. MACHINE foi configurado para fazer autenticação LDAP, então quando eu ssh USER@MACHINE, meu $HOME é definido como /Network/Servers/blah/blah/Users/USER. Se eu editar /Network/Servers/blah/blah/Users/USER/.bashrc para definir o PATH, funciona corretamente para mim, mas não é uma ótima solução porque significa que cada pessoa que deseja acessar este servidor deve editar seu rede .bashrc.

Responder1

Esta é uma modificação dehttps://askubuntu.com/questions/382485/ssh-how-to-force-execution-of-a-script-etc-sshrc-forcecommand-on.

Com o seguinte você pode forçar o fornecimento /etc/bashrcde todos os logins SSH, interativos ou não. Isso pode causar alguns problemas para os usuários que dependem de /etc/bashrcnão serem executados para logins não interativos, portanto, proceda com cautela (embora seja exatamente isso que você está pedindo, então provavelmente conhece as implicações).

Primeiro adicione ForceCommand /usr/local/bin/sshd_envsao /etc/sshd_config. Em seguida, coloque o seguinte em /usr/local/bin/sshd_envs:

#!/bin/bash

source /etc/bashrc

if [ -n "$SSH_ORIGINAL_COMMAND" ]; then
  eval $SSH_ORIGINAL_COMMAND
else
  exec $SHELL
fi

Quaisquer que sejam as configurações de ambiente que você colocar, /etc/bashrcentrarão no ambiente para cada login SSH.

Observe que o padrão /etc/bashrcpara OS/X será encerrado imediatamente após a avaliação das primeiras linhas (porque PS1 não está configurado para shells não interativos):

if [ -z "$PS1" ]; then
  return
fi

Portanto, comente essas linhas ou coloque tudo o que deseja que seja avaliado para seus logins SSH não interativos antes dessas linhas.

informação relacionada