
회사에서 '루트' 권한이 필요한 자체 제작 도구를 사용해야 합니다.
설상가상으로 GUI 응용 프로그램입니다. 일반적으로 나는 그런 일을 실행하지 않지만 선택의 여지가 많지 않습니다.
현재 내가 사용하고 있는 것은
xhost + && sudo java -jar servermanager.jar && xhost -
응용 프로그램을 실행합니다. 그러나 이는 Java가 실행되는 동안 X-Server에 대한 액세스 제어가 비활성화됨을 의미합니다.
xhost -
물론 이것이 최악의 보안 문제는 아닐 수도 있지만, 응용 프로그램이 X 연결을 연 후 즉시 실행할 수 있는 더 나은 시간 제한 방법이 있는지 궁금합니다 .
핵심요약: GUI 창이 열린 직후에 어떻게 명령을 실행할 수 있나요?
답변1
로컬 X 서버
X 서버가 로컬인 경우(예: TCP가 아닌 Unix 소켓 연결) 더 세분화하여 특정 로컬 사용자만 허용할 수 있습니다.
xhost +SI:localuser:root
SSH를 통한 X
그렇지 않은 경우에는 이 보안 연결을 통해 X가 전달된 상태에서 루트에 직접 SSH를 허용하고(공개 키 인증 사용) 이를 sudo 호출 대신 사용하는 것을 고려할 수 있습니다.
ssh -X -f root@localhost java -jar servermanager.jar
.Xauthority 및 sudo
루트가 파일을 읽을 수 있다고 가정하면 (홈 디렉토리가 NFS에 있지 않는 한) sudo 내에서 실행되는 명령 환경에 ¹를 .Xauthority
넣으면 연결이 허용된다는 것을 알 수 있습니다 .XAUTHORITY=$HOME/.Xauthority
XAUTHORITY="${XAUTHORITY-$HOME/.Xauthority}" \
sudo -E java -jar servermanager.jar
sudo가 전달을 허용하지 않도록 구성된 경우 XAUTHORITY
토큰을 명시적으로 내보낼 수 있습니다.
.Xauthority 및 xauth
xauth extract - $DISPLAY | sudo bash -c \
"xauth merge - && java -jar servermanager.jar"
¹ $HOME
여기에는 루트가 아닌 사용자의 홈 디렉터리가 있습니다.
답변2
~/.bash_aliases에 다음을 넣었습니다.
smg(){
xhost +
sudo echo "Starting servermanager" #To get sudo prompt in fg
sudo java -jar ~/downloads/servermanager.jar 2>/dev/null &
sleep 5
xhost -
}
답변3
pgrep이 설치되어 있는 경우 다음과 같이 보다 결정적으로 만들 수 있습니다.
smg(){
xhost +
sudo echo "Starting servermanager" #To get sudo prompt in fg
sudo java -jar ~/downloads/servermanager.jar 2>/dev/null &
while ! pgrep -l servermanager.jar > /dev/null ; do :; done
xhost -
}
... 최종 프로세스 이름이 무엇인지에 따라 다릅니다. 너무 빨리 실행되는 것으로 판명되면 sleep
while 루프 이후에 항상 작은 값을 유지할 수 있습니다.