제 생각에는리디렉션root
사용 중(전환) 하나의 실행을 다른 사용자에게 실행합니다 sudo
.
예: 으로 sudo startup.sh
실행되지만 필요한 것은 다른 사용자(예: )로 실행된다는 것입니다 .startup.sh
root
tomcat
이 특정 실행에 대해서만 그들이 사용하는 방식으로 실행하기를 원합니다. 즉, sudo startup.sh
뒤에서(내부적으로) sudo su - tomcat startup.sh
사용자에게 사용하지 말라고 말할 수 없기 때문에 로 변경되기를 원합니다 sudo -su or sudo -u
.
이 목표를 어떻게 달성할 수 있나요?
답변1
요청한 작업을 쉽게 수행할 수 없습니다(예: sudo startup.sh
지정된 루트가 아닌 사용자로 실행). 그러나 다음 중 하나 또는 둘 다를 수행할 수 있습니다.
사용자에게
sudo -u tomcat /path/to/startup.sh
대신 사용하라고 지시sudo /path/to/startup.sh
하고 어쨌든 후자를 허용하지 않습니다.이것이 대상 사용자 계정이 되도록
sudoers
(기억 ) 에 이 행을 추가하십시오 . 특정 사용자만 대상 사용자로 스크립트를 실행할 수 있는 경우 첫 번째 사용자 목록을 사용자 목록으로 변경합니다.visudo
tomcat
ALL
ALL ALL=(tomcat) /path/to/startup.sh
스크립트를 실행
sudo
하고sudo -u root
스크립트를 비활성화합니다. #1(위)이 필요합니다. 여기가tomcat
일치하는지 확인하세요 .tomcat
sudoers
#!/bin/bash # targetUser=tomcat if [[ $UID -ne "$(id -u "$targetUser")" ]] then exec sudo -u "$targetUser" "$0" "$@" exit 1 fi # ...script continues but as the $targetUser...
이를 통해 사람들은 해당 부분 에 대해 걱정하지 않고
/path/to/startup.sh
(또는startup.sh
에 있더라도 ) 실행할 수 있습니다 .$PATH
sudo
답변2
sudo
스위치 와 함께 사용할 수 있습니다 -u
.
예:
sudo -u tomcat whoami