/usr/sbin/nologin はセキュリティの目的でログインシェルとして使用されますか?

/usr/sbin/nologin はセキュリティの目的でログインシェルとして使用されますか?

私のファイルでは、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の違いは何ですか?

おすすめ記事