setfacl を使用して rsync で Apache の再帰権限を作成する

setfacl を使用して rsync で Apache の再帰権限を作成する

私はローカルに Dokuwiki をインストールしており、定期的に rsync でサーバーに同期しています。また、友人に ssh アカウントを与えて、彼のパブリック Dokuwiki インストールをホストするつもりです。しかし、アクセス権限に問題があります。ミラーは読み取り専用ですが、Dokuwiki にはキャッシュなどのデータ ディレクトリへの書き込み権限が必要です。Apache サーバーはユーザー www-data として実行され、rsync を実行するたびに権限がリセットされます。

このサイトの他の回答に基づいて、setfacl を使用してデフォルトの権限を設定しようとしましたが、うまくいかないようです。getfacl は権限が存在することを示していますが、Dokuwiki は実行されず、ユーザー www-data としてファイルを書き込もうとしても機能しません。何が足りないのでしょうか?

wiki/data$ sudo su www-data
$ pwd
/var/www/wiki/data
$ whoami
www-data
$ touch hi
touch: cannot touch `hi': Permission denied
$ getfacl /var/www/wiki/data
getfacl: Removing leading '/' from absolute path names
# file: var/www/wiki/data
# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

権限を設定するために使用したコマンドは次のとおりです。

setfacl -R -d -m u:www-data:7 /var/www/*

答え1

問題 1: Rsync が ACL を削除している

ACL 権限を適用した後、 を実行するときに、またはスイッチrsyncのいずれかを使用していることに注意する必要があります。これは、同期を実行するときにこれらを確実に保持するように指示します。-A--aclsrsync

rsync マニュアルページからの抜粋

    -A, --acls                  preserve ACLs (implies -p)

問題2: ACL権限がない

あなたの例を見ると、次のような権限が含まれています。

伝統的なパーマ

# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x

ACL について

default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

しかし、これらの ACL は新しいオブジェクトの作成用であり、思った通りには機能しません。www-dataデフォルトの ACL 権限に加えて、ユーザーのエントリを作成する必要があります。

$ pwd
/tmp/somedir

$ mkdir data
$ setfacl -R -d -m u:gopher:7 data

$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

実験

dataそれでは、ユーザーとしてディレクトリにファイルを書き込んでみましょうgopher

$ sudo -u gopher touch /tmp/somedir/data/afile
touch: cannot touch `/tmp/somedir/data/afile': Permission denied

見覚えがあります?

追加のACL権限の追加

これは、ユーザーに ACL を追加する必要があるためですwww-data。デフォルトのルールはアクセス用ではなく、新しいファイル/ディレクトリを作成するためのものです。

$ setfacl -R -m u:gopher:7 data

ディレクトリをもう一度確認しますdata

$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
user:gopher:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

gopher唯一の違いは、ユーザーがアクセスできることを示す ACL が存在することですrwx

user:gopher:rwx

実験を繰り返す

ディレクトリにデータを再度書き込んでみてください:

$ sudo -u gopher touch /tmp/somedir/data/afile
$

うまくいきました!!! 結果のファイルを再確認してください:

$ ls -l /tmp/somedir/data/afile
-rw-rw-r--+ 1 gopher gopher 0 Oct  7 21:36 /tmp/somedir/data/afile

関連情報