web-dev-qa-db-ja.com

サービスに対するLinuxのアクセス許可

Linuxのサービスの権限はどのように機能しますか?ファイルとディレクトリにreadwriteexecuteの権限を設定できることはすでに知っていますが、chmodownerother usersにはそれぞれgroupがありますが、実行中のサービスに対して権限はどのように機能しますか?サービスが特定のファイル/ディレクトリに対してどのような権限を持っているかを確認するにはどうすればよいですか?

7
Gigitsu

サービスは、通常の許可制限に拘束されます。それはすべて、サービスが実行されているユーザーによって異なります。サービスは、常に実行されている単なる通常のプロセスです。

例えば、

$ 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

サービスがrootwww-dataによって実行されていることがわかります。 Apacheは、ポート80(または構成したポート)へのバインドにのみrootプロセスを使用します。 1024未満のポートにバインドするには、ルートである必要があることを思い出してください。

ただし、セキュリティのために、Apacheはすべての要求処理をwww-dataとして実行されるプロセスに渡します。これらのプロセスがアクセスできるものはあなた次第です。ドキュメントルートのファイル権限でwww-dataによるファイルへのアクセスが許可されていない場合、Apacheはそれらのファイルを処理できません。

これはどのサービスでも同じです。通常、彼らは持っています

  • rootとして実行されているプロセス(1024未満のポートにバインドする必要がある場合。ただし、すべてのサービスがrootプロセスを持っているわけではありません)。これにより、特権の低いユーザーにタスクが委任されます。
  • 作成したユーザーとして実行されているプロセス(BINDの場合はbind、Apacheの場合はwww-data、proftpdの場合はproftpdなど)。これらの名前はシステムによって異なることに注意してください(ApacheはApache2ではなくApacheまたはwww-dataとして実行される場合があります)。

ただし、一部のプロセスは、特定のユーザーとしてではなく、nobodyとして実行されます。これは悪い考えかもしれませんが、プロセスとそれが何をしているかに依存します。

これらは単なる一般的なルールです。一部のプロセスは完全にrootとして実行されます(sshdなどですが、誰かが接続するとユーザープロセスを使用します)。 ps auxを使用して、プロセスが実行されているユーザーを確認します。

5
Tom Marthenal