次のように入力した後にパスワードの入力を求められますsu
。
user@debian:~$ su
Password:
キーボード(同じ端末)でsend()を実行できませんSIGSTOP
。何も起こりません。ctrl+Z
したがって、終了する唯一の方法は、いくつかの(正しいまたは間違った)パスワードを入力することです。なぜsu
これを一時停止できないのですか?
ctrl+Z
UPD:キューがあるようです。したがって、送信時にctrl+Z
何も起こりませんが、Enter
入力信号が到着して停止su
した後に発生します。まだこの行動を理解できません。この標準的な動作は、すべてのUnixシリーズシステムに適用されますか、それともLinuxにのみ適用されますか?
ベストアンサー1
いくつかの基本的なエラーを明確にしてみましょう。
- シグナルいいえ待ち行列。キューイングは信号に関して特定のものであり、この特定の信号では発生しません。信号はマスクを書く。
- この特別な信号いいえ
SIGSTOP
。このsusp
文字を使用すると、ライン規約が送信されますSIGTSTP
。
login
1980年代や命令の観点と矛盾する多くのものと同様に、ここでのsu
動作の根本はPAMです。
su
そのような目的で作られたものではありません。使用する以外にLinux PAM図書館。たとえば、OpenPAMライブラリを使用するBSDではこれは発生しません。
これを行うことは、Linux PAMが提供するPAMと呼ばれるモジュールですpam_unix
。具体的には、これを行うコードmisc_conv()
内で呼び出されるライブラリによって提供される基本的な「会話」機能です。メッセージが表示されたら、入力項目を具体的にブロックします。pam_unix
SIGTSTP
表面的には図書館を掃除できるように。そのため、信号は入力前に転送されません。
OpenPAMはpam_unix
PAMモジュールも提供します。これはOpenPAMライブラリによって提供される基本的な「ダイアログボックス」機能を呼び出しますopenpam_ttyconv()
。後者の信号遮断なし。su
FreeBSDなどでは、パスワードプロンプトで一時停止が可能であるという事実に誰も気づかなかったようです。そしてターミナルはエコーをオフにします。これは、おそらくFreeBSDのオペレーティングシステムによって提供されるコマンドラインシェルには、すべてのプロンプト入力を引き継ぎ、独自のエコーを実行するときに端末設定を即座に再調整する行編集ライブラリがあるためです。
追加読書
- ジョナサンデボインポラード(2014)。 「20年前にPAMがすべてを変えました。」。ユーザー権限を削除するためにsuを乱用しないでください。。一般的な答え。
- https://unix.stackexchange.com/a/561459/5132
- https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=243584