![他のユーザーのファイルへのグループ権限の付与](https://rvso.com/image/109222/%E4%BB%96%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%B8%E3%81%AE%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E6%A8%A9%E9%99%90%E3%81%AE%E4%BB%98%E4%B8%8E.png)
私は Debian 7 を使用しており、次のような htdocs ディレクトリを持つ新しいユーザー (Web サイト) を作成しました。
$ sudo adduser website
$ sudo mkdir -p /home/website/htdocs
$ sudo chown -R website /home/website
ここで、別のグループ (開発者) のユーザーがユーザーのディレクトリにアクセスできるようにしたいと思います。以下を試しました:
$ sudo chown -R :developers /home/website
ls -la
グループが割り当てられていること (またはを使用) と、ユーザーがグループに含まれていることはわかりますstat
が、アクセス権がないのはなぜでしょうか?
drwxr-xr-x 3 website developers 4096 May 3 09:09 website
私もしたい:
別のグループ「請負業者」にウェブサイトファイルへのアクセスを許可する
ウェブサイトのユーザーのアクセスをホームディレクトリのみに制限する
新しいウェブサイトファイルがこれらの権限を継承していることを確認する
アクセス制御リストを使用する必要がありますか、それとも、これを行うより良い方法(サイトごとに個別のユーザーを使用しないなど)がありますか?
答え1
O/S やディストリビューションを知らずに正確なコマンドを出すのは困難です。ACL は機能しますが、標準的な方法もあります。
と がありadduser
、useradd
ディストリビューション上の のいずれかがユーザーのホーム ディレクトリを自動的に作成する場合があります。その場合、ディレクトリの内容がユーザーのホーム ディレクトリ/etc/skel/
にコピーされ、権限が設定され、その他の適切なアクションが実行される場合があります。
「スタッフ」などの共有用にあらかじめ定義されたグループが存在する場合もありますが、共有用に独自のグループを作成する場合は、何も問題はありません。したがって、新しいグループを作成するか、既存のグループを使用します。グループのメンバーになるユーザーが、オペレーティング システムに応じてusermod
、、、moduser
またはを使用してそのように定義されていることを確認しますvigr
。現在ログインしている各ユーザーは、新しいグループのメンバーになるには、ログアウトして再度ログインする必要があります。
/home/share_directory/
または状況に応じて最適なディレクトリなど、すべてのユーザーに共通のディレクトリを作成します。関連するベストプラクティスは、ディレクトリを使用しないことです。内で任意のユーザーのホーム ディレクトリ。所有者とグループ以外の誰もディレクトリ内のファイルを表示できない場合は、ディレクトリの権限を 0770 に変更します。「その他」による読み取りが許可されている場合は、0775 を使用します。ディレクトリの所有者は、ほぼ間違いなく root である必要があります。
chown root:group_name /home/share_directory/
次に、setuid ビットを変更します。
chmod +s /home/share_directory/
どのユーザーも他のユーザーのファイルを変更できないようにする場合は、スティック ビットも設定します。
chmod +t /home/share_directory/
これらの例では、setuidビットとstickyビットの両方を同時に設定しています。8進表記。
chmod 5775 /home/share_directory/
または
chmod 5770 /home/share_directory/
更新された質問については、ACL が適切なツールであるように思われます。ほとんどの Linux ディストリビューションには、現在、オプションacl
にオプションが含まれていますdefaults
。ディストリビューションにデフォルトでオプションが含まれていない場合はacl
、使用を開始するには少し作業が必要です。まず、/etc/fstab のオプションを使用してファイル システムをマウントしますacl
。
sudo vim /etc/fstab
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults,acl 0 1
必要に応じて、ファイルシステムを再マウントします: sudo mount -o remount,acl /
。次に、この目的のためにユーザーが所属できるグループを作成します。ACL ツールもインストールする必要がある可能性があります: apt-get install acl
。
sudo groupadd developers
sudo usermod -a -G developers $username
(または、グループは「請負業者」かもしれません。) 現在ログインしているユーザーは、新しいグループのメンバーになるために、ログアウトして再度ログインする必要があります。もちろん、/var/www ディレクトリに保持したいコンテンツがある場合はこれを行わないでください。ただし、これは開始時の設定方法を示すためのものです。
sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root:developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -d -m u::rwx,g:contractors:rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g:contractors:rwx,o::r-x /var/www/public
上記のコマンドの違いはsetfacl
次のとおりです。最初のインスタンスはデフォルトのグループ (ディレクトリのグループ所有者) を使用しますが、2 番目のインスタンスはグループを明示的に指定します。スイッチは、ディレクトリ内のすべての新しいファイルシステム オブジェクトに対して-d
デフォルトのマスク ( -m
) を確立します。ただし、ディレクトリ自体に ACL を適用するには、スイッチなしでコマンドを再度実行する必要があります-d
。次に、構成ファイルで "/var/www" への参照を "/var/www/public" に置き換えて、リロードします。
sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload
ファイルを作成したユーザー以外からの削除と名前変更を制限したい場合は、sudo chmod +t /var/www/public
次のようにします。この方法では、Apache ドキュメント ルートの外部に存在するフレームワーク用のディレクトリを作成したり、サーバー書き込み可能なディレクトリを作成したりする場合でも、簡単です。
Apache 書き込み可能なログ ディレクトリ:
sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs
Apache 読み取り可能なライブラリ ディレクトリ:
sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/logs
sudo chmod 0750 /var/www/logs
重要でないディレクトリで少し「遊んでみる」ことで、状況に合わせてこれを適切に設定できるようになります。
制限については、2 つの異なるアプローチを使用します。シェル は、rssh
SCP/SFTP アクセスは提供しますが、SSH アクセスは提供しないように作成されています。または、使用をホーム ディレクトリに制限するには、 で構成されている internal-sftp サブシステムを使用できます/etc/ssh/sshd_config
。
Subsystem sftp internal-sftp
Match group sftponly
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
たとえば、sftponly という名前のグループを作成します。ユーザーを sftponly グループのメンバーにします。chroot/
のため、ホーム ディレクトリを に変更します。ディレクトリ /home/username は、root が所有する必要があります。SSH アクセスを防止するために、ユーザーのシェルを /bin/false に設定することもできます。主に対話型アクセスを懸念しているので、通常はパスを使用しますrssh
。(書き込み権限を定義した場所以外には、どこにも書き込めません。)