私はローカルに 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
--acls
rsync
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