サーバーの「/home」ディレクトリツリーをバックアップするために「backup」アカウントを作成し、setfaclを使用してディレクトリ全体を読み取ることができました。私のcronジョブは毎晩rootとしてこのコマンドを実行します。
setfacl -R -m u:backup:rx,d:u:backup:rx /home
いいですね。 1つの問題を除いて、このコマンドを実行するたびにSSHキーのグループ権限が変更されます。
me@myserver:~/.ssh$ ls /home/me/.ssh/id_rsa -l
-rw-r-x---+ 1 me me 1679 Jan 8 18:35 /home/me/.ssh/id_rsa
さて、これでグループの読み取りが可能になったので、これにより私のsshプログラムがクラッシュします。奇妙なことに、getfaclは権限に同意しません。
me@myserver:~/.ssh$ getfacl /home/me/.ssh/id_rsa
getfacl: Removing leading '/' from absolute path names
# file: home/me/.ssh/id_rsa
# owner: me
# group: me
user::r--
user:backup:r-x
group::---
mask::r-x
other::---
getfaclはファイルをグループから読み取れないと見なします。明らかなコマンドを実行すると
chmod 400 id_rsa
権限は固定されていますが、元のコマンド(setfacl -R -mu:backup:rx、d:u:backup:rx / home)を再実行するたびに復元されます。どうなりますか?
注:これらのセキュリティ問題について心配する必要がないように、id_rsaをバックアップしたいと思います。
答え1
acl(5)
マニュアルページを見ると次のようになります。
ACLエントリとファイル権限ビットの対応
ACLによって定義された権限は、ファイル権限ビットによって指定された権限の親セットです。
ファイル所有者、グループ、その他の権限と特定のACLエントリとの間には対応関係があります。所有者権限は、ACL_USER_OBJエントリの権限に対応します。ACLにACL_MASKエントリがある場合、グループ権限はACL_MASKエントリの権限に対応します。。それ以外の場合、ACL に ACL_MASK エントリがない場合、グループ権限は ACL_GROUP_OBJ エントリの権限に対応します。その他の権限は、ACL_OTHER_OBJ エントリの権限に対応します。
getfacl
出力を見ると、そのファイルがないとmask
ファイルにアクセスできないことがわかります。r-x
backup
実際にr-x
そのモードになっても、グループがファイルにアクセスできるという意味ではありませんme
(そうではありません)。他の人(ユーザーまたはグループ)がアクセスできます。。
しかし、ssh
同じだから十分ではありません。
を実行するとchmod 400
マスクが消去されます。つまり、ユーザーはbackup
マスクにアクセスできなくなります。
これは少し混乱していますが、おそらく2つの権限メカニズムを調和させるための最良の方法です。
問題が発生した場合は、バックアップするか、root
その機能を使用する必要があります。
答え2
私のSSHはこのようには動作しません(openssh-6.0p1-2.3.3)。
ssh呼び出しのstrace出力を調べるのは興味深いでしょう(ファイルのみを確認してください)。
私は一般的にこれが良い戦略であると思う。バックアップにルートを使用しないのはなぜですか?それとも、少なくともバックアッププロセスにCAP_DAC_READ_SEARCHとCAP_DAC_OVERRIDEを提供しますか(setcapまたはApparmorを使用)。