ほとんどの場合、ソースからプログラムをインストールするときは、新しいユーザーと新しいグループを作成し、/usr/local/<myapp>
最近作成されたユーザーとグループの所有権。
なぜそのような実践は良い習慣と考えられているのですか?
何が改善されますか?
例:MySQLデータベースサーバーのmysql user/mysqlグループ。
アプリケーションごとではなく、サービスごとに1人のユーザーとグループを作成するのが習慣です。つまり、ローカルユーザーが実行するプログラムは、root以外のユーザーとしてインストールする必要はありません。それは daemons であり、バックグラウンドで実行され、ネットワークまたはその他の通信手段を介して送信される要求を実行するプログラムであり、専用ユーザーとして実行する必要があります。
デーモンは専用のユーザーとして実行されるため、(バグが原因で、おそらく攻撃者によって引き起こされた)動作に問題がある場合、デーモンが実行できるダメージは限られています。 、発生する可能性があります)。たとえば、データベースデーモンmysqld
は専用ユーザーおよびグループmysql:mysql
として実行され、データベースのデータファイル(/var/lib/mysql/*
)はmysql:mysql
に属します。
デーモン実行可能ファイルと、使用されているがデーモンによって変更されるべきではないその他の静的データおよび構成ファイルは、専用ユーザーに属してはならないことに注意してください。ほとんどのプログラムおよび構成ファイルと同様に、それらはroot:root
が所有する必要があります。 mysqld
プロセスには/usr/sbin/mysqld
または/etc/mysql/my.cnf
を上書きするビジネスがないため、これらのファイルはmysql
ユーザーに属していないか、mysql
によって書き込み可能であってはなりませんユーザーまたはmysql
グループ。一部のファイルをデーモンと管理者のみが読み取り可能にする必要がある場合、それらのファイルはユーザーrootと専用グループによって所有され、モード0640(rw-r-----
)を持っている必要があります。
root:root
が所有できない実行可能ファイルの特別なカテゴリは、ユーザーが呼び出すプログラムですが、追加の特権で実行する必要があります。これらの実行可能ファイルは、(少なくとも部分的に)rootとして実行する必要がある場合、 setuid rootでなければなりません。その場合、実行可能ファイルにはモード4755(rwsr-xr-x
)が必要です。プログラムがrootではなく追加の特権を必要とする場合、プログラムをsetgidにして、追加の特権がユーザーではなくグループを介して提供されるようにする必要があります。実行可能ファイルのモードは2755(rwxr-sr-x
)になります。理由は2つあります。
これは一般的なアプリケーションではなく、これが目的のデーモンです。その理由は、デーモンがrootの代わりに非特権ユーザーとして実行できるため、セキュリティの脆弱性があり、侵害された場合、実行可能な被害はユーザーがアクセスできる領域にのみ含まれるためです。
これが良い習慣と考えられている理由は、システムの他のユーザーが特定のアプリケーションのデータと構成ファイルを上書きしないようにするためです。
例として、mysql
/mysql
は、mysqlデータベースファイルのストレージの所有者であることにより、アプリケーションAPIを使用していないユーザーがデータベースを破損するのを防ぎます。さらに、ユーザーmysql
には通常、実際のシェルがないため、そのユーザーとしてログインすることはできません。
これはセキュリティ上の考慮事項です。これは、デーモンアプリケーションに侵入したユーザーが実行できる被害を制限します。ユーザーアプリケーションは通常、root
などの標準ユーザーIDが所有しています。
Webサーバー、メールサーバー、データベースがすべて同じユーザーとして実行されている場合、それらのセキュリティが侵害されやすくなります。それらのいずれかにシステムアクセスを許可するバグまたは設定ミスがある場合、そのアクセスを使用して3つのアプリケーションすべてにアクセスできます。
推奨されているように、それらすべてが個別のアカウントを持っている場合、侵害されたアプリケーションのみにアクセスできる可能性があります。他のパブリック構成の詳細は読み取られる可能性がありますが、変更を加えることはできません。
多くのデーモンでは、ユーザーがファイルをアップロードおよびダウンロードできるほか、他のデーモンの構成に対してユーザーが実行できないようにしたいことを実行できます。各アプリケーションに独自のユーザーIDとグループがある場合、デーモンを保護する方が簡単です。
デーモン固有のグループがあると、ファイルとディレクトリへの読み取り専用の安全なアクセスをデーモンに安全に許可することがより簡単になります。ファイルまたはディレクトリが別のユーザーによって所有されているが、デーモングループに属している場合、通常は読み取り専用でアクセスできます。アクセス許可は、findなどのツールを使用して簡単に確認および修正できます。
新しくインストールされたデーモンに新しいグループ/ユーザーを作成すると、セキュリティが向上します。このようなユーザーの下でサーバープロセスを実行すると、そのユーザーのアクセス権に制限されます。比較すると、それがrootとして実行されると、すべてを実行できます。
この違いは、デーモンが正しく設定されていない場合や、セキュリティ関連のバグが含まれている場合に重要です。
質問の2番目の部分、つまり/usr/local
の所有権に関する部分の意味がわかりません。一般に、セキュリティ上の理由でデーモンが実行されている同じユーザーX
がバイナリを含むディレクトリを所有していることは意味がありません(その場合、エクスプロイトの場合にそれらを変更する可能性があるためです)。ただし、デーモンが動作するデータファイルのあるディレクトリにはX
がアクセスできる必要があります。これを設定する最も簡単な方法は、X
をデータディレクトリ/ファイルの所有者にすることです。
独自の特別なユーザーの下でデーモンを実行することは、セキュリティ手法の1つにすぎません。他の方法としては、ある種の「chroot」や、強制アクセス制御(MAC)システム(SELinuxなど)の使用があります。