사용 사례

사용 사례

전체 공개:

나는 스스로 대답하기 위해 이 질문을 쓰고 있습니다. 하루 종일 인터넷을 검색했지만 나에게 맞는 솔루션을 찾을 수 없습니다. 더 많은 로깅을 추가하기 위해 자체 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

한 번의 로그인 후

파일을 쓸 수 있고 컨텍스트가 강제로 작성됩니다. 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비트를 허용합니다!

관련 정보