GNU / Linuxファイルシステムの権限と権限は、システムのセキュリティの基礎であり、その原則の1つは、ファイルとフォルダに対する権限を明確に分離することです。学校のサーバーなどのマルチユーザー環境では、ファイル権限により、ユーザーがデフォルトで他のユーザーのドキュメントを誤って削除または上書きすることが防止されます。ただし、複数のユーザーが他のユーザーのファイルにアクセス(読み取り、書き込み、さらには削除)する必要があるユースケースがあります。これは、生徒が同じプロジェクトで作業する上記の学校のサーバーの場合です。 RHCSA試験準備のこのセクションでは、setgid(set groupID)手法を使用して、このようなコラボレーションのための環境を作成する方法を学習します。これらの手順は最近のオペレーティングシステムで実行していますが、setgidは新しいものではなく、すべてのディストリビューションに含まれていることに注意してください。
このチュートリアルでは、次のことを学びます。
- ユーザーを補足グループに追加する方法
- ディレクトリでset-GIDを使用する方法
- set-GIDディレクトリ内の適切な所有権を確認する方法
- グループのメンバーとして特別なディレクトリを使用する方法
setgidディレクトリとのコラボレーションを有効にします。
使用されるソフトウェア要件と規則
カテゴリ | 使用する要件、規則、またはソフトウェアバージョン |
---|---|
Red Hat Enterprise Linux 8 | |
GNU Coreutils 8.30 | |
rootとしてまたはsudo を介したLinuxシステムへの特権アクセス コマンド。 | |
# –指定されたLinuxコマンドは、rootユーザーとして直接、またはsudo を使用して、root権限で実行する必要があります。 コマンド$ –特定のLinuxコマンドを通常の非特権ユーザーとして実行する必要があります |
ユースケース
setgidの使用法を示すために、仮想サーバーがあり、その上にユーザーのグループを作成し、メンバーを追加し、両方がアクセスできるディレクトリを設定する必要があります。これまでのところ、これは
権限設定の問題にすぎません。秘訣は、setgidをディレクトリに追加することです。これにより、ディレクトリ内に作成されたファイルには、親ディレクトリの所有者グループが含まれます。グループにはディレクトリ内での読み取りおよび書き込み権限があるため、元のユーザーがグループメンバーシップを明示的に設定しなくても、グループのすべてのメンバーがファイルの読み取りと書き込みを行うことができます。
基本設定
まず、必要なオブジェクトを作成します。プロジェクトディレクトリを作成しましょう:
# mkdir -p /student_projects/rocket_science
そして、2人のユーザーsarah
およびjohn
、useraddコマンドを使用します:
# useradd john # useradd sarah
また、メンバー間のコラボレーションを可能にするユーザーグループを作成する必要があります。
# groupadd rocketengineers
次に、このグループをプロジェクトディレクトリの所有者として再帰的に設定します:
# chown -R :rocketengineers /student_projects/rocket_science
次に、ユーザーをrocketengineers
に追加します グループ:
# usermod -a -G rocketengineers john # usermod -a -G rocketengineers sarah
グループをセカンダリグループとして追加しました。グループの詳細については、グループメンバーシップのチュートリアルを参照してください。
基本的な設定を完了するには、ディレクトリのグループに完全な権限を追加する必要があります:
# chmod 770 /student_projects/rocket_science
これで、基本的なセットアップが完了しました。両方のユーザーがディレクトリに書き込むことができ、作成されたファイルはユーザーによって所有され、所有グループはユーザーのプライマリグループになります。 stat
で設定した
権限を確認できます :
# stat /student_projects/rocket_science File: /student_projects/rocket_science Size: 6 Blocks: 0 IO Block: 4096 directory Device: fd00h/64768d Inode: 17789698 Links: 2 Access: (0770/drwxrwx---) Uid: ( 0/ root) Gid: ( 1003/rocketengineers) Context: unconfined_u:object_r:default_t:s0 Access: 2020-10-04 18:29:57.500453785 +0200 Modify: 2020-10-04 18:29:47.650278956 +0200 Change: 2020-10-04 18:30:34.809115974 +0200 Birth: -
識別子はおそらく異なります。ディレクトリの所有者がroot
であることがわかります 、グループの所有権はrocketengineers
に属しています。 グループ。これにより、グループの両方のメンバーが
ディレクトリとの間で読み取りと書き込みを行うことができます。
setgidを使用しないコラボレーション
2人のユーザーがこの設定でいくつかのメモを共有したいとします。 sarah
ホームディレクトリに重要なデータを含むテキストファイルを取得しました:
$ id uid=1002(sarah) gid=1002(sarah) groups=1002(sarah),1003(rocketengineers) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 $ cat general_project.notes text
john
と共有するには 、彼女はファイルを共有ディレクトリにコピーします(念のため、ホームディレクトリにバックアップが残っています):
$ cp general_project.notes /student_projects/rocket_science/
所有権を確認すると、所有者が実際にsarah
であることがわかります。 、およびファイルを所有するグループもsarah
、ユーザーのプライマリグループ:
$ stat /student_projects/rocket_science/general_project.notes File: /student_projects/rocket_science/general_project.notes Size: 5 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 18019570 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1002/ sarah) Gid: ( 1002/ sarah) Context: unconfined_u:object_r:default_t:s0 Access: 2020-10-04 18:31:30.229099624 +0200 Modify: 2020-10-04 18:31:30.229099624 +0200 Change: 2020-10-04 18:31:30.229099624 +0200 Birth: -
john
に切り替えましょう 。彼はまた、プロジェクトに関するいくつかの調査結果を持っており、それらを共有したいと考えています。
$ id uid=1001(john) gid=1001(john) groups=1001(john),1003(rocketengineers) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 $ echo "mytext" > rocket.txt $ cp rocket.txt /student_projects/rocket_science/
同じ権限が適用され、新しくコピーされたファイルはjohn
によって所有されます :
$ stat /student_projects/rocket_science/rocket.txt File: /student_projects/rocket_science/rocket.txt Size: 7 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 18356857 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1001/ john) Gid: ( 1001/ john) Context: unconfined_u:object_r:default_t:s0 Access: 2020-10-04 18:32:24.433075710 +0200 Modify: 2020-10-04 18:32:24.433075710 +0200 Change: 2020-10-04 18:32:24.433075710 +0200 Birth: -
どちらもrocketengineers
のメンバーなので グループでは、ディレクトリの内容を読み取ることができます。また、両方のメモが誰でも読み取れるため、お互いの
ファイルを読み取ることができます。
$ cat /student_projects/rocket_science/general_project.notes text
john
の場合に問題が発生します sarah
に関するメモを追加したい の重要なデータファイル:
$ echo "some comments" >> /student_projects/rocket_science/general_project.notes -bash: /student_projects/rocket_science/general_project.notes: Permission denied
実際には、お互いのファイルを操作することはできず、読み取るだけです。今sarah
彼女のファイルのグループ所有権を共通のグループに設定して、問題を解決することができます。しかし、私たちが私たちを助けるためにsetgidを入手した場合、なぜ彼女は
すべてのファイルでそれを必要とするのでしょうか?
setgidフラグの設定
setgidフラグを設定するには、chmod
を使用します :
# chmod g+s /student_projects/rocket_science
grop権限の「s」フラグに注意してください(わかりやすくするために太字に設定されています):
# stat /student_projects/rocket_science File: /student_projects/rocket_science Size: 53 Blocks: 0 IO Block: 4096 directory Device: fd00h/64768d Inode: 17789698 Links: 2 Access: (2770/drwxrws---) Uid: ( 0/ root) Gid: ( 1003/rocketengineers) Context: unconfined_u:object_r:default_t:s0 Access: 2020-10-04 18:32:29.389167450 +0200 Modify: 2020-10-04 18:32:24.433075710 +0200 Change: 2020-10-04 18:34:04.449927062 +0200 Birth: -
結果のテストと検証
今sarah
彼女の新しい研究ノートを共有できます:
$ cat findings.txt rocket needs wings $ cp findings.txt /student_projects/rocket_science/ $ stat /student_projects/rocket_science/findings.txt File: /student_projects/rocket_science/findings.txt Size: 19 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 18999000 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1002/ sarah) Gid: ( 1003/rocketengineers) Context: unconfined_u:object_r:default_t:s0 Access: 2020-10-04 18:35:15.195236593 +0200 Modify: 2020-10-04 18:35:15.195236593 +0200 Change: 2020-10-04 18:35:15.195236593 +0200 Birth: -
setgid
のため、グループの所有権は親ディレクトリのグループに設定されます 所定の位置に。これにより、john
が発生します 新しい研究ノートにコメントできるようにするため:
$ echo "verified!" >> /student_projects/rocket_science/findings.txt $ cat /student_projects/rocket_science/findings.txt rocket needs wings verified!
これで、ユーザーグループのコラボレーションディレクトリを設定するという目標を達成しました。上記の方法で他のグループに対してこれを行うことができ、異なるプロジェクトのデータを
権限で分離して、あるグループのメンバーが別のプロジェクトのデータを誤って削除することがないようにします。
#ビデオタイトル:setgidディレクトリでの作業
#ビデオの説明:setgidディレクトリ内の他のユーザーのファイルの編集
#ビデオファイル名:rhcsa_setgid.webm
結論
GNU / Linuxの厳格な権限と所有権の下で、setgid
これは、システムのユーザーが安全な方法で相互のファイルを操作できるようにする簡単な方法であり、
重い外部ソリューションを使用せずに、またはユーザーの初期グループと権限を台無しにすることなく、グループ作業を可能にします。上記の例では、ユーザーのホームディレクトリやシステム全体の権限に触れる必要はありませんでした。
必要なものを共有できる特別な場所を設定するだけです。
演習
- 異なるグループで複数のプロジェクトディレクトリを作成します。あるプロジェクトのメンバーが他のプロジェクトのファイルを読み取れるかどうかを確認します。
- プロジェクトメンバーがアクセスできるクロスプロジェクトディレクトリを作成します。
- クロスプロジェクトを作成する読み取り専用 ディレクトリ。1つのプロジェクト(プロジェクト管理)メンバーのみが書き込むことができますが、すべてのプロジェクトのメンバーは読み取ることができます。