ウェブサイト検索

ユーザーとグループ、ファイルのアクセス許可と属性の管理、アカウントでの sudo アクセスの有効化 - パート 8


昨年 8 月、Linux Foundation はLFCS 認定 (Linux Foundation Certified Sysadmin) を開始しました。これは、個人がどこにいても、どこにいても試験を受けられるようにすることを目的としたまったく新しいプログラムです。 Linux システムの基本から中級の運用サポートの認定を取得します。これには、実行中のシステムとサービスのサポート、全体的な監視と分析に加えて、問題を高レベルのサポート チームにエスカレーションする必要があるかどうかを判断できるインテリジェントな意思決定が含まれます。

Linux Foundation 認定プログラムの概要を説明した次のビデオを簡単にご覧ください。

この記事は、10 回のチュートリアルシリーズの第 8 部です。このセクションでは、LFCS 認定試験に必要な、Linux システムでのユーザーとグループのアクセス許可を管理する方法について説明します。

Linux はマルチユーザー オペレーティング システムであるため (異なるコンピュータまたは端末上の複数のユーザーが 1 つのシステムにアクセスできるという点で)、効果的なユーザー管理を実行する方法、つまり追加、編集、一時停止、削除の方法を知る必要があります。ユーザー アカウントに、割り当てられたタスクを実行するために必要な権限を付与します。

ユーザーアカウントの追加

新しいユーザー アカウントを追加するには、次の 2 つのコマンドのいずれかを root として実行できます。

adduser [new_account]
useradd [new_account]

新しいユーザーアカウントがシステムに追加されると、次の操作が実行されます。

1. ユーザーのホーム ディレクトリが作成されます (デフォルトでは /home/username)。

2. 次の隠しファイルはユーザーのホーム ディレクトリにコピーされ、ユーザー セッションに環境変数を提供するために使用されます。

.bash_logout
.bash_profile
.bashrc

3. ユーザーのメール スプールが /var/spool/mail/username に作成されます。

4. グループが作成され、新しいユーザー アカウントと同じ名前が付けられます。

/etc/passwd について

完全なアカウント情報は /etc/passwd ファイルに保存されます。このファイルにはシステム ユーザー アカウントごとのレコードが含まれており、次の形式になります (フィールドはコロンで区切られます)。

[username]:[x]:[UID]:[GID]:[Comment]:[Home directory]:[Default shell]
  1. フィールド [ユーザー名][コメント] は一目瞭然です。
  2. 2 番目のフィールドの x は、アカウントがシャドウ パスワード (/etc/shadow 内) によって保護されていることを示します。このパスワードは、[username] としてログオンするために必要です。
  3. [UID] フィールドと [GID] フィールドは、それぞれ [username] が属するユーザー ID とプライマリ グループ ID を表す整数です。 。
  4. [ホーム ディレクトリ] は、[ユーザー名] のホーム ディレクトリへの絶対パスを示します。
  5. [デフォルト シェル] は、このユーザーがシステムにログインするときに使用できるシェルです。
/etc/group について

グループ情報は /etc/group ファイルに保存されます。各レコードの形式は次のとおりです。

[Group name]:[Group password]:[GID]:[Group members]
  1. [グループ名] はグループの名前です。
  2. [グループ パスワード]x は、グループ パスワードが使用されていないことを示します。
  3. [GID]: /etc/passwd と同じ。
  4. [グループ メンバー]: [グループ名] のメンバーであるユーザーのカンマ区切りのリスト。

アカウントを追加した後、usermod コマンドを使用して次の情報 (いくつかのフィールドに名前を付ける) を編集できます。usermod の基本構文は次のとおりです。

usermod [options] [username]
アカウントの有効期限の設定

–expiredate フラグの後に YYYY-MM-DD 形式の日付を使用します。

usermod --expiredate 2014-10-30 tecmint
ユーザーを補足グループに追加する

-aG または -append -groups オプションを組み合わせて使用し、その後にグループのカンマ区切りリストを続けます。

usermod --append --groups root,users tecmint
ユーザーのホームディレクトリのデフォルトの場所を変更する

-d または -home オプションを使用し、その後に新しいホーム ディレクトリへの絶対パスを指定します。

usermod --home /tmp tecmint
ユーザーがデフォルトで使用するシェルを変更する

–shell を使用し、その後に新しいシェルへのパスを指定します。

usermod --shell /bin/sh tecmint
ユーザーがメンバーとなっているグループの表示
groups tecmint
id tecmint

それでは、上記のコマンドをすべて一度に実行してみましょう。

usermod --expiredate 2014-10-30 --append --groups root,users --home /tmp --shell /bin/sh tecmint

上の例では、tecmint ユーザー アカウントの有効期限を2014 年 10 月 30 日に設定します。また、 アカウントをルートとユーザー グループに追加します。最後に、sh をデフォルトのシェルとして設定し、ホーム ディレクトリの場所を /tmp に変更します。

