web-dev-qa-db-ja.com

コンピューター間でユーザー権限をext4外付けハードドライブに移植できますか?

マシン間で移動される可能性が最も高い外付けUSB 3ディスクドライブ(容量2TB)があります。ディスクにはGUIDパーティションテーブルとext4パーティションがあります。プロセスを昇格しない限り、ディスクに書き込むことができません(Sudo)。

現在、私は次のいずれかまたは両方を試すことを考えています、そしてそれぞれの短所を知りたいです-

  1. chmod 777 /mnt/externalDrive
  2. chown nobody:nogroup /mnt/externalDrive

777のアクセス許可を与え、user1(UID:1005)がそれに書き込み、後でuser7がUID:1005である別のコンピューターにディスクを移動すると、どうなりますか? user7はそのコンピューター上のファイルの所有者になりますか?定期的に実行する必要があるようですchown -R nobody:nogroup /mnt/externalDriveディスク上。

私が明らかに悪い習慣を検討しているものはありますか?ディスクにはビデオ、音楽、写真が含まれている可能性が高く、財務データのように保護する必要はありません。

16
Lord Loh.

特に、複数のシステムがある場合、マルチユーザーシステムの問題です。 ;)ありません本当にあなたが望むことをするための素晴らしい方法。頭に浮かぶアプローチは

  • 外付けドライブを使用しているすべてのマシンでアカウントのUIDが同じである(ほとんどの場合、すべてのマシンが制御下にあるわけではないため、実際には実行できません)
  • 所有者/グループのconecptを認識しないファイルシステムを使用している(FATまたはNTFSが頭に浮かぶが...ああ、いいえ)

最も効果的なアプローチは、一般的な方法に戻ることです。ほとんどの(少なくとも)Linuxシステムでは、通常共通のGIDを持つグループがいくつか存在します。たとえば、usersは、ほとんどのLinuxディストリビューションでGID _100_になります。このグループにそれぞれのユーザーアカウントを持たせることができれば、

  1. ドライブ上のすべてのファイルとディレクトリをこのグループに所有させる
  2. どういうわけか、それらのファイルとディレクトリに適切なグループ権限を持たせる
  3. どういうわけか、適切なグループ所有権の応答で新しいファイルを作成することができます。権限。

最初と2番目のポイントは簡単に達成できます(chownchmod)。 3番目のポイントは少しトリッキーです。

「グループ所有権」の部分は比較的簡単です。ドライブのすべてのディレクトリにSGIDビットを設定できます。ディレクトリに適用されるSGIDビットは、BSDのように動作するようにカーネルに指示します。BSDは、ファイル/ディレクトリを作成するプロセスのプライマリグループ(Linuxのように)によって所有されない特定のディレクトリグループの下に作成されたすべてのファイル/ディレクトリを作成しますが、親ディレクトリの所有者。

許可ビットは少し難しいです。新しく作成されたファイル/ディレクトリのアクセス許可は、(特に)umaskの影響を受けます。ビットマスクは、明示的に指定されていない場合に設定するビットnotを指定します。たとえば、一般的なumask値は_022_です。これは、「グループ」と「その他」の書き込みビットは通常設定されないことを意味します。 umaskを_002_に変更して、グループの書き込み権限をクリアしたくないことを伝えることができますが、欠点は、この値をディレクトリベースで設定できないことです。通常は、作成するすべてのファイルにプライマリグループの書き込み権限を設定する必要はありません。

これはACLを使用して解決できます。ACLでmaskおよびdefault権限セットを設定できます。これは、このACLが設定されたディレクトリ内に作成されたすべてのファイルとディレクトリに適用されます。だからあなたの問題の1つの可能な解決策は

  • 外付けドライブを使用するすべてのシステムの共通グループのメンバーであることを確認する
  • ドライブ上のすべてのファイルとディレクトリをこのグループに所有させ、すべてのディレクトリにSGIDビットを設定します
  • すべてのディレクトリのACLを変更して、グループに書き込み権限が設定された新しいファイル/ディレクトリをすべて作成するようにカーネルに指示するマスクとデフォルトの権限を含めます。

詳細については、setfacl(1)およびacl(5)を参照してください。

19
Andreas Wiese

別の同様の質問 があり、bindfsが提案されています。

mkdir /home/$user/sda1
bindfs -u $user -g $group /mnt/sda1 /home/$user/sda1

OSXユーザーは、次のようにnoownersマウントオプションを推奨しています。

ボリューム全体の所有権フィールドを無視します。これにより、すべてのオブジェクトがユーザーID 99およびグループID 99によって所有されているように表示されます。ユーザーID 99は現在の有効なユーザーIDとして解釈されますが、グループID 99は直接使用され、「不明」に変換されます。

11

ファイルの所有者とグループは番号として保存されます。したがって、ファイルは、システムに接続しているユーザーが(またはまったく)関係なく、uid = 1005によって所有されます。

ユーザー/グループをnobodyに変更しても問題は解決しません。次に、nobodyユーザー(またはnobodyグループのメンバー)のみがファイルへのアクセスを許可されます。

残念ながら、ext4で権限チェックを無効にする方法はないと思います。たとえば、次を参照してください ext3またはext4ファイルシステムのファイル権限を無効にすることは可能ですか?

4
derobert

Andreas Wieseすべてのホストに共通のグループIDがある場合、setgidビットとACLで問題を解決できると言います

私は質問します Linuxディストリビューション全体で事前定義されたグループIDですか?

独自の調査の結果、このようなグループは、触れられたすべてのディストリビューションに存在することがわかりました:Debian、Ubuntu、RedHat、Fedora、CentOS、Suse、FreeBSD、OpenBSD、NetBSD、MacOSX、Solarisのsysグループ共有ID 3.

これとともに:

$ Sudo chgrp -R sys /mnt/data/dir
$ Sudo chmod -R g+s /mnt/data/dir
$ Sudo setfacl -R -m g:sys:rwx /mnt/data/dir
$ Sudo setfacl -R -d -m g:sys:rwx /mnt/data/dir

これの味:

$ Sudo adduser user sys

userは、/dir上の任意のファイルを読み書きできます。

ほとんどのジョブはsetgidビットを実行できますが、残念ながら、通常はumaskをほとんど制御できません。したがって、ACLは完全なソリューションを提供するために使用されます。

以下も参照してください。

2
gavenkoa