LFCA:Linuxシステムのセキュリティを改善する方法–パート20


ご存知のとおり、rootユーザーは王様であり、Linuxシステムに対して無制限の特権を使用します。ただし、root以外のユーザーは基本的なタスクに制限されています。さらに、sudoユーザーには、rootユーザーが特定の昇格されたタスクを実行するのに適していると見なされる、ある程度のroot権限のみが付与されます。

通常のユーザーがリソースに制御不能にアクセスしたり、意図せずにルートにエスカレートしたりすると、問題が発生します。これは重大なセキュリティリスクであり、侵害、望ましくない変更、最悪の場合はシステムのクラッシュを引き起こす可能性があります。もう1つの潜在的なリスクは、ファイルのファイル権限の安全性が低い場合です。たとえば、グローバルユーザーの書き込み権限を持つブートファイルは、簡単に変更または破損して、システムが破損する可能性があります。

[あなたも好きかもしれません:データとLinuxを保護するための便利なヒント]

物理、ネットワーク、およびデータのセキュリティを実装することはできますが、悪意のあるユーザーがセキュリティ対策を回避し、そのようなセキュリティの抜け穴を利用する可能性があります。このため、ファイルシステムのセキュリティを真剣に検討する必要があります。これは、ファイルにアクセスするためのセキュリティ対策を回避するために手間のかかる作業を行う必要がない悪意のある従業員からの攻撃や内部脅威に直面した場合に、追加の防御層を提供します。

システムセキュリティでは、以下のポイントに注力します。

  • アクセス権–ユーザーとグループの権限。
  • PAMモジュールを使用してパスワードポリシーを適用します。

アクセス権–ユーザーとグループの分離

Linuxのすべてがファイルと見なされることを聞いたことがあるでしょう。そうでない場合は、プロセスです。 Linuxシステム上のすべてのファイルは、ユーザーとグループユーザーによって所有されます。また、ユーザー(u)、グループ(g)、その他(o)の3つのユーザーカテゴリのファイル権限も付与されます。権限は、各ユーザーカテゴリの読み取り、書き込み、および実行(rwx)で表されます。

rwx        rwx	     rwx
User       Group     Others

前に見たように、示されているようにlsコマンドで。

$ ls -l

要約すると、権限は通常9文字で表されます。最初の3文字は、ファイルを所有している実際のユーザーのアクセス権を表します。 2番目の文字セットは、ファイルのグループ所有者の権限を表します。最後に、他のユーザーまたはグローバルユーザーの最後のセット。これらの文字は、常に読み取り、書き込み、実行(rwx)の順序になっています。

権限の後に、ユーザーとグループの所有権があり、その後にファイルまたはディレクトリのサイズ、変更日、最後にファイルの名前が続きます。

ファイル/ディレクトリのアクセス許可と所有権の変更

ファイルとディレクトリのユーザー権限は、適切と思われるように変更できます。経験則では、最小特権のセキュリティ原則を使用します。簡単に言えば、ユーザーが作業を完了するために必要な最小限のアクセス権またはアクセス許可を取得していることを確認してください。

最小特権の原則は、ユーザーを特定の役割のみに制限し、そうすることで、攻撃者が低レバーのユーザーアカウントを利用して、重要なデータにアクセスして変更するリスクを最小限に抑えます。また、攻撃対象領域を減らし、攻撃者がシステムを制御した場合のマルウェアの伝播を制限します。

したがって、ユーザーがファイルまたはディレクトリの内容のみを表示する必要がある場合は、実行または書き込みのアクセス許可を付与しないでください。非常に基本的なレベルでは、タスクを実行するためにユーザーが必要とする最小限の権限と所有権のみを付与します。基本的なLinuxコマンドのトピックで、chmodコマンドとchownコマンドを使用して、ファイル/ディレクトリのユーザー権限と所有権を変更する方法に取り組みました。

