ユースケース

ユースケース

完全な公開:

私は自分で答えるためにこの質問を書いています。一日中インターネットを検索しましたが、私に合った解決策が見つかりませんでした。さらにロギングを追加するために、独自のGoogleAuthenticator PAMモジュールをコンパイルしました。 OpenVPNプロセスとそのサブプロセスを実行せずにstraceソリューションを見つけました。

ユースケース

  • EC2でOpenVPNを使用してVPNを起動する
  • PAM GoogleAuthenticatorモジュールの使用
  • オペレーティングシステム:CentOS

設定

  • EC2にログイン
  • クライアントの作成
  • 提供されたトークンジェネレータを使用してユーザー(クライアント)にMFAトークンを追加し、このトークンをPAMモジュールが検出できる正しい場所に保存します。
    • <user>.ovpnこのユーザー用のファイルの作成

次のスクリプトはLinuxユーザーを作成し、MFAキーを生成し、それをPAM構成で指定された場所に保存します。権限は、600私がMFA_USER作成した事前に作成されたユーザー名です。gauth

function generate_mfa() {
  user_id=$1

  if [ "$user_id" == "" ]; then
    echo "ERROR: No user id provided to generate MFA token" >&2
    exit 1
  fi

  echo "INFO: Creating user ${user_id}" >&2
  useradd -s /bin/nologin "$user_id"

  echo "> Please provide a password for the user" >&2
  passwd "$user_id"

  echo "INFO: Generating MFA Token" >&2
  google-authenticator -t -d -r3 -R30 -f -l "${MFA_LABEL}" -s "${MFA_DIR}/${user_id}"
  chown "${MFA_USER}:${MFA_USER}" "$MFA_DIR/${user_id}"
  chmod 600 "${MFA_DIR}/${user_id}"
}

OpenVPN PAMの設定

auth        required    /usr/lib64/security/pam_google_authenticator.so secret=/etc/openvpn/google-authenticator/${USER} user=gauth  forward_pass
auth        include     system-auth    use_first_pass
account     include     system-auth    use_first_pass
password    include     system-auth    use_first_pass
session     include     system-auth    use_first_pass
auth        required    pam_deny.so

質問

  • 自分で設定されたTunnelblickを使用すると、client.ovpn自分のユーザー名とパスワードでログインするように求められます。
    • パスワードの形式は inline: であり、ディレクティブによって<password><MFA_TOKEN>削除されます。forward_pass
  • 正しい資格情報を入力しても承認されていないメッセージが表示されます。

丸太

  • 私の問題を確認するために、SSHを介してVPNインスタンスにログインし、PAM /認証ログを確認しました。tail /var/log/secure
Sep 10 22:33:43 ip-OMITTED openvpn(pam_google_authenticator)[12862]: Accepted google_authenticator for ryan
Sep 10 22:33:43 ip-OMITTED openvpn(pam_google_authenticator)[12862]: Failed to update secret file "/etc/openvpn/google-authenticator/ryan": Permission denied

ああ! 「許可が拒否されました」

その後、私の権限を確認してください。

[root@ip-OMITTED centos]# ls -lah /etc/openvpn/google-authenticator/
drwxr-xr-x. gauth gauth .
drwxr-xr-x. root  root  ..
-rw-------. gauth gauth ryan
  • まあ、権限が600正しいようです。このディレクトリは実行可能であり、gauthPAM構成でこのユーザーを使用します。

私の構成にはどのような問題がありますか?

  • ユーザーがgauth存在します:check:
  • 権限が正しい:check:

ベストアンサー1

アハ瞬間

.私の権限リストの最後にあるものは何ですか?

[root@ip-OMITTED centos]# ls -lah /etc/openvpn/google-authenticator/
drwxr-xr-x. gauth gauth .
drwxr-xr-x. root  root  ..
-rw-------. gauth gauth ryan

...Searchin' the web...

  • ということがあるようです。SELinux(セキュリティが強化されたLinux)

それls -lahファイルの特別なコンテキスト/ACLコンテンツがあることを示すランタイムファイルの権限の末尾にあります。

  • 望むより:SELinuxドキュメント

  • したがって、コンテキストを表示するには、次のようにします。 ls -Z

ログインする前に

ファイルコンテキストはunconfined_u:object_r:openvpn_etc_t:s0

[root@ip-OMITTED centos]# ls -lahZ /etc/openvpn/google-authenticator/
drwxr-xr-x. gauth gauth unconfined_u:object_r:openvpn_etc_t:s0 .
drwxr-xr-x. root  root  system_u:object_r:openvpn_etc_t:s0 ..
-rw-------. gauth gauth unconfined_u:object_r:openvpn_etc_t:s0 ryan
  • その後、一時的にselinuxを無効にしました。setenforce 0

1回のログイン後

ファイルが書き込まれ、コンテキストが強制的に作成されます。 system_u:object_r:openvpn_etc_rw_t:s0

[root@ip-OMITTED centos]# ls -lahZ /etc/openvpn/google-authenticator/
drwxr-xr-x. gauth gauth unconfined_u:object_r:openvpn_etc_t:s0 .
drwxr-xr-x. root  root  system_u:object_r:openvpn_etc_t:s0 ..
-r--------. gauth gauth system_u:object_r:openvpn_etc_rw_t:s0 ryan
  • SELinuxを再度有効にします。setenforce 1

  • まだログインできます。 :)

SELinuxがオンのときにファイルを回復するには、次のコマンドを実行します。

semanage fcontext -a -t openvpn_etc_rw_t "${MFA_DIR}/${user}" restorecon "${MFA_DIR}/${user}"

  • これはrwビットを許可します!

おすすめ記事