質問: ログインシェルとしての/ usr / sbin / nologinはセキュリティ上の目的に役立ちますか? 私の/etc/passwdファイル、www-data apacheが使用するユーザー、およびあらゆる種類のシステムユーザーは、/usr/sbin/nologinまたは/bin/falseをログインシェルとして。たとえば、次は行の選択です。 daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin games:x:5:60:games:/usr/games:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin syslog:x:101:104::/home/syslog:/bin/false whoopsie:x:109:116::/nonexistent:/bin/false mark:x:1000:1000:mark,,,:/home/mark:/bin/bash その結果、これらのユーザーのいずれかにスワップしようとすると(ユーザーの権限の理解を確認するために時々実行したいと思いますが、少なくとも他の少なくとも中途半端な理由があるため)、失敗します。mark@lunchbox:~$ sudo su www-data this account is currently not available. mark@lunchbox:~$ sudo su syslog mark@lunchbox:~$ もちろん、次のような方法でシェルを起動できるので、それほど不便ではありません。mark@lunchbox:~$ sudo -u www-data /bin/bash www-data@lunchbox:~$ しかし、それだけでは、これらのユーザーのログインシェルを拒否することで目的が何を提供するのか疑問に思います。説明のためにインターネットを見回すと、多くの人がこれはセキュリティに関係していると主張し、これらのユーザーのログインシェルを変更することは何らかの形で悪い考えであることに誰もが同意しているようです。ここに引用のコレクションがあります: apacheユーザーのシェルを非インタラクティブなものに設定することは、一般的に良いセキュリティの実践です(実際にインタラクティブにログインする必要がないすべてのサービスユーザーは、シェルを非アクティブなものに設定する必要がありますインタラクティブ)。 - https://serverfault.com/a/559315/147556 ユーザーwww-dataのシェルは/ usr/sbin/nologinに設定されており、非常に適切な理由でに設定されています。 - https://askubuntu.com/a/486661/119754 [システムアカウント] は、特にシェルが有効になっている場合、セキュリティホールになる可能性があります。 悪い bin:x:1:1:bin:/bin:/bin/sh 良い bin:x:1:1:bin:/bin:/sbin/nologin - https://unix.stackexchange.com/a/78996/29001 セキュリティ上の理由から tomcatサーバーを実行するためのログインシェルのないユーザーアカウントを作成しました: # groupadd tomcat # useradd -g tomcat -s /usr/sbin/nologin -m -d /home/tomcat tomcat - http://www.puschitz.com/installingtomcat.html これらの投稿は、システムユーザーに実際のログインシェルを提供しないことはセキュリティに良いことであるという満場一致の合意にありますが、それらの1つがこの主張を正当化するものではなく、どこにも説明はありません。これらのユーザーに実際のログインシェルを与えないことによって、どのような攻撃から身を守ろうとしていますか?
回答: 与えられた優れた答えに加えて、それは別の目的を果たします。サーバーでftpデーモンを実行すると、ログインを試みるユーザーのログインシェルがチェックされます。シェルが/etc/shellsにリストされていない場合は、ログインできません。したがって、デーモンアカウントに特別なシェルを与えると、誰かがftp経由でアカウントを変更できなくなります。