ウェブサイト検索

Linuxマシン上でユーザーのアクセスを制限する方法


目的

Linux マシンでのユーザー アクセスを制限する方法をご確認ください

オペレーティングシステムとソフトウェアのバージョン

  • オペレーティングシステム: – すべてのLinuxディストリビューション

要件

  • ルート権限

難しさ

イージー

協定

  • # – 指定されたLinuxコマンドをルート権限で実行する必要があります。直接ルートユーザーとして、またはsudoコマンドを使用して実行できます。
  • $ – 一般的な非特権ユーザーとして実行される必要があるLinuxコマンドを要求します

紹介

このチュートリアルでは、Linuxマシンへのアクセスを制限する方法を学びます。2つのファイル、/etc/securetty(ここから直接rootとしてログインできるコンソールを指定できる)と、/etc/security/access.conf(特定のユーザーやグループが特定の起源からアクセスできないようにする規則を設定できる)を操作します。

ルートログインを制限する

最初に行うことは、特定のコンソールでのみ直接rootアクセスを許可するために、/etc/securettyファイルを編集する方法を学ぶことです。ファイルを見てみましょう:これはCentOS7マシン上での見た目です:

console
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
vc/9
vc/10
vc/11
tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
tty9
tty10
tty11
ttyS0
ttysclp0
sclp_line0
3270/tty1
hvc0
hvc1
hvc2
hvc3
hvc4
hvc5
hvc6
hvc7
hvsi0
hvsi1
hvsi2
xvc0

そこに見えるのは、ルートユーザーとして直接アクセスが許可されているすべての端末のリストです。今は tty デバイスに注目しましょう。テキストエディタでファイルを開き、tty1 のエントリにコメントを追加してください:

[...]
#tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
tty9
tty10
tty11
[...]

テキストエディタを保存して終了します。次に、CTRL + alt + 1を押すか、chvt 1を実行して最初のttyに切り替え、rootとしてログインしようとすると、次のような結果になります:

予想通り、システムは指定されたttyからのrootとしてのアクセスを拒否しました。root権限を取得し、管理タスクを実行するためには、まず通常のユーザーとしてログインし、その後sudoまたはsuを使用する必要があります(許可されている場合は別のttyからログインすることもできます)。

この設定は、sshを使用してrootとしてログインする能力には影響しないことに注意してください。その特定の動作を回避するためには、sshサーバーを設定し、/etc/ssh/sshd_configファイルを変更して、PermitRootLoginディレクティブをnoに設定する必要があります。

/etc/security/access.conf にアクセスルールを設定します。

もし/etc/securettyファイルが、どの端末から直接rootとしてログインできるかを指定することを許可しているなら、/etc/security/access.confファイルでアクセスルールを設定することで、特定のユーザーやグループが特定の起源からアクセスできるようにしたり、拒否したりすることができます。

pam_access.soモジュールを挿入してください

ルールを設定する前に、/etc/pam.d/login を修正して、pam_access.so モジュールを追加する必要があります。このモジュールにより、pam は私たちが定義するルールのために access.conf ファイルをスキャンします。好きなテキストエディタを使用して、ファイルを次のように修正してください:

#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       substack     system-auth
auth       include      postlogin
account    required     pam_nologin.so
account    required	pam_access.so
account    include      system-auth
password   include      system-auth
pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_console.so
pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    include      postlogin
-session   optional     pam_ck_connector.so

私たちが行ったことは、accountセクションの最後にaccount required pam_access.so行を追加することです。今、pamの設定が完了したので、アクセスルールについて話を始めることができます。

ルールの構文

access.confファイルでルールを定義するには、とてもシンプルで明確な構文を守る必要があります。ルールは3つのセクションで構成されており、コロンで分けられています:

permission : users : origins

ルールの最初の部分は権限を指定しており、-または+の記号で構成されています。前者は「拒否」ルールを作成し、後者はアクセス権が付与されるルールを指定します。

第二部ではルールの対象について説明します。このセクションは、グループまたはログイン名のリストで構成されています。同じ名前で識別される可能性のあるユーザーとグループの間の競合を避けるために、グループのエントリは括弧内で指定できますが、これは上記で修正した/etc/pam.d/loginファイルでnodefgroupオプションが設定されている場合のみです。私たちが追加した行の末尾にあります。

ルールの第3部は、アクセスが許可されるか拒否されるかのソースを指定しています。それは、1つ以上のttys、ホスト名、ホストアドレス、またはドメインである場合があります。

キーワード

ルールの構文により、強力なキーワードを使用することができます。まず最初に、ALL があります。このキーワードは常に一致します。例えば、第二セクションで使用されると、すべての可能なユーザーやグループに一致します。また、第三セクションで使用されれば、すべての可能なソースに一致します。

NONEキーワードはALLの正反対の効果を持ち、LOCALはルールのoriginsセクション内でのみ意味を持ち、‘.’を含まないすべての文字列にマッチします。最後に、非常に強力なキーワードEXCEPTは、特定のルールに対する例外を指定することを可能にします。

いくつかの例

このファイルはいくつかの役に立つ例を提供していますので、それらのいくつかを見てみましょう。まず最初に、以下のものがあります:

- : ALL EXCEPT root : tty1

この行は、/etc/securettyファイルを変更することで以前得た結果とは反対の結果を得ることを可能にします。まず最初に、-記号があり、これはdenyルールを意味します。次のセクションでは、コロンで区切られた部分にALL EXCEPT rootがあり、これはルールがroot以外のすべてのユーザーに適用されることを示しています。そして第三のセクションでは、指定されたルールは誰かがtty1からアクセスしようとする場合にのみ有効であることがわかります。

別の例、今回は複数のユーザー名を使っています:

-:wsbscaro wsbsecr wsbspac wsbsym wscosor wstaiwde:ALL

このルールは、すべてのソースから wsbscaro、wsbsecr、wsbspac、wsbsym、wscosor、および wstaiwde ユーザーへのアクセスを禁止しています(ALL キーワードの使用例を参照)。

より複雑なものです。今回は、ルールがlocalログインのホイールグループのメンバーでないすべてのユーザーへのアクセスを拒否します:

-:ALL EXCEPT (wheel):LOCAL

最後に、リモートログインのルールを指定する例があります:

+ : root : 192.168.200.1 192.168.200.4 192.168.200.9

私たちが今理解すべきことは、このルールによりrootは指定されたIPアドレスからのみシステムにアクセスできるということです。

テストケース

上記の内容をテストケースで確認することができます:tty1 から egdoc(このシステムでの私のアカウント)へのアクセスを拒否するルールを作成し、/etc/security/access.conf ファイルの最後に追加しましょう:

-:egdoc:tty1

さて、tty1 に切り替えてログインしようとすると、システムからこの失礼な応答が返ってきます。

指定されたルールの順序が /etc/security/access.conf ファイル内で非常に重要であることに注意してください。ルールは出現順に評価されます。

関連記事: