GNU/Linux >> Linux の 問題 >  >> Linux

コラボレーション用のsetgidディレクトリの作成と構成–RHCSAの目的の準備

GNU / Linuxファイルシステムの権限と権限は、システムのセキュリティの基礎であり、その原則の1つは、ファイルとフォルダに対する権限を明確に分離することです。学校のサーバーなどのマルチユーザー環境では、ファイル権限により、ユーザーがデフォルトで他のユーザーのドキュメントを誤って削除または上書きすることが防止されます。ただし、複数のユーザーが他のユーザーのファイルにアクセス(読み取り、書き込み、さらには削除)する必要があるユースケースがあります。これは、生徒が同じプロジェクトで作業する上記の学校のサーバーの場合です。 RHCSA試験準備のこのセクションでは、setgid(set groupID)手法を使用して、このようなコラボレーションのための環境を作成する方法を学習します。これらの手順は最近のオペレーティングシステムで実行していますが、setgidは新しいものではなく、すべてのディストリビューションに含まれていることに注意してください。

このチュートリアルでは、次のことを学びます。

  • ユーザーを補足グループに追加する方法
  • ディレクトリでset-GIDを使用する方法
  • set-GIDディレクトリ内の適切な所有権を確認する方法
  • グループのメンバーとして特別なディレクトリを使用する方法

setgidディレクトリとのコラボレーションを有効にします。

使用されるソフトウェア要件と規則

システム ソフトウェア その他 規約
ソフトウェア要件とLinuxコマンドラインの規則
カテゴリ 使用する要件、規則、またはソフトウェアバージョン
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

setgidディレクトリでの作業–setgidディレクトリ内の他のユーザーのファイルの編集

結論

GNU / Linuxの厳格な権限と所有権の下で、setgid これは、システムのユーザーが安全な方法で相互のファイルを操作できるようにする簡単な方法であり、
重い外部ソリューションを使用せずに、またはユーザーの初期グループと権限を台無しにすることなく、グループ作業を可能にします。上記の例では、ユーザーのホームディレクトリやシステム全体の権限に触れる必要はありませんでした。
必要なものを共有できる特別な場所を設定するだけです。

演習

  1. 異なるグループで複数のプロジェクトディレクトリを作成します。あるプロジェクトのメンバーが他のプロジェクトのファイルを読み取れるかどうかを確認します。
  2. プロジェクトメンバーがアクセスできるクロスプロジェクトディレクトリを作成します。
  3. クロスプロジェクトを作成する読み取り専用 ディレクトリ。1つのプロジェクト(プロジェクト管理)メンバーのみが書き込むことができますが、すべてのプロジェクトのメンバーは読み取ることができます。

Linux
  1. Linuxでのディレクトリの作成、削除、および管理

  2. zip ファイルを作成し、ディレクトリ構造を無視する

  3. 特定のディレクトリ内に作成されたファイルのグループと権限を強制するにはどうすればよいですか?

  1. Linuxでユーザーグループを作成および削除する方法

  2. Linuxで複数のディレクトリを作成する5つの例

  3. ディレクトリハードリンクを強制的に作成しますか?

  1. 別のユーザーおよびグループとしてファイルを作成しますか?

  2. 一部のアプリケーションでグループとユーザーを作成することが推奨されるのはなぜですか?

  3. ディレクトリ内のすべての zip ファイルに専用のフォルダーを作成し、zip ファイルを抽出します