別のユーザーが所有するファイルを非rootとして読み取る


9

バックアップサーバーでサーバーをバックアップしています。バックアップされる各サーバーは、バックアップサーバー上に独自のアカウントを持ち、ファイルはrsyncされます。復元を簡素化するために、権限はそのまま(rsync -pを使用)にしておくことが重要です。

ファイルを読み取って統計を作成できるスクリプトを作成しようとしています。このスクリプトがrootユーザーの下で実行されるのは好ましくありません。また、すべてのユーザーからすべてのファイルを読み取ることができるはずなので、すべてのバックアップユーザーに対して実行することは不可能です。ただし、これにより、たとえばファイルがchmodded 600の場合に問題が発生します。アクセス許可を変更したくありませんが、rootと所有者以外の別のユーザーはファイルを読み取ることができません。

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


これはこのサイトでの最初の質問でした:)あなたはおそらくこれも同様に調べることができます。unix.stackexchange.com/questions/91488/…–
Ramesh、

回答:


4

を使用し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)manページを参照してくださいCmnd_list


いい案。ls、cat、head、tailなどのコマンドをsudoersファイルに追加し、root権限で実行してすべてのファイルを読み取ることができるようになりました。ユーザーがシステム上のすべてのファイルを読み取ることができるため、誰にとっても最善の解決策ではないかもしれませんが、それは私の設定では問題ではありません。
エヴィアノン2014年

まあ、もしあなたがSolarisを使っていたら、RBACとを提案したでしょうpfexec。しかし、BSD sudoを使用しているので、そうする必要があります。
バハマート2014年

4

バックアップユーザーのみが実行可能なsuidバージョンを作成することができcatます(バックアップユーザー専用のグループを作成し、そのグループのみが実行可能ファイルを読み取り可能にします)。これcatにより、関心のあるディレクトリ内のファイルのみを読み取ることができます。(おそらく、シンボリックリンクを禁止し、などのトリックに注意する必要があり/dir/../otherdir/ます。)

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


4

警告:ステファンが以下のコメントで指摘したように、ファイルの所有者は引き続きACLを取り消すことができます。

マシンへのrootアクセス権がある場合は、ACLを使用してこれを行うことができます

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

これによりUSERNAME、にあるすべてのファイルとディレクトリへの読み取りアクセスが使用可能になります/path/to/directory


ファイルの所有者は、それらのACLを削除できます。
ステファンChazelas

@stephaneChazelasああ。これがrootによって行われたとしても?気付かなかった。あなたはそれを回避する方法を知っていますか?
terdon

いいえ、LinuxではLinux機能とLSMの組み合わせを検討していました。FreeBSDでは私にはわかりません。
ステファンChazelas

1

Bindfsは、さまざまな権限と所有権を持つディレクトリツリーのビューを提供するFUSEファイルシステムです。FreeBSD用のポートはありませんが、ソースからコンパイルできます。

すべてのファイルが読み取り可能な場所のbackupperビューをユーザー(およびそのユーザーのみ)に提供する/some/files/some/filesは、のプライベートディレクトリに世界中から読み取り可能なビューをマウントしますbackupper

mkdir -p ~backupper/spyglass/files
chown backupper ~backupper/spyglass
chmod 700 ~backupper/spyglass
bindfs -p a+rX-w /some/files ~backupper/spyglass/files

0

ZFSにはこのためのメカニズムがいくつかあります。

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

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


0

FreeBSD固有のテクノロジーを使用してこの問題を解決する方法については、2つのアイデアがありますが、まだ試していません。

  • トウガラシを使用します。これは私の好みの方法です。また、最近Linuxに移植されたため、そこでも動作するはずです。それはこのようになります:

    1. CAP_WRITEをドロップするdrop-cap-writeコマンドを作成し、コマンドラインで指定されたコマンドを実行します
    2. sudoを使用して、バックアップユーザーがパスワードなしでそのコマンドを実行できるようにする
    3. 必要に応じて、sshd_configのForceCommandディレクティブを使用して、バックアップユーザーがログインするたびにそのコマンドを自動的に実行します。これにより、リモートユーザーはバックアップスクリプトでdrop-cap-writeを指定する必要がなくなります。
  • 必須のアクセス制御を使用します。これはLinux AFAIKでは機能せず、セットアップがより厄介です。それはこのようになります:

    1. rootdirが/であるバックアップ刑務所を作成します。jailidをハードコードします。
    2. バックアップ刑務所でsshdを実行します。通常のsshdでrootログインを許可しない場合でも、ここでrootがログインできるようにします
    3. /etc/rc.confにugidfw_enable = "YES"を設定します
    4. 次のようなugidfwルールを使用します。

    ugidfw add subject uid root jailid BACKUP_JAIL_ID mode rsx

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.