まず、背景知識は次のとおりです。
- /dev/md1 は、基本ファイルストレージとして使用される RAID-0 アレイです。 /var/smb にインストールされます。
- / dev / md2は、/ dev / md1から取得したバックアップスナップショットを保存する別のRAID-0アレイです。 /var/smb/snapshots にインストールされます。
- Sambaでは、/var/smb/files(パブリック共有ファイル)、/var/smb/private(個人ファイル)、および/var/smb/snapshots(バックアップスナップショットへの読み取り専用アクセスを提供)の3つのディレクトリが提供されます。 。
smbusersグループのユーザーだけがファイルとスナップショット共有にアクセスできます。同様に、smbprivateグループのユーザーだけが個人用ファイルにアクセスできます。また、Linux権限は、適切なグループに属していないユーザーがローカルシステムとSamba共有スナップショットのファイルと個人ディレクトリにアクセスするのを防ぎます。
これは、セルフサービスの「バックアップから復元」オプション(ユーザーが単にスナップショット共有にアクセスして自分で復元したいファイルを検索できる)を備えたフル機能のファイルサーバーがあることを意味するので、優れていますが、これまでは1つの重要な要素がありません: ローカルシステムの /var/smb/snapshots ディレクトリへの非ルートアクセス。
スナップ写真〜しなければならないすべての一般ユーザーには厳密に読み取り専用ですが、バックアップ操作のためにファイルシステムを読み取り/書き込みでマウントする必要があります。このディレクトリに対する現在の権限は次のとおりです。
root@odin:/var/smb# ll
total 40
drwxrwxr-x 7 root root 4096 2011-04-11 15:18 ./
drwxr-xr-x 14 root root 4096 2011-04-10 19:07 ../
drwxrwx--- 15 kromey smbusers 4096 2010-12-07 13:09 files/
drwxrwx--- 7 kromey smbprivate 4096 2010-04-07 07:08 private/
drwxrwx--- 3 root root 4096 2011-04-11 15:16 snapshots/
今私が望むのは、ルートではなくユーザーに厳密に読み取り専用の方法でスナップショットディレクトリへのアクセスを提供することです。ただし、バックアップを実行するには読み取り/書き込みで作成する必要があるため、/ dev / md2を読み取り専用としてマウントすることはできません。単にバックアップのために読み取り - 書き込みとして再マウントし、読み取り専用で再マウントすることはできません。これは、ユーザーがバックアップに書き込むことができる別の時間ウィンドウを提供します。
以前は、スナップショットディレクトリを読み取り専用NFSエクスポート(ローカルホストのみ)に設定し、それをローカルにマウント(ルート以外のトラバーサル権限のないディレクトリの下の元のセキュリティディレクトリを使用)してこれを実行しましたが、これはハッキングのように感じます。これを達成するより良い方法があるはずです。そのオプションを試しましたが、両方のディレクトリmount --bind
に異なるアクセスレベル(読み取り専用と読み取り - 書き込みなど)を持つ機能が不足しているようです(何も欠けていない限り:)mount -r --bind dir1 dir2
。
NFSなしでこれを行う方法についてのアイデアはありますか?それともこれが最善の選択ですか?
簡単に言うと:そのファイルシステムにバックアップされたファイルの元の権限と所有権を維持しながら、選択したユーザーはファイルシステムの内容を読み取り/書き込み可能にし、他のすべてのユーザーは読み取り専用に厳密に設定するにはどうすればよいですか。
答え1
@Gillesは非常に近く、Ubuntu 10.10の目標からわずかに外れています(Debian Squeezeとおそらく他のものへの適合性を疑う理由はありません)。他のユーザーがアクセスできないフォルダ(/var/smb/hidden/snapshots、ここで/var/smb/hiddenには権限770があり、root:rootが所有する)の下に読み取り/書き込みスナップショットディレクトリをマウントした場合読み取りを保護できます。 - 他のユーザーのマウントを作成します。その後、mount --bind
後者を使用してmount -o remount,ro
インストールをアクセス可能な場所にバインドし、読み取り専用に設定できます。
(反対の方法(元のファイルシステムを読み取り専用にマウントしてから読み取り - 書き込みにバインド)は機能しません。同様に、元のファイルシステムを読み取り専用にマウントしてから読み取り専用にバインドしてから、生の読み取りと書き込みを再度マウントすると、バインドされたディレクトリも読み書きできます。
要約すると、解決策は次のとおりです。
mkdir /var/smb/hidden
chown root:root /var/smb/hidden
chmod 770 /var/smb/hidden
mkdir /var/smb/hidden/snapshots
mksdir /var/smb/snapshots
mount /dev/md2 /var/smb/hidden/snapshots
mount --bind /var/smb/hidden/snapshots /var/smb/snapshots
mount -o remount,ro /var/smb/snapshots
したがって、バックアップを読み書きすることができ、通常はアクセスできる短い時間がありますが、要件には十分ではありません。これらの短いミリ秒ウィンドウが大きすぎる場合は、/ var / smbの権限を持ついくつかのトリックを使用して、この短いウィンドウの間にそれらを保護することができます(巡回不可能にし、マウントをバインドしてから再巡回可能にします)。
これで、すべてを1つのスクリプトに入れることができます。すべてがインストールされた後、起動プロセスにこれを挿入すると、バインドされているディレクトリを共有しようとしているSambaで発生する可能性がある競合を回避できます。
メモ:あなたのディストリビューションがGillesによって公開されたバージョンをサポートしている場合は、その解決策がmount -o bind,ro
ここにあることをお勧めします。ただ別のディレクトリにバインドすると、インストールオプションを変更できないUbuntuまたは他のディストリビューションのユーザーが使用します。
答え2
この答えはDebianで動作します(lennyとsqueezeでテスト済み)。調査の結果、これはDebianパッチでのみ機能することがわかりました(例:Ubuntu)。
あなたはそれを使用することができますmount --bind
。パブリックにアクセスできないディレクトリに「実際の」ファイルシステムをマウントします。よりアクセスしやすい読み取り専用のバインドマウントを作成します。読み取り/書き込みアクセスで公開する部分の読み取り - 書き込みバインドマウントを作成します。
mkdir /media/hidden /media/hidden/sdz99
chmod 700 /media/hidden
mount /dev/sdz99 /media/hidden/sdz99
mount -o bind,ro /media/hidden/sdz99/world-readable /media/world-readable
mount -o bind /media/hidden/sdz99/world-writable /media/world-writable
あなたのユースケースでは、次のことができると思います。
mkdir /var/smb/hidden
mv /var/smb/snapshot /var/smb/hidden
mkdir /var/smb/snapshot
chmod 700 /var/smb/hidden
chmod 755 /var/smb/hidden/snapshot
mount -o bind,ro /var/smb/hidden/snapshot /var/smb/hidden/snapshot
つまり、物理snapshot
ディレクトリを制限されたディレクトリにsnapshot
置きますが、誰にでも読み取り権限を与えます。親エントリへのアクセスが制限されているため、直接アクセスできません。すべての人がそのパスを介して読み取れるように、アクセス可能な場所に読み取り専用でバインドマウントします。
(バインドマウントが導入されてから数年後に読み取り専用のバインドマウントが可能になったので、いつ動作しなかったのかを覚えておくことができます。