web-dev-qa-db-ja.com

ログインシェルとしてsuの間に別のユーザーに「端末プロセスグループを設定できません」

注:この投稿の中間点付近の「EDIT」で始まる更新情報をお読みください-この問題の環境と背景が変更されました

ここには、Debian Testingリポジトリにサイドグレードすることに決めた、沼地の標準Debian 6.0インストールがあります。これを行うには、sources.listのSqueezeリポジトリへの参照を交換して、代わりにTestingリポジトリを使用します。

パッケージのインストールと再起動後、su-別のユーザーにしようとすると、次のエラーが表示されます。

root@skaia:~# su joebloggs -
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this Shell

-を省略した場合、これは発生しません。

ユーザーが正しくrootになることができることに注意してください。これは、rootから他のユーザーに切り替えて、-を使用してそのユーザーの環境を取得するときにのみ発生するようです。

ここではGoogleはほとんど役に立たない。私が見つけることができるのは、suxパッケージに関する2011年の参照のみです。これは、当面は修正されたようです。

これは、アップグレードエラーと非常によく似ており、適切な方法で適切なパッケージを調整することで修正できます。どこから始めればいいのかわからない-これを除けば、私のシステムは完全に正常に、期待どおりに動作します。

[〜#〜]編集[〜#〜]

これは、上記のように、Debianstableマシンで私に起こっています。今回はアップグレードも何もせず、ただ安定しているだけです。

うん、一年後。一体何が問題なのかはまだわかりません。

これは現在の状態です(あまり変わっていません)。

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this Shell
terraria@skaianet:~$ tty
/dev/pts/0
terraria@skaianet:~$ ls -l /dev/pts/0
crw--w---- 1 root root 136, 0 Oct 10 19:21 /dev/pts/0
terraria@skaianet:~$ ls -l /dev/pts/
crw--w---- 1 root root 136, 0 Oct 10 19:21 0
crw--w---- 1 root root 136, 2 Sep 22 17:47 2
crw--w---- 1 root root 136, 3 Sep 26 19:30 3
c--------- 1 root root   5, 2 Sep  7 10:50 ptmx

このように生成されたstrace:

root@skaianet:~$ strace -f -o tracelog su terraria -

..また、いくつかの紛らわしい動作が発生します。これらのメッセージはかなり混乱しています。一部の選択された行:

readlink("/proc/self/fd/0", "/dev/pts/0", 4095) = 10
#Error code 10? 
15503 open("/dev/tty", O_RDWR|O_NONBLOCK) = -1 ENXIO (No such device or address)
#Yes there is, and I can interact with it normally
15503 ioctl(255, TIOCGPGRP, [32561])    = -1 ENOTTY (Inappropriate ioctl for device)

私はリンクしました このstraceセッションの完全な出力 -私が行ったすべてはsuコマンドを実行し、その後すぐに端末からctrl + dを実行することでした。

16
Mikey T.K.
  • su - usernamesuによって解釈され、「インタラクティブなログインシェルとしてsernameのシェルを実行する」という意味になります。
  • su username -suによって解釈され、「次のnon-interactiveコマンドを実行する(-)」を意味しますsername "として
  • 後者は、次の理由でのみ機能しました。
    • suは、後続の引数をshに渡して解析します
    • sh-を使用して、「ログインシェルとして実行(/etc/profile、...を読み取る)」を意味します

しかし、あなたが本当に興味を持っているのは、なぜnon-interactiveなのかです。権限のある親と権限のない子の間で制御端末を共有すると、 " TTY pushback privilege escalation "、別名TIOCSTIバグに対して脆弱になるため、本当に必要でない限りsuデタッチsu username -形式を使用した場合、su制御端末が不要であると推測されます

制御端末を持つプロセスだけが、プロセスグループを操作する(ジョブ制御を行う)セッションリーダーを持つことができます。あなたが与えたトレースはbashで、セッションリーダーにはなれないことを検出しています。

あなたは言及します:

奇妙なことに、どちらのフォームもUbuntuとCentOS 6では正常に機能しますが、Vanilla Debianでは最初のフォームのみがエラーなしで機能します。

suxSudoなどのバリアントを無視すると、少なくとも3つあります[1] Linux上のsuのバージョン:coreutilsutil-linuxおよびshadow-utilsは、Debianの出典です。後者のマンページは指摘しています:

このバージョンのsuには多くのコンパイルオプションがあり、特定のサイトで使用されているのは一部のみです。

debianにはフラグold_debian_behaviorが付いています。他のバージョンには、同様のコンパイル時/実行時オプションがある場合があります。変動のもう1つの理由は、いくつかの debate[2] この方法でsuを使用して特権を削除する必要があるかどうか、したがってTIOCSTIバグがまったくバグであるかどうか(Redhatはもともと クローズされた "WONTFIX" ) 。

[1]:編集:SimplePAMAppshardened-shadowを追加します。

[2]:Solar Designerには そこに(いくつかの(古い)意見) があるので、一読に値すると思います。

34
ZakW

/ dev/pts *の所有権とアクセス許可、または/ dev/ptsデバイスに関連するudevの新しい構成を確認しましたが、アップグレードプロセス中に置き換えられませんでした。

Rootとして実行することで、syscalがエラーを生成しているものを見つけることもできます。

strace -f su - username 2>stderr.log
1