bashでagettyを直接呼び出しても効果がないような理由は何ですか?

bashでagettyを直接呼び出しても効果がないような理由は何ですか?

/usr/bin/agetty -ターミナルエミュレータのbashから呼び出しを試みました(どちらも私の元のbashプロモーションです)。

agettyはsystemdttyxデバイスを使用するサービスで始まるため、ログインが設定されてシステムセッションが作成されるため、ログインexecve(/usr/bin/login)アップグレードが提供されます。pam_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

ベストアンサー1

明らかに、「再帰login」はいくつかの有用なタスクを実行するために使用されていましたが、今のところLinuxでは動作しないと予想されます。

現在のシステムについてよりよく理解され文書化されているので、non-recursive login、OR su、Errorなど、より一般的に使用される技術に固執することをお勧めします。sudo

可能であればsuそれを使用しないでくださいsu -l。これにより、きちんとした環境変数セットが提供されます。

はいいいえ説明する特定の結果が表示される理由をご覧ください。しかし、「再帰」の動作を理解する必要がある場合は、loginそれがどのように間違っているのかを知る必要がある2つの特定のことを考えてみましょう。

間違い

文書化されていないBSD -rオプションはサポートされていません。これは、一部のrlogind(8)プログラムで必要になる場合があります。

以前は、再帰ロギングはもはやほとんどの目的で機能しなかったため、su(1)は満足のいく代替方法です。実際、セキュリティ上の理由から、ログインはvhangup()システムコールを実行して、ttyからすべての可能な受信プロセスを削除します。これはパスワードのスニッフィングを防ぐためです。コマンドを使用してログインすると、周辺シェルはttyの実際の所有者ではなくなり、vhangup()によって終了します。

-man login

systemd はログインセッションを追跡しますが、入れ子になることはできません。これは意図的な選択システムログインセッションがaudit「セッション」と対話する方法について説明します。 su/sudo現在の「auditセッション」を脱出しないでください。

現在、私は実行するたびにsystemdがこのデザインをうるさく記録するのを見ることができますsudo。これがなぜ望ましいと思われるのか尋ねないでください...

sudo[1079]: pam_systemd(sudo:session): Cannot create session: Already running in a session

完全な開示:引用はman login続きます:

コマンドを使用してログインすると、周辺シェルはttyの実際の所有者ではなくなり、vhangup()によって終了します。これは、exec login最上位のシェルまたはxtermで使用すると回避できます。

おすすめ記事