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


16

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

ここに沼地の標準Debian 6.0インストールがあり、Debianテストリポジトリにサイドグレードすることにしました。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はここではほとんど役に立ちません。私が見つけることができるのは、2011年のsuxパッケージに関する参考文献だけです。これは、その間に修正されたようです。

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

編集

上記のように、Debianの安定したマシンでこれが起こっています。今回はアップグレードも何もありません。まっすぐ安定しています。

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

現在は次のようになっています(変更はほとんどありません)。

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をターミナルから実行するだけでした。


1
こんにちはマイク。問題を発見しましたか?
ミルチャVutcovici

回答:


33
  • su - usernameは、suusernameのシェルを対話型ログインシェルとして実行する」ことを意味すると解釈されます
  • su username -su、「ユーザー名として次の非対話型コマンド(-)を実行する」ことを意味すると解釈されます
  • 後者はまったく機能しませんでした:
    • あなたsuに引数を末尾のパスsh解析のための
    • shかかる-「(読みログインシェルとして実行を意味します/etc/profile...、)」

しかし、あなたが本当に興味を持っているのは、なぜ非インタラクティブなのですか?特権親と非特権子の間で制御端末を共有すると、「TTYプッシュバック特権エスカレーション」(別名TIOCSTIバグ)に対して脆弱にsu なります。したがって、本当に必要な場合を除き、制御端末を切り離します。su username -フォームを使用したときsu 、制御端末は必要ないと推測されました。

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

あなたは言及します:

奇妙なことに、どちらの形式もUbuntuとCentOS 6で正常に動作しますが、Debianの場合は最初の形式のみがエラーなしで動作します。

以下のようなバリエーションを無視suxしてsudo、そこに少なくとも三つある[1]のバージョンのsuLinux上では:coreutilsutil-linuxおよびshadow-utilsDebianのが来たから。後者のマンページは指摘しています:

このバージョンのsuには多くのコンパイルオプションがあり、特定のサイトで使用できるのはそのうちのいくつかだけです。

Debianにはフラグが付いていold_debian_behaviorます。他のバージョンには、同様のコンパイル時/実行時オプションがあります。可変性のもう1つの理由は、この方法で特権をドロップするために使用すべきかどうか、 したがってバグがまったくバグであるかどうかに関する議論[2]があった可能性があります(Redhatは元々「WONTFIX」を閉じました)。suTIOCSTI

[1]:編集:追加SimplePAMAppsし、hardened-shadowそれに。

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


2
それは素晴らしい答えであり、何よりもその理由を正確に説明しています。私はあなたが1年前にここにいたことを願っています:)
マイキーTK 14年

1

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

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

strace -f su - username 2>stderr.log

2
-fsuがシェルをサブプロセスとして実行することを決定した場合に備えて、このトレースに追加することをお勧めします。端末のフォアグラウンドプロセスグループを設定するためのsyscallはioctl(..., TIOCSPGRP, ...)、ENOTTY(デバイスの不適切なioctl)で失敗したことをすでに知っているため、straceの一部はあまり役に立ちません。ただし、コマンドの両方のバージョン(の有無-)の痕跡を比較して、TIOCSPGRPが失敗する理由を見つけることができます。
アランカレー

それは有望なリードのようです。/ dev / ptsフォルダーを見ると、正確に2つのアイテム、つまり0、ログインしたユーザーが所有する600に設定されたアクセス許可、およびptmxアクセス許可がゼロのrootが所有するアクセス許可があります。
マイキーTK

1
No job controlメッセージの後にシェルプロンプトが表示されたら、コマンドttyを実行すると、どのttyを使用しているかがわかります。それls -lから。
アランカレー

@AlanCurry、あなたは正しい、私は追加し-fます。ありがとうございました!
ミルチャヴトコヴィチ

@AlanCurry-戻ってきた。元の質問を、Mirceaが提案した情報で更新しました。
マイキーTK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.