pam_slurm_adopt
The purpose of this module is to prevent users from sshing into nodes that
they do not have a running job on, and to track the ssh connection and any
other spawned processes for accounting and to ensure complete job cleanup when
the job is completed. This module does this by determining the job which
originated the ssh connection. The user's connection is "adopted" into the
"external" step of the job.
このモジュールの目的は、実行中のジョブがないノードにユーザーがsshでログインできないようにすること、およびssh接続とアカウンティングのために生成されたその他のプロセスを追跡し、ジョブが完了したときにジョブが完全にクリーンアップされるようにすることです。このモジュールは、ssh接続を開始したジョブを判別することによってこれを行います。ユーザーの接続は、ジョブの「外部」ステップに「採用」されます。
Installation
Source:
In your Slurm build directory, navigate to slurm/contribs/pam_slurm_adopt/
and run
Slurmビルドディレクトリで、slurm / contribs / pam_slurm_adopt /に移動して実行します
make && make installas root. This will place pam_slurm_adopt.a, pam_slurm_adopt.la, and pam_slurm_adopt.so in /lib/security/ (on Debian systems) or /lib64/security/ (on RedHat/SuSE systems).
ルートとして。これにより、pam_slurm_adopt.a、pam_slurm_adopt.la、およびpam_slurm_adopt.soが/ lib / security /(Debianシステムの場合)または/ lib64 / security /(RedHat / SuSEシステムの場合)に配置されます。
RPM:
The included slurm.spec will build a slurm-pam_slurm RPM which will install
pam_slurm_adopt. Refer to the
Quick Start
Administrator Guide for instructions on managing an RPM-based install.
含まれているslurm.specは、pam_slurm_adoptをインストールするslurm-pam_slurm RPMをビルドします。RPMベースのインストールの管理手順については、クイックスタート管理者ガイドを参照してください。
PAM Configuration
Add the following line to the appropriate file in /etc/pam.d, such as
system-auth or sshd (you may use either the "required" or "sufficient" PAM
control flag):
/etc/pam.dの適切なファイル(system-authやsshdなど)に次の行を追加します(「必須」または「十分」なPAM制御フラグを使用できます)。
account required pam_slurm_adopt.so
The order of plugins is very important. pam_slurm_adopt.so should be the
last PAM module in the account stack. Included files such as common-account
should normally be included before pam_slurm_adopt.
You might have the following account stack in sshd:
プラグインの順序は非常に重要です。pam_slurm_adopt.soは、アカウントスタックの最後のPAMモジュールである必要があります。common-accountなどのインクルードファイルは、通常、pam_slurm_adoptの前にインクルードする必要があります。sshdに次のアカウントスタックがある場合があります。
account required pam_nologin.so account include password-auth ... -account required pam_slurm_adopt.so
Note the "-" before the account entry for pam_slurm_adopt. It allows
PAM to fail gracefully if the pam_slurm_adopt.so file is not found. If Slurm
is on a shared filesystem, such as NFS, then this is suggested to avoid being
locked out of a node while the shared filesystem is mounting or down.
pam_slurm_adoptのアカウントエントリの前の「-」に注意してください。pam_slurm_adopt.soファイルが見つからない場合、PAMは正常に失敗します。SlurmがNFSなどの共有ファイルシステム上にある場合、共有ファイルシステムがマウントまたはダウンしている間、ノードからロックアウトされないようにするためにこれをお勧めします。
pam_slurm_adopt must be used with the task/cgroup task plugin and either the
proctrack/cgroup or the proctrack/cray_aries proctrack plugin.
The pam_systemd module will conflict with pam_slurm_adopt, so you need to
disable it in all files that are included in sshd or system-auth (e.g.
password-auth, common-session, etc.). You should also stop and mask
systemd-logind. You must also make sure a different PAM
module isn't short-circuiting the account stack before it gets to
pam_slurm_adopt.so. From the example above, the following two lines have been
commented out in the included password-auth file:
pam_slurm_adoptはtask / cgroupタスクプラグインとproctrack / cgroupまたはproctrack / cray_aries proctrackプラグインのいずれかとともに使用する必要があります。pam_systemdモジュールはpam_slurm_adoptと競合するため、sshdまたはsystem-authに含まれているすべてのファイル(password-auth、common-sessionなど)で無効にする必要があります。systemd-logindも停止してマスクする必要があります。また、pam_slurm_adopt.soに到達する前に、別のPAMモジュールがアカウントスタックを短絡させていないことを確認する必要があります。上記の例から、含まれているpassword-authファイルで次の2行がコメント化されています。
#account sufficient pam_localuser.so #-session optional pam_systemd.so
Note: This may involve editing a file that is auto-generated.
Do not run the config script that generates the file or your
changes will be erased.
注:これには、自動生成されたファイルの編集が含まれる場合があります。ファイルを生成する構成スクリプトを実行しないでください。実行すると、変更が消去されます。
If you always want to allow access for an administrative group (e.g., wheel),
stack the pam_access module after pam_slurm_adopt. A success with
pam_slurm_adopt is sufficient to allow access, but the pam_access module can
allow others, such as administrative staff, access even without jobs on that
node:
常に管理グループ(ホイールなど)にアクセスを許可する場合は、pam_slurm_adoptの後にpam_accessモジュールをスタックします。pam_slurm_adoptでの成功は、アクセスを許可するのに十分ですが、pam_accessモジュールは、そのノードにジョブがない場合でも、管理スタッフなどの他のユーザーにアクセスを許可できます。
account sufficient pam_slurm_adopt.so account required pam_access.so
Then edit the pam_access configuration file (/etc/security/access.conf):
次に、pam_access構成ファイル(/etc/security/access.conf)を編集します。
+:wheel:ALL -:ALL:ALL
An alternative to pam_access is to place pam_listfile.so before
pam_slurm_adopt.so. For example:
pam_accessの代わりに、pam_slurm_adopt.soの前にpam_listfile.soを配置することもできます。例えば:
account sufficient pam_listfile.so item=user sense=allow onerr=fail file=/path/to/allowed_users_file account required pam_slurm_adopt.so
List the usernames of the allowed users in allowed_users_file.
許可されたユーザーのユーザー名をallowed_users_fileにリストします。
When access is denied, the user will receive a relevant error message.
アクセスが拒否されると、ユーザーは関連するエラーメッセージを受け取ります。
pam_slurm_adopt Module Options
This module is configurable. Add these options to the end of the pam_slurm_adopt
line in the appropriate file in /etc/pam.d/ (e.g., sshd or system-auth):
このモジュールは構成可能です。これらのオプションを/etc/pam.d/内の適切なファイル(たとえば、sshdまたはsystem-auth)のpam_slurm_adopt行の最後に追加します。
account sufficient pam_slurm_adopt.so optionname=optionvalue
This module has the following options:
このモジュールには次のオプションがあります。
- action_no_jobs
-
The action to perform if the user has no jobs on the node. Configurable
values are:
ユーザーがノードにジョブを持っていない場合に実行するアクション。構成可能な値は次のとおりです。
-
- ignore
- Do nothing. Fall through to the next pam module.
何もしない。次のpamモジュールに進んでください。 - deny (default)
- Deny the connection.
接続を拒否します。
-
- action_unknown
-
The action to perform when the user has multiple jobs on the node and
the RPC does not locate the source job. If the RPC mechanism works properly in
your environment, this option will likely be relevant only when
connecting from a login node. Configurable values are:
ユーザーがノードに複数のジョブを持ち、RPCがソースジョブを見つけられない場合に実行するアクション。RPCメカニズムがご使用の環境で適切に機能する場合、このオプションはログインノードから接続する場合にのみ関連する可能性があります。構成可能な値は次のとおりです。
-
- newest (default)
- Pick the newest job on the node. The "newest" job is chosen based
on the mtime of the job's step_extern cgroup; asking Slurm would
require an RPC to the controller. Thus, the memory cgroup must be in
use so that the code can check mtimes of cgroup directories. The user
can ssh in but may be adopted into a job that exits earlier than the
job they intended to check on. The ssh connection will at least be
subject to appropriate limits and the user can be informed of better
ways to accomplish their objectives if this becomes a problem.
ノードで最新のジョブを選択します。「最新」のジョブは、ジョブのstep_extern cgroupのmtimeに基づいて選択されます。Slurmに要求すると、コントローラへのRPCが必要になります。したがって、コードがcgroupディレクトリのmtimesをチェックできるように、メモリcgroupが使用されている必要があります。ユーザーはSSHでログインできますが、チェックするつもりだったジョブよりも早く終了するジョブに採用される可能性があります。ssh接続には少なくとも適切な制限が適用され、これが問題になった場合、ユーザーは目的を達成するためのより良い方法を知ることができます。
NOTE: If the module fails to retrieve the cgroup mtime, then the picked job may not be the newest one.
注:モジュールがcgroup mtimeの取得に失敗した場合、選択したジョブは最新のものではない可能性があります。
- allow
- Let the connection through without adoption.
採用せずに接続を通過させます。 - deny
- Deny the connection.
接続を拒否します。
-
- action_adopt_failure
- The action to perform if the process is unable to be adopted into any
job for whatever reason. If the process cannot be adopted into the job
identified by the callerid RPC, it will fall through to the action_unknown
code and try to adopt there. A failure at that point or if there is only
one job will result in this action being taken. Configurable values are:
プロセスが何らかの理由でジョブに採用できない場合に実行するアクション。callerid RPCで識別されたジョブにプロセスを採用できない場合は、action_unknownコードに移り、そこで採用を試みます。その時点で障害が発生した場合、またはジョブが1つしかない場合は、このアクションが実行されます。構成可能な値は次のとおりです。
-
- allow (default)
- Let the connection through without adoption. WARNING: This value is
insecure and is recommended for testing purposes only. We recommend using
"deny."
採用せずに接続を通過させます。警告:この値は安全ではないため、テスト目的でのみ使用することをお勧めします。「拒否」の使用をお勧めします。 - deny
- Deny the connection.
接続を拒否します。
-
- action_generic_failure
- The action to perform if there are certain failures such as the
inability to talk to the local slurmd or if the kernel doesn't offer
the correct facilities. Configurable values are:
ローカルslurmdと通信できないなどの特定の障害が発生した場合、またはカーネルが適切な機能を提供していない場合に実行するアクション。構成可能な値は次のとおりです。
-
- ignore (default)
- Do nothing. Fall through to the next pam module. WARNING: This value is
insecure and is recommended for testing purposes only. We recommend using
"deny."
何もしない。次のpamモジュールに進んでください。警告:この値は安全ではないため、テスト目的でのみ使用することをお勧めします。「拒否」の使用をお勧めします。 - allow
- Let the connection through without adoption.
採用せずに接続を通過させます。 - deny
- Deny the connection.
接続を拒否します。
-
- disable_x11
- Turn off Slurm built-in X11 forwarding support. Configurable values are:
Slurm組み込みX11転送サポートをオフにします。構成可能な値は次のとおりです。
-
- 0 (default)
- If the job the connection is adopted into has Slurm's X11 forwarding
enabled, the DISPLAY variable will be overwritten with the X11 tunnel
endpoint details.
接続が採用されているジョブでSlurmのX11転送が有効になっている場合、DISPLAY変数はX11トンネルエンドポイントの詳細で上書きされます。 - 1
- Do not check for Slurm's X11 forwarding support, and do not alter the
DISPLAY variable.
SlurmのX11転送サポートを確認しないでください。また、DISPLAY変数を変更しないでください。
-
- log_level
- See
SlurmdDebug in slurm.conf for available options.
The default log_level is info.
使用可能なオプションについては、slurm.confのSlurmdDebugを参照してください。デフォルトのlog_levelはinfoです。
- nodename
- If the NodeName defined in slurm.conf is different than this node's
hostname (as reported by hostname -s), then this must be set to the
NodeName in slurm.conf that this host operates as.
slurm.confで定義されたNodeNameがこのノードのホスト名(hostname -sで報告される)と異なる場合、これは、このホストが動作するslurm.confのNodeNameに設定する必要があります。
- service
- The pam service name for which this module should run. By default
it only runs for sshd for which it was designed for. A
different service name can be specified like "login" or "*" to
allow the module to in any service context. For local pam logins
this module could cause unexpected behaviour or even security
issues. Therefore if the service name does not match then this
module will not perform the adoption logic and returns
PAM_IGNORE immediately.
このモジュールを実行する必要があるpamサービス名。デフォルトでは、設計されたsshdに対してのみ実行されます。「ログイン」や「*」などの別のサービス名を指定して、モジュールを任意のサービスコンテキストで許可できます。ローカルpamログインの場合、このモジュールは予期しない動作やセキュリティの問題を引き起こす可能性があります。したがって、サービス名が一致しない場合、このモジュールは採用ロジックを実行せず、すぐにPAM_IGNOREを返します。
Slurm Configuration
PrologFlags=contain must be set in the slurm.conf. This sets up the
"extern" step into which ssh-launched processes will be adopted. You must also
enable the task/cgroup plugin in slurm.conf. See the Slurm cgroups guide.
PrologFlags = containは、slurm.confで設定する必要があります。これにより、SSH起動プロセスが採用される「外部」ステップが設定されます。slurm.confでtask / cgroupプラグインも有効にする必要があります。Slurm cgroupsガイドを参照してください。
Important
PrologFlags=contain must be in place before using this module.
The module bases its checks on local steps that have already been launched. If
the user has no steps on the node, such as the extern step, the module will
assume that the user has no jobs allocated to the node. Depending on your
configuration of the PAM module, you might accidentally deny all user ssh
attempts without PrologFlags=contain.
このモジュールを使用する前に、PrologFlags = containを配置する必要があります。モジュールは、すでに起動されているローカルステップに基づいてチェックを行います。ユーザーがexternステップなどのノードでステップを持たない場合、モジュールはユーザーがノードに割り当てられたジョブを持たないと想定します。PAMモジュールの構成によっては、PrologFlags = containなしですべてのユーザーのssh試行を誤って拒否する可能性があります。
The UsePAM option in slurm.conf is not related to pam_slurm_adopt.
slurm.confのUsePAMオプションは、pam_slurm_adoptとは関係ありません。
Other Configuration
Verify that UsePAM is set to On in /etc/ssh/sshd_config (it
should be on by default).
/ etc / ssh / sshd_configでUsePAMがオンに設定されていることを確認します(デフォルトでオンになっているはずです)。
Firewalls, IP Addresses, etc.
slurmd should be accessible on any IP address from which a user might
launch ssh. The RPC to determine the source job must be able to reach the
slurmd port on that particular IP address. If there is no slurmd
on the source node, such as on a login node, it is better to have the RPC be
rejected rather than silently dropped. This will allow better responsiveness to
the RPC initiator.
slurmdは、ユーザーがsshを起動する可能性があるすべてのIPアドレスでアクセスできる必要があります。ソースジョブを決定するRPCは、その特定のIPアドレスのslurmdポートに到達できる必要があります。ログインノードなどのソースノードにslurmdがない場合は、サイレントにドロップするのではなく、RPCを拒否することをお勧めします。これにより、RPCイニシエーターに対する応答性が向上します。
Limitations
Alternate authentication methods such as multi-factor authentication may
break process adoption with pam_slurm_adopt.
多要素認証などの代替認証方法は、pam_slurm_adoptによるプロセスの採用を妨げる可能性があります。
SELinux may conflict with pam_slurm_adopt, so it might need to be
disabled.
SELinuxはpam_slurm_adoptと競合する可能性があるため、無効にする必要がある場合があります。
Last modified 29 April 2019