xauth를 사용하여 Linux에서 다른 사용자를 통해 그래픽 응용 프로그램을 실행하는 방법


48

내 일반 사용자 계정은 user1입니다. x에 user1으로 로그인하는 동안 실행하고 싶지만 user1 데이터에 대한 읽기 / 쓰기 액세스를 방지하는 일부 x 응용 프로그램에 대해 별도의 user2를 만들었습니다. 이 응용 프로그램을 실행하기 위해 user1의 user2에 xauth 및 sudo / su를 사용할 수 있다고 생각했습니다. 어떻게해야합니까? xauth를 구성하는 방법을 잘 모르겠습니다.

답변:


32

user1을 실행하면서 xauth를 선택적으로 사용하려면 :

xauth list|grep `uname -n`

이렇게하면 16 진수 인증 항목이 인쇄됩니다. 당신은 할 수 뿐만 아니라 해당 호스트와 관련된 다른 표시가 있습니다.

user2가 디스플레이를 설정하면 (기본 경우) :

DISPLAY=:0; export DISPLAY

그런 다음 다음을 실행하십시오.

xauth add $DISPLAY . hexkey

$ DISPLAY 다음과 16 진 키 앞의 점에 유의하십시오.

더 이상 액세스가 필요하지 않은 경우 user2로 다음을 실행할 수 있습니다.

xauth remove $DISPLAY

문제 1 : user2의 .Xauthority파일이 user2의 홈 디렉토리에 없습니다. 문제 2 : 어쨌든 어떤 이유로 든 suXAUTHORITY가 user1의 파일 경로를 보유하고 있다는 것을 이해하지 못합니다 . 그러나 user2는 해당 파일을 읽을 수 없습니다.
Otheus

unset XAUTHORITY user2
socketpair

hexkeyxauth add에서와 같은 명령 xauth list또는 내가 임의의 새로 작성해야합니까?
bonanza

bonanza : xauth 목록에서 출력 된 것입니다.
John Eikenberry

1
다른 방법은 "xauth extract-$ DISPLAY | sudo -iu steam xauth merge-"와 같은 방법입니다. 이 경우 XAUTHORITY가 .profile에 설정되어 있으므로 'sudo -i'가 해당 세트를 올바르게 가져옵니다.
John Eikenberry

12

나는 내 .zshrc라인을 export XAUTHORITY=~/.Xauthority넣었고 이제는 실행할 수 sudo -E xcommand있습니다. 많은 인터넷 검색 후 나에게 이것은 가장 쉬운 방법이었습니다.


1
일반적으로 기본 구성을 사용하면 환경 변수를 sudo로 전달할 수 있으므로이 절차에서는 일반적으로 사용하지 않아도됩니다 sudo -E( -E대부분의 기본 설치에서는 사용 이 비활성화되어 있음) . sudoersXAUTHORITY
거스

@Guss 필요 하지 않습니다 -E. 전달할 수있는 변수로 설정할 수 있으며 Red Hat 또는 Debian에서 제안합니다.
Daniel C. Sobral

@ DanielC.Sobral-내가 말한 것 :-)
Guss

@Guss 아 죄송합니다. 나는 당신이 쓴 모든 문장을 어떻게 든 뒤집 었습니다. :-)
Daniel C. Sobral

아직 zsh을 함께 맥 OS X에, 나를 위해 작동하지 않았다
스리 Sarnobat에게

9

데비안 또는 우분투를 가정하면 (Red Hat / SUSE에서 비슷해야 함).

sudo apt-get install sux
sux user -c 'command'

+1 좋은 답변, 바퀴를 재발견하는 데 아무런 의미가 없습니다. 또한 sux는 대부분 위의 대답이 제안하는 것을 수행합니다. 물론 더 강력하고 사용하기 쉽습니다.
sleske

당신은 'SUX가'실제로는 것을주의 할 수있다 간단한 역시 쉘 스크립트 ..
마틴 Mächler

5
sux유지 관리되지 않음 (데비안 / 우분투 리포지토리에서 제거됨) : packages.qa.debian.org/s/sux/news/20140101T172633Z.html
Rob W

9

첫째 :을 사용하지 말고 xhost +다소 안전 하지 않습니다 (담요 허용 / 거부).

대신 X-Cookie 메커니즘을 사용하십시오.

su user2
cp /home/user1/.Xauthority /home/user2/.Xauthority 
export DISPLAY=:0