こちらもお読みください:

  1. Linux での 15 useradd コマンドの例
  2. Linux での 15 usermod コマンドの例

既存のアカウントの場合は、次のことも行うことができます。

パスワードをロックしてアカウントを無効にする

ユーザーのパスワードをロックするには、-L (大文字の L) または -lock オプションを使用します。

usermod --lock tecmint
ユーザーパスワードのロックを解除する

以前にブロックされたユーザーのパスワードのロックを解除するには、-u または -unlock オプションを使用します。

usermod --unlock tecmint

複数のユーザーがアクセスする必要があるファイルへの読み取りおよび書き込みアクセスのための新しいグループの作成

目標を達成するには、次の一連のコマンドを実行します。

groupadd common_group # Add a new group
chown :common_group common.txt # Change the group owner of common.txt to common_group
usermod -aG common_group user1 # Add user1 to common_group
usermod -aG common_group user2 # Add user2 to common_group
usermod -aG common_group user3 # Add user3 to common_group
グループを削除する

次のコマンドでグループを削除できます。

groupdel [group_name]

group_name が所有するファイルがある場合、それらは削除されませんが、グループ所有者は削除されたグループの GID に設定されます。

Linux ファイルのアクセス許可

このシリーズの「アーカイブ ツールとファイル属性の設定 - 第 3 回」で説明した基本的な読み取り、書き込み、および実行のアクセス許可に加えて、あまり使用されない (しかしそれほど重要ではない) アクセス許可設定があり、「特別な」と呼ばれることもあります。権限」。

前に説明した基本的なアクセス許可と同様、これらは 8 進ファイルを使用するか、アクセス許可の種類を示す文字 (記号表記) を使用して設定されます。

ユーザーアカウントの削除

–remove を指定した userdel コマンドを使用すると、アカウント (ユーザーが所有している場合はそのホーム ディレクトリ、そこに存在するすべてのファイル、メール スプールも含む) を削除できます。 オプション。

userdel --remove [username]

グループ経営

新しいユーザー アカウントがシステムに追加されるたびに、そのユーザー名を唯一のメンバーとして同じ名前のグループが作成されます。他のユーザーを後でグループに追加できます。グループの目的の 1 つは、ファイルやその他のシステム リソースに適切なアクセス許可を設定することで、これらのリソースへの簡単なアクセス制御を実装することです。

たとえば、次のユーザーがいるとします。

  1. user1 (プライマリグループ: user1)
  2. user2 (プライマリグループ: user2)
  3. user3 (プライマリグループ: user3)

これらはすべて、ローカル システム上のどこか、またはネットワーク共有上にある common.txt というファイルへの読み取り書き込み アクセスを必要とします。 user1 が作成しました。次のようなことをしたくなるかもしれません。

chmod 660 common.txt
OR
chmod u=rw,g=rw,o= common.txt [notice the space between the last equal sign and the file name]

ただし、これにより読み取り および 書き込み アクセスが許可されるのは、ファイルの所有者と、ファイルのグループ所有者のメンバーであるユーザー (user1<) のみです。 この場合)。繰り返しますが、user2user3 をグループ user1 に追加したくなるかもしれませんが、これにより、所有されている残りのファイルにもアクセスできるようになります。ユーザー user1 とグループ user1 による。

ここでグループが役立ちます。このような場合に行うべきことは次のとおりです。

セトゥイドを理解する

setuid 権限が実行可能ファイルに適用されると、プログラムを実行しているユーザーはプログラムの所有者の有効な権限を継承します。このアプローチではセキュリティ上の懸念が当然生じる可能性があるため、setuid 権限を持つファイルの数は最小限に抑える必要があります。システム ユーザーが root が所有するファイルにアクセスする必要がある場合、この権限セットを持つプログラムが見つかる可能性があります。

要約すると、ユーザーはバイナリ ファイルを実行できるだけでなく、root 権限でも実行できるということです。たとえば、/bin/passwd の権限を確認してみましょう。このバイナリはアカウントのパスワードを変更するために使用され、/etc/shadow ファイルを変更します。スーパーユーザーは誰のパスワードも変更できますが、他のすべてのユーザーは自分のパスワードのみを変更できる必要があります。

したがって、どのユーザーも /bin/passwd を実行する権限を持っている必要がありますが、アカウントを指定できるのは root だけです。他のユーザーは、対応するパスワードのみを変更できます。

Setgid を理解する

setgid ビットが設定されている場合、実際のユーザーの実効 GID はグループ所有者のものになります。したがって、どのユーザーも、そのファイルのグループ所有者に付与された権限に基づいてファイルにアクセスできます。さらに、ディレクトリに setgid ビットが設定されている場合、新しく作成されたファイルはディレクトリと同じグループを継承し、新しく作成されたサブディレクトリも親ディレクトリの setgid ビットを継承します。ファイル所有者のプライマリ グループに関係なく、特定のグループのメンバーがディレクトリ内のすべてのファイルにアクセスする必要がある場合は、このアプローチを使用する可能性が高くなります。

