Linuxで他のユーザーを介してグラフィカルアプリケーションを実行するためにxauthを使用する方法


48

通常のユーザーアカウントは、たとえばuser1です。私はuser1としてxにログインしている間に実行したいが、user1データへの読み取り/書き込みアクセスを防ぐ方法で、xアプリケーション用に別のuser2を作成しました。このアプリケーションを実行するために、user1からuser2にxauthとsudo / suを使用できると思いました。どうすればいいですか?xauthの構成方法がわかりません。

回答:


32

xauthを選択的に使用するに、user1として次を実行します。

xauth list|grep `uname -n`

これにより、ヘキサキー認証エントリが出力されます。これらのホストに関連付けられた異なるディスプレイを使用することもできます。

user2がディスプレイを設定すると(デフォルトのケースを想定):

DISPLAY=:0; export DISPLAY

次に実行します:

xauth add $DISPLAY . hexkey

$ DISPLAYの後、16進キーの前のドットに注意してください。

アクセスが不要になったら、user2で次を実行できます。

xauth remove $DISPLAY

問題1:user2には.Xauthority、user2のホームディレクトリにファイルがありません。問題2:どういうわけか、何らかの理由でsu、XAUTHORITYがuser1のファイルパスを保持した後、理解できません。ただし、そのファイルはuser2で読み取ることはできません。
オテウス

あなたが忘れてしまった、と思われる unset XAUTHORITY user2の下
SOCKETPAIR

あるhexkeyxauth addから同じコマンドxauth listまたは私はランダムな新しいものを作成する必要がありますか?
ボナンザ

大当たり:これはxauthリストからの1つの出力です。
ジョンエイケンベリー

1
これを行う別の方法は、「xauth extract-$ DISPLAY | sudo -iu steam xauth merge-」のようなものです。この場合、.profileでXAUTHORITYが設定されているため、「sudo -i」でその設定が正しく行われます。
ジョンエイケンベリー

12

私は私.zshrcのラインを入れて、export XAUTHORITY=~/.Xauthority今私は実行することができsudo -E xcommandます。多くのグーグルの後、私にとってこれが最も簡単な方法でした。


1
通常、デフォルトの設定では環境変数をsudoに渡すことができるため、この手順では通常、使用する必要はありませんsudo -E-Eほとんどのデフォルトのインストールでは使用は無効になっています)。sudoersXAUTHORITY
ガス

@Gussを必要 としません-E。渡すことができる変数として設定でき、Red HatまたはDebianが推奨しています。
ダニエルC.ソブラル

@ DanielC.Sobral-それは私が言ったことです:
グス

@ガスああ、ごめんなさい。私はあなたが書いたすべての文を何らかの形で反転させました。:-)
ダニエルC.ソブラル

zshを搭載したMac OS Xでは、まだうまく
いき

9

debianまたはubuntuを前提としています(Red Hat / SUSEでも同様です)。

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

良い答えを1つ、車輪を再発明する意味はありません。ちなみに、suxは主に上記の私の答えが示唆することを行います。もちろん、より強力で使いやすいです。
sleske 09

あなたは「SUX」は確かにあることを、注意してシンプルな ...あまりにも、シェルスクリプト
マーティンMächler

5
suxメンテナンスされていない(およびDebian / Ubuntuのリポジトリから削除されている):packages.qa.debian.org/s/sux/news/20140101T172633Z.html
ロブW

9

最初:使用しないでくださいxhost +。かなり安全ではありません(毛布許可/拒否)。

代わりに、X-Cookieメカニズムを使用します。

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

あるいは、suxインストール済みの場合は、それを使用します(ehempelの回答を参照)。

どちらの場合も、user2は.XauthorityのシークレットCookieを使用してXサーバーを認証し、他のユーザーはアクセスできません。

ノート:

  • ファイルの許可に応じて、他の方法で.Xauthorityをコピーする必要がある場合があります。
  • をコピーする代わりに、認証キーを抽出してコピー.Xauthorityすることもできxauthます(Randallの回答を参照)。.Xauthorityファイルに複数のキーがある場合、これはより選択的です。それ以外の場合は、好みの問題です。

ええ、私はそのマシン上のrootアクセス権を持っている
フィル・

これは、ルートアクセス経由でxauth Cookieを手動でコピーするだけです。Randallが(現在の)トップアンサーで説明しているように、xauthを使用する場合と違いはありませんが、「xauthリスト」が表示するすべてのCookieをコピーする点が異なります。したがって、これは、選択したCookieのみを追加する上位のxauth回答よりも安全性が低くなります。
ジョンエイケンベリー

@JohnEikenberry:確かに、これを指摘してくれてありがとう。回答を更新しました。
sleske

7

これにより、すべてのユーザーの問題が修正されます。

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

これは基本的に私がやったことであり、うまくいきます、ありがとう!
ガス

3

ルートとして:

xhost local:yourusername

yourusernameはユーザー名です:)

次に、suを実行します(ユーザーxclockがインストールされている場合は動作します)


2

これらは単なるハックです。

  • xauth +(安全でない)
  • ssh -X user2 @ localhost(ugい)

上記のsleskeには適切な解決策があると思います。


ssh -Xこれは非常にシンプルでエレガントなソリューションであり、非推奨/メンテナンスされていないgtk / kdeに依存しません(SUIDビットを使用してより多くのバイナリをインストールする必要があります...)。
ステファン

2

KDEで私にぴったりの何かを見つけました

kdesu -u username /path/to/program

のdebian部分でkde-cli-tools、inでは$PATHなくin /usr/lib/x86_64-linux-gnu/libexec/kf5/kdesu(明らかにアーキテクチャに依存)。
ステファン

0

suse / opensuseで作成されたこの方法:http ://www.novell.com/support/kb/doc.php?id=7003743

/etc/pam.d/suを変更し、オプション(太字)を追加するだけです:

セッションオプションpam_xauth.so systemuser = 1

その後、suなしで切り替えることができます-:

su user2

アプリをグラフィカルに実行します。


-1

GNOMEの場合(およびデスクトップ環境がまったくない場合、icewmでのみ使用します)gksu

gksu -u username program

「gksuは何年も廃止されました」:bugs.debian.org/cgi-bin/bugreport.cgi?bug
Stefan

@Stefanは、このDebianバグは、プログラム全体の特権を昇格するのは悪い考えであり、代わりに(PolicyKitを使用して)昇格した特権で最小限のヘルパーを実行するようにプログラムを修正する必要があることに注意します。この質問(と私の答え)は特権を減らすことです。これは完全に別のことであり、実際には良いアイデアです(たとえば、ランダムブラウジングには、デフォルトよりも低い特権のアカウントでfirefoxを実行するショートカットがあります)とgksuの(8)は、そのためには非常に細かいです- 「tは私のデータに触れる
マティヤNalis

それはすべて問題ありませんが、非推奨でメンテナンスされていないSUIDバイナリを使用するのは間違っています。この答えは過去に有用だったかもしれませんが、もう役に立ちません。
ステファン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.