私は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
オペレーティングシステムやディストリビューションがわからない場合は、正確なコマンドを発行するのが困難です。 ACLは機能できますが、標準的なアプローチがあります。
adduser
とを使用すると、useradd
ディストリビューションでこれらのいずれかが自動的にユーザーのホームディレクトリを作成できます。その場合、ディレクトリの内容が/etc/skel/
ユーザーのホームディレクトリにコピーされ、権限が設定され、他の適切な操作が実行される可能性があります。
「従業員」などの事前定義された共有グループがある可能性がありますが、共有用に独自のグループを作成したい場合は問題ありません。したがって、新しいグループを作成するか、既存のグループを使用してください。このグループusermod
のメンバーであるユーザーがオペレーティングmoduser
システムを使用して定義されていることを確認してくださいvigr
。現在ログインしている各ユーザーは、ログアウトしてから再度ログインする必要があり、新しいグループのメンバーになります。
すべてのユーザーに共通のディレクトリ(たとえば、/home/share_directory/
状況に最適なディレクトリ)を作成します。関連するベストプラクティスは、ディレクトリを使用しないことです。以内にすべてのユーザーのホームディレクトリ。所有者とグループに加えて、誰もディレクトリ内のファイルを表示できない場合は、ディレクトリの権限を0770に変更します。 「other」が読めば0775が使われます。このディレクトリの所有者はほぼ確実にルートです。
chown root:group_name /home/share_directory/
次に setuid ビットを変更します。
chmod +s /home/share_directory/
ユーザーが他のユーザーのファイルを変更できないようにする必要がある場合でも、固定ビットを設定してください。
chmod +t /home/share_directory/
この例では、以下を使用して setuid ビットと固定ビットの両方を設定します。8進表記法。
chmod 5775 /home/share_directory/
または
chmod 5770 /home/share_directory/
ACLは新しい問題に適したツールのようです。現在、ほとんどのLinuxディストリビューションacl
にはこのオプションがオプションに含まれていますdefaults
。ディストリビューションにacl
デフォルトでこのオプションが含まれていない場合、このオプションを使用するにはいくつかの作業を行う必要があります。まずacl
、/ etc / fstabのオプションを使用してファイルシステムをマウントします。
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
デフォルトマスク()を設定します。ただし、ACLをディレクトリ自体に適用せずに-m
コマンドを再実行する必要があります。-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アクセスは提供しません。またはホームディレクトリの使用を制限するために/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 ディレクトリは、ルートが所有する必要があります。 SSHアクセスを防ぐために、ユーザーのシェルを/ bin / falseに設定することもできます。私は主にインタラクティブなアクセスに興味があるので、通常はそのパスにrssh
従います。 (それらは私が定義した書き込み機能以外はどこにも書き込むことができません。)