root以外のユーザーが所有するファイルを読み込む

root以外のユーザーが所有するファイルを読み込む

バックアップサーバーからサーバーをバックアップしています。バックアップされた各サーバーには、バックアップサーバーに独自のアカウントがあり、ファイルは再同期されます。回復を簡素化するには、権限を維持することが重要です(rsync -pを使用)。

ファイルを読み込んで統計を生成できるスクリプトを作成しようとしています。ルートで実行されるスクリプトが気に入らず、スクリプトがすべてのユーザーに対してすべてのファイルを読み取ることができる必要があるため、すべてのバックアップユーザーに対してスクリプトを実行することはできません。しかし、ファイルが600などにchmoddedされると、問題が発生します。権限に触れたくありませんが、root と所有者以外のユーザーは読めません。

ルート以外の特定のユーザーは、権限レベルに関係なくディレクトリまたはパーティション内のすべてのファイルを読み取ることができる必要があります(ファイル所有者はこれを防ぐことはできません)。これを達成する方法はありますか? ZFSボリュームを使用してFreeBSDを実行しています。

答え1

使用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/

sudoers(5)詳細については、以下のマニュアルページを参照してくださいCmnd_list

答え2

バックアップユーザーのみが実行できるsuidバージョンを作成できますcat(バックアップユーザー専用のグループを作成し、そのグループのみが実行可能ファイルを読み取ることができるように設定)。これにより、cat興味のあるディレクトリのファイルのみを読み取ることができます。 (シンボリックリンクを無効にして、このようなトリックを知りたい場合もあります/dir/../otherdir/。)

その後、スクリプトはこの実行可能ファイルを使用してroot権限なしでファイルを読み取ることができます。

答え3

警告する:Stephaneが以下の説明で指摘したように、ファイル所有者はまだACLをキャンセルできます。

マシンへのルートアクセス権がある場合は、次のコマンドを使用してこれを実行できます。ACL:

setfacl -R -m u:USERNAME:r /path/to/direcory

これにより、ユーザーUSERNAME/path/to/directory

答え4

ZFSはこれにいくつかのメカニズムを提供します。

メカニズムの1つはまだ研究中であり、まだ実装されていませんが、「所有者」オーバーライドを使用してデータセットをマウントできます。この場合、スナップショットを複製し、所有者をバックアップユーザーで上書きし、バックアップを作成してから複製を削除できます。欠点は、ファイルの実際の所有権をバックアップしないことです。

最善の解決策はおそらくZFS nfsv4スタイルのACLです。

関連情報