![www-data グループは sftp 後に書き込みますか?](https://rvso.com/image/1413926/www-data%20%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AF%20sftp%20%E5%BE%8C%E3%81%AB%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
Apache ユーザーがファイルを読み書きできるようにし、SFTP ユーザーがファイルをアップロードして他の SFTP ユーザーと Apache の両方で利用可能 (rwX) にし、他のすべてのユーザーが読み取りを許可できるようにしたいと思います。
psst: I know this question comes up a lot, and I've been reading answers and trying many many things for two days now and am now thoroughly confused
。また私のサイトへの www-data 書き込みアクセスを許可するとセキュリティ上のリスクが生じることは承知していますが、ここで議論したいのはそれについてではありません。
手順は次のとおりです:
usermod -aG www-data tim
mkdir -p /var/www/mysite/public_html
# now upload/untar the site, etc. not shown here #
chown -R www-data:www-data /var/www/mysite
chmod -R u+rwX,go+rwX,g+s,o-w /var/www/mysite
# now make the apache virtual host and so on .. not shown here #
内部のファイルはpublic_html
次のように設定されています - グループには書き込み権限があります:
-rw-rwSr-- 1 www-data www-data favicon.ico
ここで、sftp を使用して「tim」アカウントとしてログオンし、public_html フォルダーに新しいファイルをアップロードして、その権限を確認します。
-rw-r--r-- 1 tim wwww-data COPYING.txt
だから私は失ったg+s
グループを継承するように親フォルダーに追加したつもりだったのに、グループに書き込み権限が与えられませんでした。
どうやら、これはグループ /mask/ も継承することを意味しているわけではないようです。どこかで (参照先を紛失しましたが) SFTP は umask を尊重しないと読みました。権限が失われているのはそこのようですが、修正方法がわかりません。
編集 umaskリファレンスを見つけて試してみました -http://john.parnefjord.se/node/62- ログイン時にファイルが実行されていることは確認できますが、アップロード後もマスクは g+w に設定されません。
答え1
あまり調べませんでしたが、ローカル サーバーで異なるグループ権限を使用して 2 ~ 3 回試しました。
ここで私が理解しているのは、ローカルシステムでファイルに与えられた権限が何であれ、まったく同じ権限リモート サーバーのファイルによって取得されました。
答え2
プロセスが UNIX 上でファイルを作成する場合、プロセスはファイルに割り当てられる権限を制御します。プロセスは、ファイル作成システム コールで、通常 0666 または 0777 の権限セットを指定します。権限はプロセスの umask によって変更され、ファイルの実際の権限が生成されます。親ディレクトリの特殊フラグはこのプロセスの一部ではありません。プロセスは、 という別のシステム コールを使用して、既存のファイルの権限を変更することもできますchmod()
。
SFTP は実際にはリモート ファイル システム プロトコルです。クライアントがサーバー上にファイルを作成すると、クライアントはサーバーに新しいファイルに与える権限を正確に伝えることができます。クライアントはchmod()
リモートで呼び出して、既存のファイルの権限を変更することもできます。私の知る限り、OpenSSH SFTP サーバーはサーバー管理者がこれを制限する手段を提供していません。
おそらく私が行うことは、フォルダ全体をスキャンしてファイルの権限を修正するシェル スクリプトを作成することです。cron
数分ごとにスクリプトを実行できます。次のようなスクリプトで開始できます。
#!/bin/sh
cd /var/www/mysite || exit 1
find . -type f ! -perm 0664 -exec chmod 0664 '{}' ';'