システム管理者が権限を管理しやすくするために、ディレクトリ全体に特別な権限またはアクセス権を付与できます。ファイルまたはディレクトリの削除と変更を制限するために適用できる特別な権限の1つは、スティッキービットです。

システムまたはネットワーク内のすべてのユーザーが共有ディレクトリにアクセスできるシナリオでは、一部のユーザーがディレクトリ内のファイルを削除または変更する可能性があるという潜在的なリスクがあります。ディレクトリの内容の整合性を維持したい場合、これは望ましくありません。そして、これがスティッキービットの出番です。

スティッキービットは、ファイルまたはディレクトリ全体に設定される特別なファイル権限です。そのファイル/ディレクトリの所有者にのみ、ファイルまたはディレクトリの内容を削除または変更する権限を付与します。他のユーザーはファイル/ディレクトリを削除または変更できません。記号値はtで、数値は1000です。

ディレクトリのスティッキービットをオンにするには、次のようにchmodコマンドを使用します。

$ chmod +t directory_name

以下の例では、testというディレクトリにスティッキービットを適用しています。ディレクトリの場合、すべてのコンテンツがスティッキービットのアクセス許可を継承します。 ls -ldコマンドを使用して、スティッキービットのアクセス許可を確認できます。ファイルのアクセス許可の最後にあるt記号に注意してください。

$ ls -ld test

別のユーザーがディレクトリを削除したり、ディレクトリ内のファイルを変更したりしようとすると、アクセスが拒否されたというエラーが表示されます。

そして、それがスティックビットファイルの許可の要点です。

SUID(Set User ID)は、別の通常のユーザーがファイル所有者のファイルアクセス許可でファイルを実行できるようにする別の特別なファイルアクセス許可です。これは通常、実行権限を表す x ではなく、ファイル権限のユーザー部分にある記号値 sで示されます。 SUIDの数値は4000です。

SGID(Set Group ID)を使用すると、通常のユーザーはファイルグループの所有者のグループ権限を継承できます。実行権限のxではなく、ファイル権限のグループ部分に sが表示されます。 SGIDの数値は2000です。

どんなに便利であることがわかったとしても、SUIDとSGIDのアクセス許可はセキュリティリスクに関連しているため、絶対に避ける必要があります。これは、通常のユーザーに特別な特権を付与するためです。通常のユーザーを装った侵入者が、rootユーザーが所有する実行可能ファイルにSUIDビットが設定されていることに遭遇した場合、その抜け穴を利用してシステムを悪用する可能性があります。

LinuxでSUIDビットが設定されているすべてのファイルを検索するには、rootユーザーとしてfindコマンドを実行します。

$ find / -perm -4000 type -f

ディレクトリの実行:

$ find / -perm -4000 type -d

SGIDビットが設定されているすべてのファイルを検索するには、次のコマンドを実行します。

$ find / -perm -2000 type -f

ディレクトリの場合、以下を実行します。

$ find / -perm -2000 type -d

ファイルのSUIDビットを削除するには、次のようにchmodコマンドを実行します。

$ chmod u-s /path/to/file

ファイルのSGIDビットを削除するには、次のコマンドを実行します。

$ chmod g-s filename /path/to/file

ユーザーが弱いパスワードを設定することは珍しくありません。ログイン時にパスワードを忘れないように、適切な数のパスワードを短く、わかりやすく、簡単に推測できるように設定します。弱いパスワードは便利ですが、ブルートフォース攻撃スクリプトを使用して簡単に侵害される可能性があります。

PAMモジュール(Pluggable Authentication Module)は、システム管理者がLinuxシステムにパスワードポリシーを適用できるようにするモジュールです。これを実現するには、libpam_pwqualityライブラリによって提供されるpam_pwqualityモジュールが必要です。 pam_pwqualityモジュールは、一連のルールとシステムディクショナリに対してパスワードの強度をチェックし、弱いパスワードの選択を特定します。

Ubuntu 18.04以降のバージョンにpam_pwqualityモジュールをインストールするには、次のコマンドを実行します。