chmod g+s [filename]

setgid を 8 進数形式で設定するには、現在の (または必要な) 基本権限の先頭に数値 2 を追加します。

chmod 2755 [directory]
ディレクトリに SETGID を設定する

スティッキービットを理解する

ファイルに「スティッキー ビット 」が設定されている場合、Linux はそれを無視しますが、ディレクトリの場合は、ユーザーがそのディレクトリを所有している場合を除き、ユーザーがそのディレクトリに含まれるファイルを削除したり、名前を変更したりすることさえできなくなる効果があります。ファイル、または root です。

chmod o+t [directory]

スティッキー ビット を 8 進数形式で設定するには、現在の (または必要な) 基本権限の前に数値 1 を追加します。

chmod 1755 [directory]

スティッキー ビットがなければ、ディレクトリに書き込むことができる人は誰でもファイルを削除したり名前を変更したりできます。そのため、スティッキー ビットは、/tmp などの誰でも書き込み可能なディレクトリでよく見られます。

特別な Linux ファイル属性

ファイルに対して許可される操作をさらに制限できる属性は他にもあります。たとえば、ファイルの名前変更、移動、削除、さらには変更を禁止します。これらは chattr コマンドで設定され、次のようにlsattr ツールを使用して表示できます。

chattr +i file1
chattr +a file2

これら 2 つのコマンドを実行すると、file1 は不変になります (つまり、移動、名前変更、修正、削除ができません)。一方、file2 は追加専用モードになります (追加のみが可能です)。書き込みのために追加モードで開きます)。

root アカウントへのアクセスと sudo の使用

ユーザーが root アカウントにアクセスできる方法の 1 つは、入力することです。

su

次に root のパスワードを入力します。

認証が成功すると、以前と同じ現在の作業ディレクトリを使用してroot としてログオンします。代わりにルートのホームディレクトリに置きたい場合は、実行してください。

su -

次に root のパスワードを入力します。

上記の手順では、通常のユーザーが root のパスワードを知っている必要があるため、重大なセキュリティ リスクが生じます。そのため、システム管理者は、非常に制御された制限された方法で、一般ユーザーが別のユーザー (通常はスーパーユーザー) としてコマンドを実行できるように sudo コマンドを設定できます。したがって、ユーザーに制限を設定して、ユーザーが 1 つ以上の特定の特権コマンドを実行できるようにし、他は実行できないようにすることができます。

こちらもお読みください: su と sudo ユーザーの違い

sudo を使用して認証するには、ユーザーは自分のパスワードを使用します。コマンドを入力すると、(スーパーユーザーではなく) パスワードの入力を求められ、認証が成功した場合 (およびユーザーにコマンドを実行する権限が付与されていた場合)、指定されたコマンドが実行されます。

sudo へのアクセスを許可するには、システム管理者は /etc/sudoers ファイルを編集する必要があります。このファイルは、テキスト エディタで直接開くのではなく、visudo コマンドを使用して編集することをお勧めします。

visudo

これにより、vim を使用して /etc/sudoers ファイルが開きます (ファイルを編集するには、このシリーズの「vim をインストールしてエディタとして使用する – パート 2」に記載されている手順に従ってください)。

これらは最も関連性の高い行です。

Defaults    secure_path="/usr/sbin:/usr/bin:/sbin"
root        ALL=(ALL) ALL
tecmint     ALL=/bin/yum update
gacanepa    ALL=NOPASSWD:/bin/updatedb
%admin      ALL=(ALL) ALL

それらを詳しく見てみましょう。

Defaults    secure_path="/usr/sbin:/usr/bin:/sbin:/usr/local/bin"

この行では、sudo に使用されるディレクトリを指定できます。また、システムに悪影響を与える可能性があるユーザー固有のディレクトリの使用を防ぐために使用されます。

次の行は権限を指定するために使用されます。

root        ALL=(ALL) ALL
  1. 最初の ALL キーワードは、このルールがすべてのホストに適用されることを示します。
  2. 2 番目の ALL は、最初の列のユーザーが任意のユーザーの権限でコマンドを実行できることを示します。
  3. 3 番目の ALL は、任意のコマンドを実行できることを意味します。
tecmint     ALL=/bin/yum update

= 記号の後にユーザーが指定されていない場合、sudo は root ユーザーとみなされます。この場合、ユーザー tecmint は root として yum update を実行できます。

gacanepa    ALL=NOPASSWD:/bin/updatedb

NOPASSWD ディレクティブにより、ユーザー gacanepa はパスワードを入力せずに /bin/updatedb を実行できます。

