ApacheとPHPを実行するかなり標準的なサーバーがセットアップされています。私が実行しているアプリはファイルを作成し、これらはApacheユーザーによって所有されていますwww-data
。SFTP経由でアップロードしたファイルは、自分のユーザーが所有していますcharlesr
。すべてのファイルはwww-data
グループの一部です。私の問題は、グループの一部であるwww-data
にもかかわらず、が所有するSFTPを介してファイルを変更または上書きできないことです。SSHセッションを介して問題なくファイルを変更できます。charlesr
www-data
だから私は何をすべきかわからない。所有ファイルを変更するためのSFTPセッション許可を与えるにはどうすればよいwww-data
ですか?
ちょっとした背景として、これらはサーバーをセットアップするときに自分のために書いたメモです。
Now set up permissions on `/var/www` where your files are served from by
default:
$ sudo adduser $USER www-data
$ sudo chgrp -R www-data /var/www
$ sudo chmod -R g+rw /var/www
$ sudo chmod -R g+s /var/www
Now log out and log in again to make the changes take hold.
The previous set of commands does the following:
1. adds the current user ($USER) to the `www-data` group;
2. changes `/var/www` to belong to the `www-data` group;
3. adds read/write permissions to the group that `/var/www` belongs to;
4. sets the SGID bit on `/var/www`; this final point bears some explaining.
次に、SGIDビットの設定が何を意味するのかを説明します(つまり、作成されたすべてのファイルは自動的にグループの/var/www
一部になりwww-data
ます)。
更新
この問題は、アプリ自体、またはより具体的には、アプリケーションフレームワーク(Kohana)が特定のファイルを0644(rw-r--r--)に設定したために発生したようです。すなわち、グループ書き込み不可。これは、ファイルも所有されているという事実と相まってwww-data
、としてログインしたときにSFTPを介してファイルを編集できなかったことを意味しますcharlesr
。SSH経由でファイルを編集できる理由がわかりません。私の推測では、sudoを使用したに違いありません。
Marty Friedのたゆまぬ助けのおかげで、私が現在使用しているアクセス許可戦略は次のとおりです。MartyFriedは、以前の戦略の欠陥を指摘し、Linuxアクセス許可の世界で私が最終的に手に入れるまで助けてくれました。ありがとう、マーティ!
概要
- のファイルとディレクトリの
/var/www
所有者root:webmasters
- すべての開発者は
webmasters
グループのメンバーである必要があります - のすべてのディレクトリを次の
/var/www
ように設定する必要があります:2775
またはu=rwx,g=rwxs,o=rx
(rwxrwx-rx) - のすべてのファイルを次の
/var/www
ように設定する必要があります:0664
またはug=rw,o=r
(rw-rw-r--)
次のものが所有する必要がありますwww-data:webmasters
(つまり、これらはApacheが書き込みできる必要があるディレクトリです)。
- アプリケーション/キャッシュ
- アプリケーション/ログ
- アップロードする
- client_helpers / upload
の仕方
/var/www
デフォルトでファイルの提供元のアクセス許可を設定するには:
sudo addgroup webmasters
sudo adduser $USER webmasters
sudo chown -R root:webmasters /var/www
sudo find /var/www -type f -exec chmod 664 {} \;
sudo find /var/www -type d -exec chmod 775 {} \;
sudo find /var/www -type d -exec chmod g+s {} \;
sudo chown -R www-data:webmasters application/cache/
[等...]
ここでログアウトして再度ログインし、変更を有効にします。
前の一連のコマンドは次のことを行います。
- という新しいグループを作成します
webmasters
。アプリファイルへの書き込みアクセスを必要とするすべてのユーザーがこのグループに追加されます。 - 現在のユーザー(
$USER
)をwebmasters
グループに追加します。 /var/www
to の所有者root
とグループをwebmasters
groupに変更します。- のすべてのファイルに664個の許可(-rw-rw-r--)を追加します
/var/www
。 - のすべてのディレクトリに775のパーミッション(drwxrwxr-x)を追加し
/var/www
ます。 - SGIDビットをオンにし
/var/www
、その中のすべてのディレクトリを設定します。この最後のポイントには、いくつかの説明があります。また、同じことを行うために、chmodの8進数の前に2(例:2644)を置くこともできます。 - 所有者を
www-data
(Apacheのユーザー)に設定し、提供されたディレクトリのグループをに設定しwebmaster
ます。これにより、Apacheおよびwebmasters
グループ内の誰でもディレクトリが書き込み可能になります。書き込み可能にする必要がある他のすべてのディレクトリにも同じことを行います。
/var/www
そのグループに追加せずにどのように書き込みますか?