Linuxのサービスの権限はどのように機能しますか?ファイルとディレクトリにread
、write
、execute
の権限を設定できることはすでに知っていますが、chmod
、owner
、other users
にはそれぞれgroup
がありますが、実行中のサービスに対して権限はどのように機能しますか?サービスが特定のファイル/ディレクトリに対してどのような権限を持っているかを確認するにはどうすればよいですか?
サービスは、通常の許可制限に拘束されます。それはすべて、サービスが実行されているユーザーによって異なります。サービスは、常に実行されている単なる通常のプロセスです。
例えば、
$ ps aux | grep Apache2 root 2845 0.0 0.2 75596 4508? Ss Sep06 0:19/usr/sbin/Apache2 -k start www-data 25608 0.0 0.1 74428 2232? S Sep09 0:00/usr/sbin/Apache2 -k start www-data 25609 0.0 0.1 75596 2288? S Sep09 0:02/usr/sbin/Apache2 -k start www-data 25610 0.0 0.4 2003664 8436? Sl Sep09 0:37/usr/sbin/Apache2 -k start www-data 25611 0.0 0.4 2003788 8584? Sl Sep09 0:36/usr/sbin/Apache2 -k start www-data 25700 0.0 0.4 2003648 8528? Sl Sep09 0:36/usr/sbin/Apache2 -k start
サービスがroot
とwww-data
によって実行されていることがわかります。 Apacheは、ポート80(または構成したポート)へのバインドにのみroot
プロセスを使用します。 1024未満のポートにバインドするには、ルートである必要があることを思い出してください。
ただし、セキュリティのために、Apacheはすべての要求処理をwww-data
として実行されるプロセスに渡します。これらのプロセスがアクセスできるものはあなた次第です。ドキュメントルートのファイル権限でwww-data
によるファイルへのアクセスが許可されていない場合、Apacheはそれらのファイルを処理できません。
これはどのサービスでも同じです。通常、彼らは持っています
root
として実行されているプロセス(1024未満のポートにバインドする必要がある場合。ただし、すべてのサービスがroot
プロセスを持っているわけではありません)。これにより、特権の低いユーザーにタスクが委任されます。bind
、Apacheの場合はwww-data
、proftpdの場合はproftpd
など)。これらの名前はシステムによって異なることに注意してください(ApacheはApache2
ではなくApache
またはwww-data
として実行される場合があります)。ただし、一部のプロセスは、特定のユーザーとしてではなく、nobody
として実行されます。これは悪い考えかもしれませんが、プロセスとそれが何をしているかに依存します。
これらは単なる一般的なルールです。一部のプロセスは完全にrootとして実行されます(sshd
などですが、誰かが接続するとユーザープロセスを使用します)。 ps aux
を使用して、プロセスが実行されているユーザーを確認します。