私のファイルでは、Apacheおよびさまざまなシステムユーザーがログインシェルを使用するか、ログインシェルとして使用しているユーザーを表示できます/etc/passwd
。たとえば、次は行の選択です。www-data
/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
したがって、これらのユーザーの1つに切り替えようとすると(時には権限の理解を確認するために実行したい、おそらく他の少なくとも半分の理由で)、次のように失敗します。
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
マンページを見るとnologin
以下の説明が出てきます。
抜粋
nologin はアカウントが利用できないというメッセージを表示し、ゼロ以外の値で終了します。これは、アカウントへのログインアクセスを拒否するための代替シェルフィールドとして使用されます。
ファイルが
/etc/nologin.txt
存在する場合は、nologin
デフォルトのメッセージの代わりにその内容をユーザーに表示します。返される終了コードは
nologin
常に1です。
したがって、実際の意図は、nologin
ユーザーがそのアカウントを使用しているアカウントでログインしようとすると、ユーザーフレンドリーなメッセージが表示され、その/etc/passwd
アカウントを使用したいすべてのスクリプト/コマンドが拒否されることです。このログインは終了コード 1 を受け取りました。
安全
セキュリティに関しては、現場で一般的/sbin/nologin
に、または時には他のものを見ることができます。/bin/false
すべて同じ目的で使用されますが、/sbin/nologin
好ましい方法である可能性があります。それにもかかわらず、特定のユーザーアカウントにシェルへの直接アクセスを制限します。
これがセキュリティの観点から価値があると考えられるのはなぜですか?
「理由」を完全に説明することは困難ですが、このようにユーザーアカウントを制限することの価値は、login
そのユーザーアカウントを使用してアクセスしようとしたときにアプリケーションを介した直接アクセスをブロックすることです。
nologin
これはまたはを使用して/bin/false
達成できます。システムの攻撃面を制限することは、特定のポートのサービスを無効にしたり、システムログインの特性を制限するなど、セキュリティの世界で一般的な技術です。
使用に関する他の合理化がまだありますnologin
。たとえば、scp
このServerFault Q&Aで説明されているように、実際のシェルを指定しないユーザーアカウントは使用されなくなりました。/sbin/nologinと/bin/falseの違いは何ですか?。