複数のユーザーがパスワードなしで他の複数のユーザーに「su」できるようにする

複数のユーザーがパスワードなしで他の複数のユーザーに「su」できるようにする

これはこの質問に似ています。

user1がパスワードなしで「su - user2」を実行できるようにする

ただし、このソリューションは、複数のユーザーが1人のユーザーに「su」アクセスする場合にのみ機能します。

#works fine :) 2 or more users accessing 1 user
auth       [success=ignore default=1] pam_succeed_if.so user = user1
auth       sufficient   pam_succeed_if.so use_uid user = user2
auth       sufficient   pam_succeed_if.so use_uid user = user3

n人のユーザーをn人のユーザーに転送しようとすると、次のようになります。

#dont work :(
auth       [success=ignore default=1] pam_succeed_if.so user = user1
auth       sufficient   pam_succeed_if.so use_uid user = user2
auth       sufficient   pam_succeed_if.so use_uid user = user3

auth       [success=ignore default=1] pam_succeed_if.so user = user4
auth       sufficient   pam_succeed_if.so use_uid user = user2
auth       sufficient   pam_succeed_if.so use_uid user = user3

PAMエラーが発生するか、パスワードを要求します。

答え1

[success=ignore default=1]私が理解したのは、モジュールが成功以外の結果を返すと、コードは1つのモジュールをスキップすることを意味します。次のステップに進むには、ステップ2をスキップする必要がありますかpam_succeed_if

答え2

認証の順序を次のように変更する必要があります。

auth       [success=1 default=ignore] pam_succeed_if.so user = user1
auth       [success=ignore default=1] pam_succeed_if.so user = user4
auth       sufficient   pam_succeed_if.so use_uid user in user2:user3

答え3

pam_exec.so仕上げはしないで使用していますpam_succeedif.so

直後/etc/pam.d/supam_rootok.so

auth  sufficient             pam_exec.so quiet /etc/pam.d/check_user.sh

存在する/etc/pam.d/check_user.sh

#!/bin/bash
[[ -z $PAM_RUSER ]] && PAM_RUSER=$PAM_USER # under some circumstances pam_exec.so does not pass PAM_RUSER to the script
[[ "$PAM_TYPE" == "auth" ]] || exit 1
case "$PAM_RUSER" in
  user1)        USERS="user1 user2" ; ;;
  user3)        USERS="user3 user4" ; ;;
  *)            exit 1 ; ;;
esac
[[ "$USERS" =~ "$PAM_USER" ]]

関連情報