$ sudo apt install libpam_pwquality

RHEL/CentOS 8の場合、次のコマンドを実行します。

$ sudo dnf install libpwquality

構成ファイルは次の場所にあります。

  • Debianシステムの場合– /etc/pam.d/common-password
  • RedHatシステムの場合– /etc/pam.d/system-auth

PAM構成ファイルの変更を開始する前に、まず、パスワードのエージング制御に関する洞察を収集することを検討しましょう。

これらは/etc/login.defsファイルにあります。

このファイルには、次の主要なパスワードコントロールが含まれています。

  • PASS_MAX_DAYS:パスワードを使用できる最大日数。
  • PASS_MIN_DAYS:最小数。パスワードの変更の間に許可される日数。
  • PASS_WARN_AGE:パスワードの有効期限が切れるまでに警告が表示される日数。

デフォルト値を以下に示します。

PASS_MAX_DAYS属性は、ユーザーがパスワードを使用できる日数を制限します。この値に達するか、パスワードの有効期限が切れると、ユーザーはシステムにログインするためにパスワードを変更する必要があります。デフォルトでは、この値は99999に設定されており、これは273年に相当します。ユーザーは生涯にわたってパスワードを使い続けることができるため、セキュリティに関する限り、これはあまり意味がありません。

これを意味のある値に設定できます。たとえば、図のように30日です。

PASS_MAX_DAYS  30

30日が経過すると、ユーザーはパスワードを別のパスワードに変更する必要があります。

PASS_MIN_DAYS属性は、ユーザーがパスワードを変更する前に使用できる最小期間を示しています。これは何を意味するのでしょうか?たとえば、この値が15日に設定されている場合、ユーザーは15日が経過する前にパスワードを再度変更することはできません。

PASS_MAX_DAYS  15

PASS_WARN_AGE属性は、パスワードの有効期限が切れる前に、ユーザーがパスワードの有効期限が迫っていることについて警告を受け取る日数を指定します。たとえば、次のようにこれを7日に設定できます。

PASS_MAX_DAYS  7

注:これらのパスワードコントロールは、既存のアカウントでは機能しません。これらは、ルールの定義後に作成された新しいアカウントにのみ適用されます。

/etc/pam.d/common-passwordファイルを編集する前に、バックアップコピーを作成してください。この例では、common-password.bakバックアップコピーファイルを作成しました。

$ sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.bak

次に、ファイルを開きます。

$ sudo vim /etc/pam.d/common-password 

以下に示す行を見つけます。

password        requisite          pam_pwquality.so retry=3

再試行オプションは、エラーが発生する前に正しいパスワードを入力する必要がある最大回数を設定します。デフォルトでは、これは3に設定されています。これは1つのオプションであり、いくつかのオプションを含める予定です。

次の属性を行に追加します。

minlen=10 difok=3 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 reject_username 

これらの属性を具体化してみましょう。

  • minlen u003d 10:パスワードの最小許容サイズを設定します。この場合、10文字です。
  • difok u003d 3:これは前のパスワードに存在する最大文字数です。
  • lcredit u003d -1:これは、パスワードに含める必要のある小文字の最小数です。
  • ucredit u003d -1:は、パスワードに含める必要のある小文字の最大数です。
  • dcredit u003d -1:パスワードで定義する必要のある数字の最小数。
  • ocredit u003d -1:パスワードで定義する必要がある特殊文字の最小数(@、#、&など)。
  • reject_username:このオプションは、パスワードがストレート形式またはリバース形式のいずれかのユーザー名である場合に、パスワードの拒否をトリガーします。

パスワードポリシーに満たない新しいユーザーを作成しようとすると、次のようなエラーが発生します。

これで、システムセキュリティと一般的なセキュリティの基礎に関するトピックは終わりです。この章全体で、ハッカーや不満を持つ従業員などの悪意のあるユーザーからLinuxシステムを保護するために実装できる基本的なセキュリティ対策に光を当てました。