注:この投稿の中間点付近の「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を実行することでした。
su - username
はsu
によって解釈され、「インタラクティブなログインシェルとして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では最初のフォームのみがエラーなしで機能します。
sux
やSudo
などのバリアントを無視すると、少なくとも3つあります[1] Linux上のsu
のバージョン:coreutils
、util-linux
およびshadow-utils
は、Debianの出典です。後者のマンページは指摘しています:
このバージョンのsuには多くのコンパイルオプションがあり、特定のサイトで使用されているのは一部のみです。
debianにはフラグold_debian_behavior
が付いています。他のバージョンには、同様のコンパイル時/実行時オプションがある場合があります。変動のもう1つの理由は、いくつかの debate[2] この方法でsu
を使用して特権を削除する必要があるかどうか、したがってTIOCSTI
バグがまったくバグであるかどうか(Redhatはもともと クローズされた "WONTFIX" ) 。
[1]:編集:SimplePAMApps
とhardened-shadow
を追加します。
[2]:Solar Designerには そこに(いくつかの(古い)意見) があるので、一読に値すると思います。
/ dev/pts *の所有権とアクセス許可、または/ dev/ptsデバイスに関連するudevの新しい構成を確認しましたが、アップグレードプロセス中に置き換えられませんでした。
Rootとして実行することで、syscalがエラーを生成しているものを見つけることもできます。
strace -f su - username 2>stderr.log