バックアップサーバーでサーバーをバックアップしています。バックアップされる各サーバーは、バックアップサーバー上に独自のアカウントを持ち、ファイルはrsyncされます。復元を簡素化するために、権限はそのまま(rsync -pを使用)にしておくことが重要です。
ファイルを読み取って統計を作成できるスクリプトを作成しようとしています。このスクリプトがrootユーザーの下で実行されるのは好ましくありません。また、すべてのユーザーからすべてのファイルを読み取ることができるはずなので、すべてのバックアップユーザーに対して実行することは不可能です。ただし、これにより、たとえばファイルがchmodded 600の場合に問題が発生します。アクセス権を変更したくありませんが、rootと所有者以外の別のユーザーはファイルを読み取ることができません。
特定の-非root-ユーザーは、アクセス許可レベルに関係なく、ディレクトリまたはパーティション内のすべてのファイルを読み取ることができる必要があります(そして、ファイルの所有者にはそれを防ぐ方法がありません)。これを達成する方法はありますか? FreeBSDをZFSボリュームで実行しています。
Sudo
を使用します。
sudoers
ファイルに正確で特定のコマンドがリストされている場合、コマンドはsudoers
にリストされているとおりに呼び出す必要があります。そうしないと、コマンドは拒否されます。
例えば。:
_backupuser ALL=(root) /usr/bin/rsync -aH /files/to/backup/ /copy/of/backup/
_
この例では、ユーザーbackup
は、表示されているとおりにコマンドを実行できます。
_Sudo /usr/bin/rsync -aH /files/to/backup/ /copy/of/backup/
_
_Sudo rsync...
_ではなく_Sudo /usr/bin/rsync
_を呼び出すと、コマンドは失敗します。または、フラグまたはパスが異なる場合、コマンドは失敗します。
スクリプトでこれを行う場合は、これらのコマンドをパスワードなしで使用できるようにする必要があります。
_backupuser ALL=(root) NOPASSWD: /usr/bin/rsync -aH /files/to/backup/ /copy/of/backup/
_
詳細については、_Cmnd_list
_のsudoers(5)
のマニュアルページを参照してください。
警告:ステファンが以下のコメントで指摘したように、ファイルの所有者は引き続きACLを取り消すことができます。
マシンへのrootアクセス権がある場合、これを ACLs で実行できます。
setfacl -R -m u:USERNAME:r /path/to/direcory
これにより、USERNAME
に/path/to/directory
の下のすべてのファイルとディレクトリへの読み取りアクセス権が付与されます。
バックアップユーザーだけが実行できるsuid
バージョンのcat
を書くことができます(グループをバックアップユーザー専用にして、実行可能ファイルをそのグループだけが読み取り可能にします)。このcat
では、関心のあるディレクトリのファイルのみを読み取ることができます。(おそらく、シンボリックリンクを禁止し、/dir/../otherdir/
のようなトリックに注意する必要があります。)
その後、スクリプトはこの実行可能ファイルを使用して、root権限なしでファイルを読み取ることができます。
Bindfs は Fuse であり、さまざまな権限と所有権を持つディレクトリツリーのビューを提供します。 FreeBSD用のポートはありませんが、ソースからコンパイルできます。
すべてのファイルが読み取り可能な/some/files
のビューをユーザーbackupper
(およびそのユーザーのみ)に提供するには、backupper
のプライベートディレクトリに/some/files
の全世界で読み取り可能なビューをマウントします。
mkdir -p ~backupper/spyglass/files
chown backupper ~backupper/spyglass
chmod 700 ~backupper/spyglass
bindfs -p a+rX-w /some/files ~backupper/spyglass/files
ZFSにはこのためのメカニズムがいくつかあります。
メカニズムの1つはまだ開発中であり、まだ実装されていませんが、データセットを「所有者」オーバーライドでマウントできます。この場合、スナップショットのクローンを作成し、所有者を上書きしてバックアップユーザーにマウントし、バックアップしてから、クローンを破棄できます。欠点は、ファイルの実際の所有権をバックアップしないことです。
最善の解決策は、おそらくZFS nfsv4スタイルのACLです。
FreeBSD固有のテクノロジを使用してこの問題を解決する方法については、2つのアイデアがありますが、まだ試していません。
トウガラシを使用します。これは私の好みの方法です。また、最近Linuxに移植されたため、そこでも動作するはずです。それはこのようになります:
必須のアクセス制御を使用します。これはLinux AFAIKでは機能せず、セットアップがより厄介です。それはこのようになります:
ugidfw add subject uid root jailid BACKUP_JAIL_ID mode rsx