docker execコマンドがnologinユーザーを使用してシェルを起動できるのはなぜですか?

docker execコマンドがnologinユーザーを使用してシェルを起動できるのはなぜですか?

たとえば、私のファイルfooにnologinユーザーがいます。/etc/passwd

foo:x:1010:1010::/home/foo:/usr/sbin/nologin

この Docker コンテナを実行した後、次のコマンドを実行します。

docker exec -it --user foo <container name> bash

実際にはでログインできますfoo。私は正しく理解していますか? nologin のマニュアルページには次のように表示されます。

nologin displays a message that an account is not available and exits
non-zero.  It is intended as a replacement shell field to deny login
access to an account.

docker execとユーザーfooはここでどのように機能しますか?

ベストアンサー1

docker exec既存の名前空間からプロセスを開始しました。コンテナにログインせずに特定のユーザーが所有するコマンドを呼び出すだけです。 Dockerに実行を指示すると、ログインプロセスは開始されませんbash

dockerで完全に機能するログインプロセスを取得するには、ssh、mgetty、gdm、または通常のoldなどの一種のログインサービスを実行する必要がありますlogin foo。ほとんどの場合、PAMスタックを介して実行され、pam_unixはpwentを読み取り、ログインはセッションを開始できません。

おすすめ記事