私はいくつかのウェブサイト用にシンプルなウェブサーバーをセットアップしています。
site1:/var/www/site1/public_html/
site2:/var/www/site2/public_html/
以前はrootユーザーを使用してファイルを管理し、それが終わったらそれらをwww-data
に戻しました(WordPressサイト、WPアップロードが必要です)。これはおそらく最善の方法ではありません。
Site2ではなくsite1のファイルを編集する権限を持ち、www-data
によって「所有」されているファイルを停止しない別のユーザー(user1と呼びます)を作成する方法を見つけようとしています。これを行う方法はありますか?
Site1の所有権を確認すると、次のようなものが見つかります。
ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/
これは、ディレクトリがユーザールート、グループルートによって所有されていることを意味します。ユーザールートにはディレクトリへの書き込み権限(読み取りおよび実行権限に加えて)がありますが、グループルートには読み取りおよび実行権限のみがあります。
グループの所有権を別の(new)グループに変更し、user1をその特定のグループに追加します。その特定のグループにも書き込み許可を与えます。
新しいグループを作成し、
Sudo addgroup site1
新しく作成したグループにuser1を追加し、
Sudo adduser user1 site1
User1が実際にそのグループに属していることを確認し、
groups user1
出力は次のようなリストになります。
user1 : <other-groups> site1
これで、目的のディレクトリのグループ所有権を変更できます。
Sudo chown -vR :site1 /var/www/site1/
changed ownership of `/var/www/site1/' from root:root to :site1
この新しいグループオーナーに書き込み権限を付与します。
Sudo chmod -vR g+w /var/www/site1/
mode of `/var/www/site1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)
すべての変更が実際に存在することを確認し、
ls -ld /var/www/site1/
drwxrwxr-x 2 root site1 4096 Oct 24 21:06 /var/www/site1/
そのため、ディレクトリはユーザーroot、グループsite1によって所有されるようになりました。ユーザーrootとグループsite1の両方に、ディレクトリへの書き込み許可(および読み取りと実行の許可)があります。グループsite1に属するユーザーは、そのグループに付与されたすべての特権を享受できます。
ここで、user1としてログインし、site1ディレクトリに移動して、そのディレクトリにファイルを作成してみてください。
echo "My User1 Site" > index.html
bash: index.html: Permission denied
ほとんどの場合、user1のプライマリグループはsite1ではないため、これは失敗しました。そのため、そのグループに変更します。
newgrp - site1
ファイルを再作成してみてください(グループを変更した後にuser1のホームディレクトリに移動していることに注意してください)。これで動作するはずです。作成されたファイルには全世界の読み取り許可があるため、Apache(またはWebサーバー)がファイルにアクセスする際に問題が発生することはありません。
編集
また、コメントの dan08 で指摘されているように、www-dataをsite1グループに追加する必要があります。
Sudo adduser www-data site1
多くの(すべてではない)ディストリビューションでは、www-dataはApache Webサーバーが実行されるユーザーです。これは、Apacheによって行われるすべて(特にPHPスクリプトを含む)が、デフォルトでユーザーwww-data(およびグループwww-data)の権限で行われることも意味します。 WordPressは、ユーザーwww-dataを使用してファイルを書き込みます。
Apache Webサーバーの実行状況を確認するには、コマンドを発行します。
ps aux | grep Apache2 | less
site1grp
とsite2grp
の2つのグループを作成します
Sudo groupadd site1grp && Sudo groupadd site2grp
www-data
を両方のグループに追加します。
Sudo adduser www-data site1grp && Sudo adduser www-data site2grp
User1とuser2を適切なグループに追加します
Sudo adduser user1 site1grp && Sudo adduser user2 site2grp
ユーザーの所有者がwww-dataで、グループの所有者が適切なグループになるように、サイトフォルダーの権限を変更します
Sudo chown -R www-data:site1grp /var/www/site1 && Sudo chown -R www-data:site2grp /var/www/site2
これで、www-data
は両方のサイトでユーザーおよびグループのアクセス許可を持ち、各ユーザーはそれぞれのサイトでグループのアクセス許可を持ちます。
ホームフォルダーの下にwordpressルートフォルダーがある場合:
Ubuntu/Apache
ユーザーをwww-dataグループに追加します。
クレジット www-dataグループへの書き込み権限の付与
ユーザーのusermod
を呼び出します。だからそれは次のようになります:
Sudo usermod -aG www-data yourUserName
www-data
グループが存在すると仮定
ユーザーがwww-data
グループに属していることを確認します。
groups yourUserName
次のようなものが得られるはずです。
yourUserName : yourUserGroupName www-data
yourUserGroupNameは通常、ユーザー名に似ています
ユーザーの所有権を保持したまま、フォルダーのグループ所有権を再帰的に変更します
chown yourUserName:www-data -R yourWebSiteFolder/*
ディレクトリをyourWebSiteFolderに変更します
cd yourWebSiteFolder
フォルダーとサブフォルダーのグループ権限を再帰的に変更して、書き込み権限を有効にします。
find . -type d -exec chmod -R 775 {} \;
/home/yourUserName/yourWebSiteFolder/'
のモードが0755 (rwxr-xr-x)
から0775 (rwxrwxr-x)
に変更されました
ファイルおよびサブファイルのグループ許可を再帰的に変更して、書き込み許可を有効にします。
find . -type f -exec chmod -R 664 {} \;
結果は次のようになります。
WAS:
-rw-r--r-- 1 yourUserName www-data 7192 Oct 4 00:03 filename.html
CHANGED TO:
-rw-rw-r-- 1 yourUserName www-data 7192 Oct 4 00:03 filename.html
に相当:
chmod -R ug+rw foldername
許可は664または775のようになります。
「新しいユーザー」と呼ばれる新しいグループを作成し、そのグループにwww-dataと「新しいユーザー」を追加する必要があります。
Sudo gpasswd -a new_user new_group
次に、所有者をnew_user
に変更し、グループをnew_group
に変更できます。
Sudo chown -R new_user:new_group /var/www/site1
次に、site1へのグループレベルのアクセスを許可する必要があります。 www_dataは、new_groupに属しているため、サイトにアクセスできますが、new_userは、site2を所有するwww-dataグループに属していないため、site2にアクセスできません。
すべてのファイルがすでにwww-data
ユーザー(ls -slah
コマンドで確認できます)に属していると仮定すると、www-data
グループ(ファイルリストのユーザー名の後の次の列)に属する同じwww-data
グループにこれらのファイルの編集を許可します
# usermod -aG www-data username
既存のユーザーの場合、または
# adduser username www-data
新しく作成されたもの