私は Cloud9IDE の SSH ワークスペースを使用していますが、さまざまな理由から、SSH トンネルを root として作成する必要があります。これは実際には問題ではありませんが、作成するファイルとディレクトリは実際にはユーザー フォルダーの下にあります (この場合、ユーザーは「foobar」なので、ファイルは /home/foobar/public_html/dev に作成されます)。
問題は、ユーザー「root」が実際にファイルを作成しているため、サーバーがユーザー「foobar」を使用してページを提供するため、ブラウザでそれらのファイルに移動すると 404 が返されることです。
ファイルが root ユーザーによって作成された場合でも、ユーザー foobar がそのファイルをそのユーザーが作成したかのように読み取り、実行できるようにする方法が必要です。
私は、root と foobar を含むグループで setfacl -Rdm を使用しようとしましたが、その結果、foobar はディレクトリ内のファイルを提供できなくなりました。
例えば:
-rw-r--r-- 1 foobar foobar 125 May 15 11:26 die.html
-rw-r--r-- 1 root root 127 May 15 12:20 dies.html
この場合、ファイル「die.html」は適切に提供されますが、「dies.html」は所有者とグループが原因で 404 になります。
これを解決する方法について何か考えはありますか? 繰り返しますが、これは現在存在するファイルだけでなく、将来のすべてのファイルに対して実行する必要があります。
答え1
好きなのを選びな:
chown foobar:foobar *
chown foobar:foobar dies.html
chown foobar *
chown foobar dies.html
したがって、作成されたすべてのファイルを foobar が所有するには、次の手順を実行する必要があります。
実行しcrontab -e
てこれを入力します:
* * * * * while true; do chown foobar:foobar -R /home/foobar/public_html/dev/* & sleep 1; done
保存して、cronに権限を委譲します
答え2
を入力して ssh トンネルを確立した後、ユーザー ID を foobar に変更しsu foobar
、foobar のパスワードを入力します。
答え3
新しいグループを作成し、開発者 そして、そのグループにファイルへの読み取り/書き込みアクセスを必要とするすべてのユーザーを配置します。そして、そのディレクトリのグループを次のように変更します。開発者。
このコマンドを使用すると:
chgrp -R devs /home/foobar/public_html/dev
その後のセット設定された次のコマンドでそのディレクトリ内のビットを削除します:
chmod -R g+s /home/foobar/public_html/dev
この時点で、そのディレクトリに作成されたすべてのファイルはグループによって所有されます開発者そのグループ内のすべてのユーザーは、ファイルへの読み取り/書き込みアクセス権を持ちます (権限によって異なります)。
setgidとは何かを知りたい場合はこのリンクを確認してください。