web-dev-qa-db-ja.com

異なる場所にある複数のディレクトリにユーザーをchrootする

/etc/httpd/etc/php/var/www/htmlなどのディレクトリとそのホームディレクトリにのみアクセスしてRWX権限を持つように、ユーザーを制限する方法を知りたいです。

また、このユーザーがApacheサービスのスター/停止/再起動のみを実行できるように制約できるようにしたいと思います。

私が考えることができるのはchrootだけですが、私は1つのディレクトリでそれを実行しました。何か案は?

1
VaTo

投獄されたユーザーは、これらのフォルダーにそのままアクセスすることはできません。ファイルシステムでaclを有効にしている場合は、通常のユーザーを作成し、アクセス制御リストを使用してディレクトリへのアクセスを制御できます。

ユーザー「Bob」にディレクトリへのアクセスを許可するには、グループを作成し、Bobをそのグループに配置してから、/ etc/http /にある既存および新規に作成されたすべてのファイルへのアクセスをグループに再帰的に許可します。

# groupadd WebAccessGroup
# usermod -a -G WebAccessGroup Bob
# setfacl -Rm d:g:WebAccessGroup:rwx,g:WebAccessGroup:rwx /etc/httpd/

グループを作成せずに、ユーザー「Bob」wrxだけに/ etc/httpdへのアクセスを許可することもできます。

# setfacl -Rm d:u:Bob:rwx,u:Bob:rwx /etc/httpd/

WebAccessGroupグループがApacheを開始および停止できるようにするには、グループSudoに、rootとしてApacheを開始/停止するために呼び出す特定のスクリプトを実行するためのアクセス権を付与します。

'visudo'コマンドを使用して、/ etc/sudoersファイルに以下を追加します。

# visudo
%WebAccessGroup   ALL=(root)    NOEXEC: /usr/bin/httpd

そして、BobはSudoを使用してApacheを起動します。

$ Sudo /usr/sbin/httpd -k start

**注:非標準ポートで非rootユーザー(この例では「anotheruser」)としてApacheを実行する場合は、All =(root)をAll =(anotheruser)に変更して、開始を実行する方が安全で適切です。次のようなコマンド:

Sudo -u anotheruser /usr/sbin/httpd -k start
2
L.Ray

Linuxでは、バインドマウントを使用して、chroot内で他のディレクトリを表示できます。

# mkdir -p /users/chroot/var/www/html
# mount --bind /var/www/html /users/chroot/var/www/html 
etc.

ユーザーが単一のサービスを再起動できるようにするには、Sudoを使用して、ユーザーがservice Apache2 restartなどのコマンドを実行できるようにします。

ただし、ユーザーをchrootに入れて、chrootの外部にあるサービスを再起動できるようにするのは難しい場合があります。サービスマネージャー(systemd?)が必要とするすべてのものがchrootに表示される必要があります。その時点で、サーバー全体を同じchroot(またはコンテナー、または仮想マシン)内で実行する方がおそらく簡単です。

0
ilkkachu