私はサーバーを実行しており、単一のユーザーに特定のディレクトリへの読み取り/書き込みアクセス権を付与する必要があります。私は以下を試しました:
sudo adduser abcd
sudo groupadd abcdefg
chown -R .abcdefg /var/www/allowfolder
chmod -R g+rw /var/www/allowfolder
usermod -a -G comments abcd
上記の方法はうまくいくようですが、ユーザーにサーバーの残りの部分への読み取り専用アクセス権を与えます。
ユーザーが特定のフォルダに対してのみ読み書きできるように権限を設定するにはどうすればよいですか?ユーザーはmysql
。
ベストアンサー1
否定的なACL
設定により、ユーザーがファイルシステムの特定の部分にアクセスするのを防ぎます。アクセス制御リスト。たとえば、ユーザーがabcd
次のファイルにアクセスできないことを確認します/home
。
setfacl -m user:abcd:0 /home
この方法は単純ですが、abcd
アクセスしたくないアイテムへのアクセスをブロックする必要があることに注意してください。
クロット
abcd
表示できる内容を積極的に制御するには、次の設定を行います。chrootつまり、ユーザーをファイルシステムのサブツリーに制限します。
mysql
ユーザーに必要なすべてのファイル(たとえば、ユーザーが実行できるようにする場合は、そのファイルのすべての依存関係mysql
)をchrootの下に配置する必要があります。 chrootへのパスがあると仮定すると、/home/restricted/abcd
プログラムmysql
はで利用可能でなければなりません/home/restricted/abcd
。 chroot の外側を指すシンボリックリンクは、シンボリックリンクのルックアップが chroot Jail の影響を受けるため、悪いことです。 Linuxでは、バインドマウントを最大限に活用できます。
mount --rbind /bin /home/restricted/abcd/bin
mount --rbind /dev /home/restricted/abcd/dev
mount --rbind /etc /home/restricted/abcd/dev
mount --rbind /lib /home/restricted/abcd/lib
mount --rbind /proc /home/restricted/abcd/proc
mount --rbind /sbin /home/restricted/abcd/sbin
mount --rbind /sys /home/restricted/abcd/sys
mount --rbind /usr /home/restricted/abcd/usr
ファイルをコピーすることもできます(ただし、ファイルが最新であることを確認する必要があります)。
ユーザーをchrootに制限するには、ChrootDirectory
ディレクティブを追加します。/etc/sshd_config
。
Match User abcd
ChrootDirectory /home/restricted/abcd
以下を使用してこれをテストできます。
chroot --userspec=abcd /home/restricted/abcd/ /bin/bash
セキュリティフレームワーク
SELinuxやAppArmorなどのセキュリティフレームワークを使用することもできます。どちらの場合も、穴が残らないようにかなり細かい構成を作成する必要があります。