%admin      ALL=(ALL) ALL

% 記号は、この行が「admin 」というグループに適用されることを示します。行の残りの部分の意味は、通常のユーザーの意味と同じです。これは、グループ「admin 」のメンバーがすべてのホスト上で任意のユーザーとしてすべてのコマンドを実行できることを意味します。

sudo によってどのような権限が付与されているかを確認するには、「-l 」オプションを使用してリストします。

PAM (プラグ可能認証モジュール)

プラグ可能認証モジュール (PAM) は、モジュールを使用してアプリケーションごと、サービスごとに特定の認証スキームを設定できる柔軟性を提供します。最新のすべての Linux ディストリビューションに存在するこのツールは、必要な情報を取得する方法を知るために認証を必要とする各プログラムを特別にコンパイルする必要があった、Linux の初期に開発者がよく直面していた問題を克服しました。

たとえば、PAM の場合、パスワードが /etc/shadow に保存されているか、ネットワーク内の別のサーバーに保存されているかは関係ありません。

たとえば、ログイン プログラムがユーザーを認証する必要がある場合、PAM は適切な認証スキームの関数を含むライブラリを動的に提供します。したがって、ログイン アプリケーション (または PAM を使用するその他のプログラム) の認証スキームの変更は、構成ファイル (ほとんどの場合、/etc/pam.d 内にあるアプリケーションにちなんだ名前のファイル) を編集するだけなので簡単です。 にありますが、/etc/pam.conf にある可能性は低いです)。

/etc/pam.d 内のファイルは、どのアプリケーションが PAM をネイティブに使用しているかを示します。さらに、特定のアプリケーションが PAM ライブラリ (libpam) にリンクされているかどうかを確認することで、そのアプリケーションが PAM を使用しているかどうかを知ることができます。


ldd $(which login) | grep libpam # login uses PAM
ldd $(which top) | grep libpam # top does not use PAM

上の画像では、libpam がログイン アプリケーションにリンクされていることがわかります。このアプリケーションはシステムのユーザー認証の操作に関与しているのに対し、top は関与していないため、これは当然のことです。

passwd の PAM 設定ファイルを調べてみましょう。そう、これはユーザーのパスワードを変更するためのよく知られたユーティリティです。これは /etc/pam.d/passwd にあります。


cat /etc/passwd

最初の列は、module-path (3 番目の列) で使用される認証の type を示します。タイプの前にハイフンが表示されている場合、システム内でモジュールが見つからないためにモジュールをロードできない場合、PAM はシステム ログに記録しません。

次の認証タイプが利用可能です。

  1. account: このモジュール タイプは、ユーザーまたはサービスが認証のために有効な資格情報を提供したかどうかを確認します。
  2. auth: このモジュール タイプは、ユーザーが本人であることを検証し、必要な権限を付与します。
  3. password: このモジュール タイプにより、ユーザーまたはサービスはパスワードを更新できます。
  4. session: このモジュール タイプは、認証が成功する前および/または後に実行する必要があることを示します。

2 番目の列 (control と呼ばれる) は、このモジュールでの認証が失敗した場合に何が起こるかを示します。

  1. requisite: このモジュールによる認証が失敗した場合、全体の認証はただちに拒否されます。
  2. required は requisite に似ていますが、このサービスにリストされている他のすべてのモジュールは認証を拒否する前に呼び出されます。
  3. sufficient: このモジュールによる認証が失敗した場合、以前に必須としてマークされた認証が失敗した場合でも、PAM は認証を許可します。
  4. optional: このモジュールによる認証が失敗または成功した場合、これがこのサービス用に定義されたそのタイプの唯一のモジュールでない限り、何も起こりません。
  5. include は、指定されたタイプの行を別のファイルから読み取る必要があることを意味します。
  6. substack は include に似ていますが、認証の失敗または成功によってモジュール全体が終了するのではなく、サブスタックのみが終了します。

4 番目の列 (存在する場合) は、モジュールに渡される引数を示します。

/etc/pam.d/passwd の最初の 3 行 (上記を参照) は、system-auth モジュールをロードして、ユーザーが有効な認証情報 (アカウント) を提供していることを確認します。 。その場合、passwd (auth) の使用許可を与えることで、認証トークン (パスワード) を変更できるようになります。

たとえば、次のように追加すると、


remember=2

次の行に


password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok

/etc/pam.d/system-auth:


password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=2

各ユーザーの最後の 2 つのハッシュされたパスワードは、再利用できないように /etc/security/opasswd に保存されます。

まとめ

効果的なユーザーおよびファイル管理スキルは、システム管理者にとって不可欠なツールです。この記事では基本について説明しましたので、構築するための良い出発点として使用していただければ幸いです。以下にお気軽にコメントやご質問を残してください。すぐに返信させていただきます。