ターミナルエミュレーター(Xベースとカーネルベースの両方)でbashから_/usr/bin/agetty -
_を呼び出そうとすると、ユーザー名を入力するように求められましたが、そのユーザー名を入力すると、しばらくの間「フリーズ」します。 、その後、元のbashプロモートに戻しました。
疑問に思い始めたのですが、agettyはttyxデバイスとexecve(/usr/bin/login)
を使用するサービスとしてsystemd
によって開始されます。ログインは_pam_systemd
_で構成されているため、ログインプロモートが表示されます。 systemdセッションが作成されます。しかし、これは、前述のように_agetty -
_を直接実行したときに得られる結果ではありません。_systemctl status
_をチェックしても、新しいセッションは作成されません。
次に、agettyが通常のユーザーとして実行されているためか、それ自体のEUIDなどをチェックする可能性があると思いましたが、ユーザー名を入力した後、bashが終了するだけです。
もう一度_systemctl status
_をチェックしましたが、systemdはこのプログラムを_/sbin/agetty -o -p -- \u --noclear tty2 linux
_として実行すると表示されました。わかりました。tty2にrootとしてログインしてから、_agetty -o -p -- \u --noclear - linux
_を実行しました。そもそも-私は再びbashに戻されました。
これらの実験結果を理解する必要があります。
ArchLinuxを使用しています。_/usr/bin/login
_と_/usr/bin/agetty
_はどちらも_util-linux 2.33-2
_パッケージからのものです。
どうやら「再帰的login
」は何か便利なことをしていたようですが、Linuxでしばらくは動作することが期待されていません。
非再帰的なlogin
、またはsu
とSudo
など、より一般的に使用される手法を使用することをお勧めします。これらは現在のシステムでよりよく理解され、文書化されているためです。
可能であれば、su
を避けてsu -l
を優先します。これにより、環境変数のクリーンなセットが得られます。
私はnotあなたが説明する特定の結果が表示される理由を知りません。しかし、「再帰的login
」の動作を理解する必要がある場合は、何がうまくいかないかについて、理解する必要のある2つの特定のポイントを考えることができます。
バグ
文書化されていないBSD-rオプションはサポートされていません。これは、一部のrlogind(8)プログラムで必要になる場合があります。
古き良き時代に可能であった再帰的ログインは、もはや機能しません。ほとんどの目的で、su(1)は十分な代替品です。実際、セキュリティ上の理由から、loginはvhangup()システムコールを実行して、ttyで可能なリスニングプロセスを削除します。これは、パスワードの盗聴を回避するためです。コマンドloginを使用すると、周囲のシェルはttyの真の所有者ではなくなったため、vhangup()によって強制終了されます。
--
man login
また、systemdを使用している場合は、ログインセッションを追跡しますが、ネストすることはできません。これは 意図的な選択 systemdログインセッションが「audit
セッション」とどのように相互作用するかについてです。 su
/Sudo
は現在の「audit
セッション」をエスケープしません。
現在、Sudo
を実行するたびに、systemdがこのデザインについてノイズの多いログを記録しているのを見ることができます。なぜこれが望ましいと考えられるのか私に聞かないでください...
Sudo[1079]: pam_systemd(Sudo:session): Cannot create session: Already running in a session
完全な開示:man login
からの引用は続きます:
コマンドloginを使用すると、周囲のシェルはttyの真の所有者ではなくなったため、vhangup()によって強制終了されます。これは、トップレベルのシェルまたはxtermで
exec login
を使用することで回避できます。