Linuxでのユーザー権限の仕組みを理解しようとしています。カーネルが起動しinit
、ルートとして起動しますよね?その後、Initは起動スクリプトを実行し、再度rootとしてgetty
(agetty
)を実行します。Agettyはユーザー名を読み取って実行しますがlogin
、それでもrootのままです。まだ何も面白くない。しかし、ログインは何をしますか?「ログインしようとする」以上のものを見つけることができませんでした。ログインでパスワードが一致すると(そして通常のユーザーとしてログインしようとすると)検出された場合、ユーザーIDをどのように変更しますか?そのためのシステムコールがあるはずだと思いましたが、それを見つけることができませんでした(多分、私は盲目なのでしょうか?)
また、についてsu
。su
「setuid」ビットが設定されているため、実行すると、常にルートとして実行されます。しかし、通常のユーザーとしてログインするように指示すると、再びユーザーIDを変更する必要があります。同じ「マジック」がユーザーを変更する必要があるときsu
とlogin
いつ発生するかを正しく理解していますか?もしそうなら、なぜ2つの異なるプログラムがあるのですか?ログインを実行しているときに、その他の深刻なビジネスが発生していますか?