/usr/bin/agetty -
ターミナルエミュレータのbashから呼び出しを試みました(どちらも私の元のbashプロモーションです)。
agettyはsystemd
ttyxデバイスを使用するサービスで始まるため、ログインが設定されてシステムセッションが作成されるため、ログイン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で使用すると回避できます。