私は長い間Linuxを使ってきましたが、まだファイル権限が実際にどのように機能するかについて、まったくわかりません。その点を踏まえて、物事を完全に理解するために読むべき本や詳細なガイドを持っている人はいませんか? 私はシステム管理をかなり経験しているので、ディレクトリを読み取りおよび書き込み可能にしたり、ファイルを実行可能にしたり、ファイルの所有者を変更したりするような簡単なことは知っていますが、ユーザー間でファイルを共有するとなると、まったくわかりません。
これが私の主な問題です。私は複数のマシンを持っていて、それらで音楽ライブラリを同期するつもりです。私はしばらくの間 Unison を使ってきましたが、セットアップしたばかりのローカル ネットワークで SSH 経由で簡単に実行できるので、これは素晴らしい選択です。双方にとってメリットがあります。
これまで、私は 2TB の外付けハード ドライブを使用してコンピューターを同期してきました。(コンピューター 1 は HD にユニゾン、コンピューター 2 は HD にユニゾンなど) これは、特にドライブを暗号化したため、すべてのマシンに接続して同期するのが非常に面倒で、面倒な作業です。とにかく、ドライブは ext4 (TrueCrypt 内) で実行されているため、所有者やグループなどのすべての Unix ファイルシステム情報が保持されます。新しいマシンをセットアップし、音楽を取り込むためにユニゾンを実行したところ、すべての権限がおかしくなっていることに気付きました。外付けドライブからファイルを取り出す唯一の方法は、ルートとして Unison を実行することだったので、そうする必要がありました。どうやら、このマシンでは、すべてのマシンで通常使用している "rfkrocktk" とは異なるユーザー名を使用しているため、これは本質的に大きな障害となります。
これが私の使用例です。このラップトップには、「leandra」と「rfkrocktk」という 2 人の有効なユーザーがいます。この 2 人のユーザー間で音楽を共有したいので、/home/rfkrocktk/Music を /home/leandra/Music を指すようにシンボリックリンクしました。(a) 両方のユーザーがこのフォルダ内のファイルの読み取り/書き込み/削除にアクセスできるようにし、(b) ファイルの所有権を混乱させることなくすべてをうまく同期させるにはどうすればよいでしょうか。
編集
何とか動作するようになりましたが、まだ完全ではありません。自分のグループに音楽ディレクトリのグループ ID を設定し、メイン ユーザーと共有ユーザーの両方をグループにmedia-users
追加しました。これで、ファイルに完全にアクセスできますが、ディレクトリ内の何も表示されません。私の ID は次のとおりです。rfkrocktk
mt-daapd
rfkrocktk
mt-daapd
$ id rfkrocktk
> uid=1000(rfkrocktk) gid=1000(rfkrocktk) groups=1000(rfkrocktk),4(adm),20(dialout),24(cdrom),29(audio),46(plugdev),104(lpadmin),115(admin),120(sambashare),124(vboxusers),1001(jupiter),2002(media-users)
$ id mt-daapd
> uid=123(mt-daapd) gid=65534(nogroup) groups=65534(nogroup),2002(media-users)
mt-daap
のメイングループ ID をグループに設定してみましたmedia-users
が、何も変わりません。
ディレクトリに対する私の権限は次のとおりです/home/rfkrocktk/Music
:
drwxr-Sr-- 201 rfkrocktk media-users 12288 2011-01-13 12:26 Music
実行してsudo -i -u mt-daapd ls -l /home/rfkrocktk/Music
も何も得られません。どうすれば修正できますか?
答え1
ファイルの所有者をrootに設定し、グループを「music」などに設定して、両方が「music」グループのメンバーになるようにします。次に、musicディレクトリをsetgidにします。(つまり、ディレクトリ内に作成されたアイテムは、ディレクトリ自体のグループ所有権を継承することになります)次に、ファイルの権限を 0660 にすれば設定完了です。
ファイルの権限は、ユーザー、グループ、ワールドであり、多くの場合、8 進数 (例: 0660) で示されます。
1 - 実行 2 - 書き込み 4 - 読み取り
これらは追加可能です。たとえば、0751 は、ファイル所有者は読み取り、書き込み、実行が可能であり、グループは読み取りと実行が可能であり、その他すべてのユーザーは実行のみ可能であることを意味します。
答え2
名前は重要ではありません。Unix ファイルとグループの所有権はファイルシステムに保存され、名前ではなく数値で保存されます。元のマシンから通常のユーザーとしてターミナルを開き、次のように入力します。
id -u
これにより、ユーザーの数値 ID が表示されます。ファイルの所有権を確認する際、ログインしているユーザー ID とファイルシステム内の ID が比較されます。ユーザー名を表示する際、passwd を照会して ID がテキストに変換され、ローカル名が表示されます。
新しいマシンで上記と同じ手順を実行します。IDは異なりますか? 異なる場合は、新しいマシンの「あなた」はファイルの所有者ではありません。両方のマシンで同様に、次のようにすると、
id -G
ユーザーが属するグループ ID のリストが表示されます。各ファイルのグループは、これらの ID のいずれかと一致する必要があります。一致しない場合は、そのグループの所有者にはなりません。ls -nd file
またはを使用して、ファイルの実際の数値ユーザーとグループを取得できますstat file
。
ほとんどの場合、2 つの異なるシステムは同じユーザー ID を持ちません。passwd を編集して手動で同期できますが、その後、システム上のすべてのファイルを慎重に更新して、古い ID を同等の新しい ID に変換する必要があります。システム間で ID を同期することは、ほとんどのホーム ユーザーが気にしない複雑な作業です。これは、LDAP、NIS、および同様の他のソリューションの領域です。
問題を解決するには、両方のシステムに存在するグループ ID によって所有されるすべてのファイルを作成し、両方のシステムのユーザーがそのグループのメンバーであることを確認してから、chmod g+rw
そのグループに読み取り/書き込みアクセス ( ) を付与する必要があります。
答え3
Music ディレクトリ (およびそのすべてのファイルとサブディレクトリ) に 775 の権限を設定すると、ファイルの所有者と、同じグループ内の誰もが、ファイルに対して何でもできるようになります。次に、任意の名前 (例: share) で新しいグループを作成し、Music ディレクトリ (およびそのすべてのファイルとサブディレクトリ) を新しいグループに chgrp します。これで、共有ファイルへの読み取り/書き込みアクセスを許可するユーザーが "share" グループにいることを確認するだけです。他のコンピューターでもこれを実行する必要がある場合は、すべてのコンピューターで共有グループが同じ数値 ID を持つように注意するだけで問題ありません。