"루트" 액세스가 필요한 회사에서 만든 도구를 사용해야 했습니다.
더 나쁜 점은 GUI 응용 프로그램이라는 것입니다. 평소라면 이런 짓은 안 하겠지만 선택의 여지가 별로 없었어요.
현재, 나는 사용하고 있습니다
xhost + && sudo java -jar servermanager.jar && xhost -
응용 프로그램을 실행합니다. 그러나 이는 Java가 실행 중일 때 X-Server에 대한 액세스 제어가 비활성화됨을 의미합니다.
xhost -
물론 이것이 가장 심각한 보안 문제는 아닐 수도 있지만, 응용 프로그램이 X 연결을 열자마자 문제가 발생하도록 시간을 측정하는 더 좋은 방법이 있는지 여전히 궁금합니다 .
핵심요약: GUI 창이 열리자마자 명령을 실행하는 방법은 무엇입니까?
답변1
로컬 X 서버
X 서버가 로컬인 경우(예: TCP가 아닌 Unix 소켓 연결) 더 세분화하여 특정 로컬 사용자만 허용할 수 있습니다.
xhost +SI:localuser:root
X SSH를 통해
그렇지 않은 경우 루트에 대한 직접 SSH 액세스를 허용하고(공개 키 인증 사용) 이 보안 연결을 통해 X를 전달하고 sudo 호출 대신 이를 사용하는 것을 고려할 수 있습니다.
ssh -X -f root@localhost java -jar servermanager.jar
.Xauthority 및 sudo
루트가 파일을 읽을 수 있다고 가정하면 (아마도 홈 디렉터리가 NFS에 있지 않는 한) sudo에서 실행하는 명령 환경에 1을 .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 루프 이후에 항상 작은 값을 유지할 수 있습니다.