
나는 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에서도 이와 동일한 명령을 사용할 수 있습니다. user2는 user1: sudo -u user1 bash
이 거부되므로 쉘을 실행할 수 없으므로 보안이 유지됩니다 .
하지만, 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를 사용하여 암호 없이 이를 수행하면 까다로울 수 있습니다.
user1로 다음을 실행합니다. SSH 키 생성 프롬프트를 통해 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"