他のユーザーのファイルへのグループ権限の付与

他のユーザーのファイルへのグループ権限の付与

私は 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 は機能しますが、標準的な方法もあります。

と がありadduseruseraddディストリビューション上の のいずれかがユーザーのホーム ディレクトリを自動的に作成する場合があります。その場合、ディレクトリの内容がユーザーのホーム ディレクトリ/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 つの異なるアプローチを使用します。シェル は、rsshSCP/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。(書き込み権限を定義した場所以外には、どこにも書き込めません。)

関連情報