GitLab 13.2로 업데이트: 이메일 확인 문제

GitLab 13.0.1 보안 릴리스에서는 사용자가 이메일 확인 프로세스를 우회할 수 있는 보안 문제에 대해 설명했습니다. 해당 공지에서는 영향을 받는 모든 설치를 최대한 빨리 최신 버전으로 업그레이드할 것을 강력히 권장했습니다.

Self-managed 인스턴스에서 여러 이메일 주소를 가진 사용자는 코드를 커밋하고 로그인할 수없을 수 있습니다. 자세한 내용은 다음에 해결된 및 종료된 보안 문제를 참조하십시오.

위험: 사용자가 확인이 필요한 이메일을 받음

GitLab 13.2로의 업데이트 프로세스 중에 보안 문제의 조건을 충족하는 계정에 대해 배경 마이그레이션이 실행됩니다. 이러한 사용자는 _미확인(unconfirmed)_으로 표시됩니다.

미확인 사용자에게 초기 이메일이 발송되어 문제에 대해 설명합니다. 그 후 5분 이내에 사용자에게 문제의 이메일 주소를 다시 확인하는 링크가 포함된 두 번째 이메일이 발송됩니다.

확인 이메일이 만료되는가요?

이 재확인 이메일의 링크는 기본적으로 하루 후에 만료됩니다. 만료된 링크를 선택한 사용자에게는 새로운 재확인 이메일을 요청하라는 메시지가 표시됩니다. 어떤 사용자든 http://gitlab.example.com/users/confirmation/new에서 새로운 재확인 이메일을 요청할 수 있습니다.

영향을 받는 사용자 디렉터리 생성

다양한 방법을 사용하여 업그레이드 전후에 해당 디렉터리을 생성할 수 있습니다.

GitLab 13.2로의 업그레이드 전

다음 코드를 사용하여 다음 조건을 충족하는 사용자를 검색합니다.

  • 현재 확인된 상태인 사용자.
  • 동일한 confirmed_at 시간을 포함하는 사용자.
  • 부가적 이메일 주소도 포함하는 사용자.
emails_and_users_that_will_be_unconfirmed = Email.joins(:user).merge(User.active).where('emails.confirmed_at IS NOT NULL').where('emails.confirmed_at = users.confirmed_at').where('emails.email <> users.email')

GitLab 13.2로의 업그레이드 후

다음 코드를 사용하여 다음 조건을 충족하는 사용자를 검색합니다.

  • 현재 확인되지 않은 사용자.
  • 업그레이드 날짜 이후에도 아직 확인이 필요한 사용자.
User.where(confirmed_at: nil).where('LENGTH(confirmation_token) = 32')

사용자가 차단되었을 때 어떻게 보이나요?

사용자는 “계속하기 전에 이메일 주소를 확인해야합니다”라는 메시지를 받을 수 있습니다. 이 메시지는 사용자가 로그인을 시도할 때 404 또는 422 오류 코드를 포함할 수 있습니다.

note
미확인 사용자들에 대한 로그인 경험을 개선하는 것이 향후 릴리스에서 개선될 것으로 기대합니다.

영향을 받는 사용자가 Git 리포지터리에 코드를 커밋하면 다음 메시지가 표시될 수 있습니다.

Your account has been blocked. Fatal: Could not read from remote repository

# 또는

Your primary email address is not confirmed.

사용자들에게 해당 메시지가 표시되면, 코드를 커밋하기 전에 이메일 주소를 확인해야 합니다.

Self-managed GitLab 인스턴스의 관리자로서 알아야 할 내용은 무엇인가요?

사용자를 돕기 위한 다음 옵션이 있습니다:

  • 받은 이메일을 통해 주소를 확인할 수 있습니다.
  • https://gitlab.example.com/users/confirmation/new로 이동하여 해당 이메일 주소를 확인할 수 있습니다.

관리자로서 관리자 영역에서 사용자를 확인할 수도 있습니다.

관리자이며 잠겼을 때 어떻게 해야 하나요?

관리자이고 이메일 주소를 확인할 수 없는 경우 Rails 콘솔 세션으로 GitLab 인스턴스에 로그인합니다. 연결된 후 다음 명령을 실행하여 관리자 계정을 확인합니다.

admin = User.find_by_username "root" # 관리자 사용자명으로 대체
admin.confirmed_at = Time.zone.now
admin.save!

Self-managed 인스턴스의 모든 사용자를 강제로 확인하는 방법은 무엇인가요?

관리자이고 시스템의 모든 사용자를 강제로 확인하려면 Rails 콘솔 세션으로 GitLab 인스턴스에 로그인합니다. 연결된 후 다음 명령을 실행하여 모든 사용자 계정을 확인합니다.

User.where('LENGTH(confirmation_token) = 32').where(confirmed_at: nil).find_each { |u| u.confirmed_at = Time.now; u.save }
caution
이 섹션에서 설명한 명령은 이메일 주소를 제대로 확인하지 않은 사용자를 활성화할 수 있습니다.

LDAP 사용자는 어떻게 되나요?

LDAP 사용자는 다음 조건을 모두 충족하는 경우 확인된 상태를 유지합니다:

note
확인 타임스탬프 (주요 vs. 부가)는 다릅니다.

다음 조건 중 하나라도 해당되면 배경 마이그레이션에 의해 사용자는 확인되지 않은 상태로 유지됩니다: