user1을 사용하여 UNIX 환경에 로그인했으며 이 환경에는 user1이 해당 경로에 액세스할 수 없기 때문에 다른 경로에서 다른 사용자(예: user2)와 함께 수행해야 하는 일부 작업이 포함된 쉘 스크립트가 있습니다. .
작업을 수행하기 위해 쉘 스크립트에서 user1에서 user2로 전환하고 작업을 완료한 후 user2에서 user1로 다시 전환하고 싶습니다.
이 시나리오를 구현하는 방법을 제안해 주세요.
Java를 사용하여 쉘 스크립트를 호출하고 있으므로 다른 방법이 있으면 제안하십시오.
답변1
sudo
user2가 user1로서 필요한 스크립트를 실행하도록 허용하여 원하는 것을 얻을 수 있습니다 .오직스크립트가 실행되어 시스템 보안이 보호됩니다(user2는 user1과 같은 셸을 사용할 수 없습니다). 다음 방법으로 이를 수행할 수 있습니다.
sudo visudo
(Sudo 구성 파일 편집)- 파일 끝에 다음을 추가하세요.
user2 ALL = (user1) NOPASSWD:/path/to/your/script.sh
- 파일을 저장하고 닫습니다.
이제 user2로 쉘을 열면 sudo -u user1 /path/to/your/script.sh
user1로 실행할 수 있습니다. java에서도 동일한 명령을 사용할 수 있습니다. user1: sudo -u user1 bash
이 거부되므로 user2가 셸을 실행할 수 없으므로 보안이 유지됩니다 .
하지만, user1과 user2가 공유할 그룹을 만들고 해당 그룹을 사용하여 파일에 대한 실행 권한을 관리하면 더 깔끔한 솔루션을 얻을 수 있다고 생각합니다. 요구 사항에 따라 chmod 4700 /path/to/your/script.sh
더 많은 사용자가 user1로 스크립트를 실행할 것으로 예상되는 경우 ACL 또는 setuid 비트를 고려할 수도 있습니다.
답변2
user1에게는 비밀번호 없는 sudo 액세스 권한이 없다고 가정합니다. 그렇죠? 그렇다면 runuser 명령을 사용할 수 있습니다.
runuser -l user2 -c 'whoami'
sudo 권한이 설정되어 있으면 su/sudo만 사용할 수 있습니다.
su - user2 -c 'whoami'
그러나 나는 당신이 비밀번호 없는 sudo를 가지고 있지 않거나 아마도 user2의 비밀번호를 가지고 있지 않다고 가정하고 있습니다. 더 까다로울 수 있습니다. user1에 대한 RSA 키 쌍을 생성한 다음 user2의 $HOME/.ssh/authorized_keys 파일에 id_rsa.pub 키를 추가하여 RSA 공개 키 인증을 활성화한 다음 SSH를 사용하여 암호 작업 없이 이 작업을 수행할 수 있습니다.
사용자 1로 다음 명령을 실행하십시오: ssh keygen 메시지가 나타나면 Enter를 누르세요. 그런 다음 다음 명령을 실행하여 키를 자동으로 추가합니다(수동으로 수행할 수 있음). 이 명령을 사용하는 경우 User2의 비밀번호는 처음에만 필요합니다.
ssh-copy-id -i $HOME/.ssh/id_rsa.pub user2@hostname
이것이 작동하면 user1로 로그인한 다음 ssh user2@localhost를 실행하여 비밀번호 없이 user2로 로그인할 수 있어야 합니다. 서버의 /etc/ssh/sshd_config에 공개 키 인증이 활성화되어 있는지 확인하세요.
그런 다음 원격으로 명령을 실행하려면 다음과 같은 명령을 실행할 수 있습니다.
ssh user2@localhost "원격 명령 1; 원격 명령 2"