또는 sux설치 한 경우이를 사용하십시오 (ehempel의 답변 참조).

두 경우 모두 user2는 .Xauthority의 비밀 쿠키를 사용하여 X 서버에 권한을 부여하고 다른 사람은 액세스 할 수 없습니다.

노트:

  • 파일 권한에 따라 다른 방법으로 .Xauthority를 ​​복사해야 할 수도 있습니다.
  • 복사하는 대신 인증 키를 추출하고 복사하는 데 .Xauthority사용할 수도 있습니다 xauth(랜달의 답변 참조). .Xauthority파일에 여러 개의 키가있는 경우이 키 가 더 선택적입니다. 그렇지 않으면 맛의 문제입니다.

그래, 나는 그 기계에 대한 루트 액세스 권한을 가지고있다
Phil

이것은 루트 액세스를 통해 xauth 쿠키를 수동으로 복사하는 것입니다. Randall이 (현재) 정답에서 설명하는 것처럼 'xauth list'가 표시하는 모든 쿠키를 복사한다는 점을 제외하고 xauth를 사용하는 것과 다르지 않습니다. 따라서 이것은 선택한 쿠키 만 추가하는 최상위 xauth 답변보다 안전하지 않습니다.
John Eikenberry

@ JohnEikenberry : 사실, 이것을 지적 해 주셔서 감사합니다. 내 답변을 업데이트했습니다.
sleske 2012

7

이렇게하면 모든 사용자의 문제가 해결됩니다.

cat <<EOF > /etc/profile.d/xauth.sh
#!/sbin/bash
export XAUTHORITY=~/.Xauthority
EOF

이것은 기본적으로 내가 한 일이며 훌륭하게 작동합니다. 감사합니다!
거스

3

루트로 :

xhost local:yourusername

여기서 yourusername은 사용자 이름입니다. :)

그런 다음 사용자 xclock가 설치되어 있으면 작동해야합니다.


2

이들은 단지 해킹입니다.

  • xauth + (비보안)
  • ssh -X user2 @ localhost (못생긴)

위의 썰매에는 올바른 해결책이 있다고 생각합니다.


ssh -X더 이상 사용되지 않거나 유지 관리되지 않은 gtk / kde에 의존하지 않는 매우 간단하고 우아한 솔루션입니다 (SUID 비트로 바이너리를 더 설치해야합니다 ...).
Stefan

2

나는 KDE에서 나에게 잘 맞는 것을 발견했다.

kdesu -u username /path/to/program

의 데비안 부분에 kde-cli-tools, 그리고에서 $PATH만에서 /usr/lib/x86_64-linux-gnu/libexec/kf5/kdesu(분명히 아키텍처에 따라 다름).
Stefan

0

이 방법은 suse / opensuse에서 이루어집니다. http://www.novell.com/support/kb/doc.php?id=7003743

옵션 (bold)을 추가하여 /etc/pam.d/su를 수정하기 만하면됩니다.

세션 옵션 pam_xauth.so systemuser = 1

그런 다음-없이 su로 전환 할 수 있습니다 :

su user2

앱을 그래픽으로 실행하십시오.


-1

그놈의 경우 (데스크톱 환경이 없으면 icewm에서만 사용합니다) gksu:

gksu -u username program

"gksu는 몇 년 동안 사용되지 않습니다": bugs.debian.org/cgi-bin/bugreport.cgi?bug=867236
Stefan

@Stefan 은이 데비안 버그는 전체 프로그램에 대한 권한을 높이는 것이 좋지 않다는 것을 전제로하고 대신 PolicyKit을 사용하여 높은 권한으로 최소한의 도우미를 실행하도록 프로그램을 수정해야 한다는 것을 전제로합니다 . 이 질문 (그리고 내 대답)은 권한을 줄이는 것에 관한 것입니다. 이것은 또 다른 것이며 실제로 좋은 생각입니다 (예 : 무작위 탐색의 경우 기본 계정보다 권한이 적은 계정으로 firefox를 실행하는 바로 가기가 있습니다. 내 데이터를 건드리지 마십시오-그리고 gksu (8)는 꽤 괜찮습니다)
Matija Nalis

괜찮지 만 사용되지 않고 유지 관리되지 않은 SUID 바이너리를 사용하는 것은 잘못되었습니다. 이 답변은 과거에는 유용했지만 더 이상 유용하지 않습니다.
Stefan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.