- 私はrsyncを使ってnginxが提供するいくつかの静的HTMLを配布しています。
- rysncを実行しているユーザーは「jenkins」です。
- nginxはwww-dataグループを使用してこのフォルダにアクセスします。
- Jenkinsはwww-dataのメンバーです。
ssh
問題のUbuntu 14.04サーバーに入り、実行しました。
sudo chown -R jenkins:www-data /home/jenkins/thesite
その後、別のコンピュータで実行します。
rsync -rtzh --delete --omit-dir-times _site/ jenkins@the_server.com:/home/jenkins/thesite
完了すると、一部(すべてではない)ファイルグループがJenkinsに設定されます。したがって、nginx
アクセスできません。
私が変更したファイルにのみ権限の問題があるのではなく、Jekyllを使用してファイルを作成していますが、これは影響を及ぼす可能性があります。
Windows の世界では、親フォルダの権限を設定し、サブフォルダを継承するように指示します。 Linuxにも似ていますか?それとも私が何か愚かなことをしているのでしょうかrsync
?
答え1
これには少なくともいくつかの方法があります。しかし、まずLinux/Unixの権限の世界がWindowsの世界とどのように対応するかを説明します。
Windowsには継承可能な権限がありますが、Linuxシステムは伝統的にそうではありません(ただし、ACLを使用できるため、今は無視します)。 Linux権限は、所有者、グループ、その他(「その他」)の3つの部分に分けられます。それぞれ読み取り、書き込み、実行(ファイル)/検索(フォルダ)が可能です。ファイルの所有者はファイル作成者です。所有者は自分が属するグループをグループに設定できます。
rsyncを使用すると、次のことを試して達成する必要があります。
- 所有者はJenkinsです。 (これは変更できないようです。)
- グループはwww-dataです(したがって、nginxがファイルを読み取ることができることを確認できます)。
- ファイル宛先の権限はユーザー:読み取り+書き込み、グループ:読み取り、その他:読み取り、フォルダに対する権限はユーザー:読み取り+書き込み+検索("実行")、グループ:読み取り+検索、その他:読み取り+検索です。必要に応じて他の権限を削除できます。
次のようにファイルを回復できるので、既存のファイルが適切であるとします。
chown -R jenkins:www-data /home/jenkins/thesite
chmod -R u+rw,g=u,g+s,o=u /home/jenkins/thesite
rsyncコマンドの場合は、Windowsファイルの権限を無視して独自の基準を適用する必要があります。
rsync -rptzh --delete --omit-dir-times --chmod=u+rw,go=rX,Dg+s _site/ jenkins@the_server.com:/home/jenkins/thesite
rsyncのフラグはchmod
次のとおりです。
u=rw
- 所有者(「ユーザー」)には(少なくとも)読み取りおよび書き込み権限があります。go-rX
- グループおよびその他(「その他」)の書き込み権限が削除されます。Dg+s
- グループ名がツリールートから継承されるように、フォルダ( "ディレクトリ")にgroup-setgidビットを追加しました。