www-dataが所有する/ var / wwwのユーザー権限を付与します


36

私はいくつかのウェブサイト用にシンプルなウェブサーバーをセットアップしています。レイアウトは次のようなものです:

site1: /var/www/site1/public_html/

site2: /var/www/site2/public_html/

以前は、rootユーザーを使用してファイルを管理し、その後、ファイルwww-dataを完了時に戻しました(WordPressサイト、WPアップロードを機能させるために必要)。これはおそらく最善の方法ではありません。

私は、site1のファイルを編集する権限を持ち、site2ではなく、「所有」されているファイルを停止しない別のユーザー(user1と呼びます)を作成する方法を見つけようとしていますwww-data。これを行う方法はありますか?

回答:


70

site1の所有権を確認すると、次のようなものが見つかります。

ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/

これは、ディレクトリがユーザールート、グループルートによって所有されていることを意味します。ユーザールートにはディレクトリへの書き込み権限(および読み取りと実行の権限)がありますが、グループルートには読み取りと実行の権限しかありません。

グループの所有権を別の(新しい)グループに変更し、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

1
また、www-dataをsite1グループに追加する必要があります。Wordpress Webインターフェースでファイルをアップロードおよび変更するとき。変更は、www-dataユーザーを使用してApacheによって行われます。そのため、ほとんどの場合、読み取り権限では不十分です。
ダン

3
このPermission deniedメッセージは「プライマリグループ」によるものではなく、ユーザーがまだ実際にそのグループに属していない(OSに関する限り)。ログアウトして再度ログインすると、期待どおりに動作しnewgrp - site1ます(実行せずに)。
0b10011

とにかくwww-data追加www-dataする必要がある場合、これはグループに書き込み許可を与えることとどのくらい正確に違いsite1ますか?
マット

@MattBorjaクエリは明確ではありません。www-data' write permissions? If that is the question, 「www-data」という名前のグループを指定することの何が問題なのかを尋ねていますか?グループではなく、ユーザーです。あなたの質問を誤解した場合はお知らせください。
マズーロ

これは、ユーザーがphpファイルマネージャーなどのphpスクリプトを介して相互のサイトにアクセスできるため、安全な構成ではないと思います。
qdinar

7

2つのグループを作成しますsite1grpと、site2grp

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、両方のサイトでユーザーおよびグループのアクセス許可が与えられ、各ユーザーはそれぞれのサイトでグループのアクセス許可を持ちます。


4

ホームフォルダーの下にワードプレスのルートフォルダーがある場合:

Ubuntu / apache

  1. ユーザーをwww-dataグループに追加します。

    クレジット www-dataグループへの書き込み権限の付与

    usermodユーザーを呼び出したい。だからそれは次のようになります:

    sudo usermod -aG www-data yourUserName
    

    www-dataグループが存在すると仮定

  2. ユーザーがwww-dataグループに属していることを確認します。

    groups yourUserName
    

    次のようなものが得られるはずです。

    yourUserName : yourUserGroupName www-data
    

    yourUserGroupNameは通常、ユーザー名に似ています

  3. ユーザーの所有権を保持したまま、フォルダーのグループ所有権を再帰的に変更します

    chown yourUserName:www-data -R yourWebSiteFolder/*
    
  4. ディレクトリをyourWebSiteFolderに変更します

    cd yourWebSiteFolder
    
  5. フォルダーとサブフォルダーのグループ権限を再帰的に変更して、書き込み権限を有効にします。

    find . -type d -exec chmod -R 775 {} \;
    

    のモードが/home/yourUserName/yourWebSiteFolder/'から0755 (rwxr-xr-x)に変更されました0775 (rwxrwxr-x)

  6. ファイルおよびサブファイルのグループ許可を再帰的に変更して、書き込み許可を有効にします。

    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のようになります。


3

「新しいユーザー」と呼ばれる新しいグループを作成し、そのグループに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にアクセスできません。


「site1にグループレベルのアクセス権を与える」という答えはわかりにくいのですが、「site1のグループをnew_groupに変更する」という意味chmodですか、それともモード()を変更するという意味ですか?あなたの答えは、安全であること(または物事を壊すこと)の違いを生む可能性のあるモードについては言及していません。
Lekensteyn

chmodOTHERSのすべての権限を取り消すことにより、モード()を変更することを意味しました。
エリコス

1

すべてのファイルが既にグループに属しているwww-dataユーザー(ls -slahコマンドで確認できwww-dataます)(ファイルのリストでユーザー名の後の次の列)に属していると仮定すると、www-dataこれらのファイルを編集できるようにユーザーを同じグループに追加できます

# usermod -aG www-data username

既存のユーザーの場合、または

# adduser username www-data

新しく作成されたもの

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.