私はDebian7を使用しており、次のような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
私もしたい:
-
別のグループ、「請負業者」によるWebサイトファイルへのアクセスを許可する
-
Webサイトユーザーのホームディレクトリへのアクセスのみを制限する
-
新しいWebサイトファイルがこれらのアクセス許可を継承していることを確認してください
アクセス制御リストを使用する必要がありますか?それとも、これを行うためのより良い方法がありますか(サイトごとに個別のユーザーを使用しないなど)?
承認された回答:
O / Sまたは分布を知らずに、正確なコマンドを与えることは困難です。はい! ACLは機能しますが、標準的な方法もあります。
adduser
があります およびuseradd
、ディストリビューションのそれらの1つは、ユーザーのホームディレクトリを自動的に作成する場合があります。その場合、/etc/skel/
の内容 ディレクトリはユーザーのホームディレクトリにコピーされ、権限が設定され、おそらく他の適切なアクションが実行される可能性があります。
「スタッフ」など、共有用に事前定義されたグループが存在する場合があります。ただし、共有する独自のグループを作成する場合は、問題はありません。したがって、新しいグループを作成するか、既存のグループを使用します。グループのメンバーになるユーザーがusermod
でそのように定義されていることを確認してください 、moduser
、またはvigr
おそらく、オペレーティングシステムによると。現在ログインしている各ユーザーは、新しいグループのメンバーになるために、ログアウトしてから再度ログインする必要があります。
/home/share_directory/
など、すべてのユーザーに共通のディレクトリを作成します または、状況に最も適したその他のディレクトリ。関連するベストプラクティスは、内のディレクトリを使用しないことです。 任意のユーザーのホームディレクトリ。所有者とグループ以外の誰もディレクトリ内のファイルを表示できない場合は、ディレクトリのアクセス許可を0770に変更します。「others」が読み取りに問題がない場合は、0775を使用します。ディレクトリの所有者はほぼ確実にrootである必要があります。
chown root:group_name /home/share_directory/
次に、setuidビットを変更します。
chmod +s /home/share_directory/
他のユーザーのファイルを変更できるユーザーがいない場合は、スティックビットも設定します。
chmod +t /home/share_directory/
これらの例では、8進表記を使用してsetuidビットとstickyビットの両方を同時に設定します。
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
スイッチはデフォルトのマスクを確立します(-m
)ディレクトリ内のすべての新しいファイルシステムオブジェクト。ただし、-d
を使用せずにコマンドを再実行する必要もあります。 ACLをディレクトリ自体に適用するように切り替えます。次に、構成ファイルで「/ 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
関係のないディレクトリでのちょっとした「遊び」は、これをあなたの状況にぴったりと合わせるのに役立つはずです。
制限については、シェル、rssh
という2つの異なるアプローチを使用します。 、SCP / SFTPアクセスを提供するために作成されましたが、SSHアクセスは提供されません。または、使用をホームディレクトリに制限するには、/etc/ssh/sshd_config
で構成されたinternal-sftpサブシステムを使用できます。 。
Subsystem sftp internal-sftp
Match group sftponly
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
たとえば、sftponlyという名前のグループを作成します。ユーザーをsftponlyグループのメンバーにします。ホームディレクトリを/
に変更します chrootのため。ディレクトリ/home/ usernameは、rootが所有している必要があります。ユーザーのシェルを/bin/ falseに設定して、SSHアクセスを防ぐこともできます。ほとんどの場合、インタラクティブアクセスが心配なので、通常はrssh
を使用します。 道。 (私が書き込み能力を定義した場所を除いて、どこにも書き込むことはできません。)