como mudar para outro usuário com senha em shell script

como mudar para outro usuário com senha em shell script

Eu entrei no ambiente UNIX com o usuário1, neste ambiente eu tenho um script de shell que contém algumas tarefas que precisam ser executadas em um caminho diferente com um usuário diferente, digamos, usuário2, porque o usuário1 não tem acesso a esse caminho.

Quero mudar para o usuário2 do usuário1 no shell script para executar essa tarefa e, depois de concluir a tarefa, quero mudar novamente para o usuário1 do usuário2.

Por favor, sugira como posso alcançar esse cenário.

Estou chamando shell script com java, então se você tiver outra maneira, sugira

Responder1

Você pode conseguir o que deseja com sudo: você pode permitir que o usuário2 execute o script necessário como usuário1, permitindoapenasesse script seja executado, preservando assim a segurança do seu sistema (o usuário2 não pode se tornar desonesto e usar um shell como usuário1). Você pode fazer isso:

  1. sudo visudo(para editar o arquivo de configuração do sudo)
  2. Adicione isto ao final do arquivo:user2 ALL = (user1) NOPASSWD:/path/to/your/script.sh
  3. Salve e feche o arquivo.

Agora, se você abrir um shell como user2, poderá usá-lo sudo -u user1 /path/to/your/script.shpara executá-lo como user1; você pode usar esse mesmo comando do java. A segurança é preservada, pois o usuário2 não pode executar um shell, pois o usuário1: sudo -u user1 bashserá negado.

No entanto, acho que uma solução cada vez mais limpa seria alcançada apenas criando um grupo que o usuário1 e o usuário2 compartilharão e usando esse grupo para gerenciar a permissão de execução do arquivo. Dependendo de seus requisitos, você também pode considerar ACLs ou o bit setuid (por exemplo, chmod 4700 /path/to/your/script.sh) se espera-se que mais usuários executem esse script como usuário1.

Responder2

Presumo que o usuário1 não tenha acesso sudo sem senha, correto? Se isso acontecer, você pode usar o comando runuser.

runuser -l user2 -c 'whoami'

Você pode apenas usar su/sudo se tiver configurações de permissões do sudo.

su - user2 -c 'whoami'

No entanto, presumo que você não tenha o sudo sem senha e/ou talvez não tenha a senha do usuário2. Você pode ser complicado gerando um par de chaves RSA para o usuário1 e, em seguida, anexando a chave id_rsa.pub ao arquivo $HOME/.ssh/authorized_keys do usuário2 para ativar a autenticação de chave pública RSA e, em seguida, usar SSH para fazer isso sem uma senha.

Como user1 execute o seguinte; chave ssh Basta pressionar Enter através dos prompts Em seguida, execute o seguinte para adicionar a chave automaticamente (você pode fazer isso manualmente). Se você estiver usando este comando, precisará da senha do usuário2 apenas na primeira vez.

ssh-copy-id -i $HOME/.ssh/id_rsa.pub user2@hostname

Se isso funcionar, você poderá fazer login como usuário1 e executar ssh user2@localhost para fazer login como usuário2 sem uma senha. Certifique-se de que /etc/ssh/sshd_config no servidor tenha a autenticação PublicKey habilitada.

Então, para executar remotamente o comando, você pode executar algo como;

ssh user2@localhost "comando remoto1; comando remoto2"

informação relacionada