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 install
as 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