
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:
sudo visudo
(para editar o arquivo de configuração do sudo)- Adicione isto ao final do arquivo:
user2 ALL = (user1) NOPASSWD:/path/to/your/script.sh
- Salve e feche o arquivo.
Agora, se você abrir um shell como user2, poderá usá-lo sudo -u user1 /path/to/your/script.sh
para 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 bash
será 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"