PAM 및 sudo 문제

sudo with MFA와 Alpamon PAM 모듈(alpamon-pam)의 문제 해결 가이드입니다. 각 절은 화면에 표시되는 메시지를 먼저 보여준 뒤 원인과 해결 방법을 설명합니다.

”A terminal is required to authenticate”

sudo-rs를 사용하는 호스트(Ubuntu 25.10 이상)에서는 alpacon exec 등을 통해 터미널 없이 실행한 sudo 명령어가 다음 메시지와 함께 실패할 수 있습니다:

sudo: A terminal is required to authenticate

이 메시지는 sudo 실행 과정에서 Alpacon 인가가 완료되지 않았다는 뜻입니다. sudo-rs는 기존 sudo와 달리 터미널이 연결되지 않으면 실패 이유를 표시할 수 없어 이 일반적인 메시지를 대신 출력합니다. 주된 원인은 다음과 같습니다:

  • 명령어가 거부되었지만 터미널이 없어 이유가 표시되지 않습니다. 예를 들어 작업 세션에 명령어와 일치하는 sudo 정책이 없을 수 있습니다.
  • 워크스페이스에서 sudo with MFA가 꺼져 있습니다.
  • sudo 명령어가 Alpacon에서 추적하는 세션에서 실행되지 않았습니다.

실제 원인을 확인하려면 서버에서 시도한 시간대의 journalctl -u alpamon 출력을 확인하고 다음 로그를 찾으세요.

로그 내용의미
No session found for PIDsudo가 Alpacon에서 추적하는 세션에서 실행되지 않았습니다. 승인된 작업 세션 또는 대화형 Websh 세션 안에서 실행하세요.
sudo_approval response timeoutAlpacon이 요청을 보냈지만 서버로부터 제때 응답을 받지 못했습니다. 연결 상태를 확인하고 다시 시도하세요.
approved=false와 error_code가 포함된 Processing sudo_approval response명령어가 거부되었습니다. “Alpacon denied this sudo command”에서 코드를 확인하세요.

sudoers 규칙이 없는 경우

sudo를 실행할 권한이 없는 사용자에게는 sudo 구현에 따라 다음 메시지 중 하나가 표시됩니다:

# sudo-rs (Ubuntu 25.10+)
sudo: I'm sorry user. I'm afraid I can't do that

# classic sudo
user is not in the sudoers file.

Alpacon이 관리하는 호스트에서는 Alpacon을 통해 sudo를 사용할 수 있게 하는 sudoers 규칙(%alpacon)이 PAM 모듈(alpamon-pam)과 함께 설치됩니다. 이 메시지가 표시된다면 보통 서버에 alpamon-pam이 설치되지 않은 것입니다. 패키지가 설치되어 있는지 확인하세요:

bash
# Debian/Ubuntu
dpkg-query -W alpamon-pam
 
# RHEL/CentOS/Rocky/Alma/Fedora, openSUSE/SLES
rpm -q alpamon-pam

다시 설치하려면 다음과 같이 하세요:

  • 서버 한 대: 서버의 에이전트 카드에서 alpamon-pam 설치 또는 업그레이드 버튼을 누르거나 CLI로 alpacon agent install-pam <server>를 실행하세요. 두 방법 모두 install_pam 작업을 보내 호스트의 패키지 매니저로 패키지를 root 권한으로 설치합니다. 워크스페이스의 Alpacon을 통한 sudo가 꺼져 있으면 버튼이 비활성화되고 CLI 요청이 거부되므로 먼저 설정을 켜세요. 호스트에서 직접 설치하려면 Debian/Ubuntu는 apt-get install -y alpamon-pam, RHEL 계열은 yum install -y alpamon-pam, openSUSE와 SLES는 zypper --non-interactive install alpamon-pam을 사용하세요. 설치를 참고하세요.
  • 패키지는 있지만 /etc/sudoers.d/alpacon이 없는 경우: 이미 현재 버전이 설치된 호스트에서는 이 작업이 아무것도 하지 않습니다. 셸에서 apt-get install --reinstall -y alpamon-pam 또는 yum reinstall -y alpamon-pam으로 다시 설치해 파일을 복구하세요.
  • 워크스페이스 전체: Alpacon을 통한 sudo이 꺼져 있다면 접근 규칙에서 다시 켜세요. 현재 연결된 모든 서버에 alpamon-pam이 다시 설치됩니다.

openSUSE·SLES에서 sudo가 실패하거나 root 비밀번호를 묻는 경우

openSUSE와 SLES에는 alpamon-pam 1.1.5 이상이 필요합니다. 그보다 낮은 버전에서는 버전마다 다음 증상이 나타납니다.

버전증상
1.1.2 이하zypper install alpamon-pam이 nothing provides 'jansson' 오류로 멈춥니다.
1.1.3서버의 모든 sudo가 unable to load /usr/lib/sudo/sudo/alpacon_approval.so 오류로 실패합니다.
1.1.4sudo가 Alpacon 사용자에게 root 비밀번호를 묻습니다. Alpacon 사용자는 이 비밀번호를 모릅니다.

서버의 root 셸에서 zypper --non-interactive install alpamon-pam으로 업그레이드하세요. sudo가 아예 안 되는 1.1.3이라면 root 비밀번호로 su -를 쓰거나 서버 콘솔로 접속해 root 셸을 엽니다. 서버 상세 페이지에 alpamon-pam 설치 또는 업그레이드가 보이면 이것으로도 같은 업그레이드를 할 수 있습니다. 이 작업은 에이전트가 실행하므로 sudo가 안 되는 서버에서도 동작합니다.

예전 openSUSE·SLES 설치 명령으로 등록한 서버에는 /etc/sudoers.d/alpacon-wheel이 남아 있을 수 있습니다. Alpacon 사용자에게는 필요 없는 파일입니다. Ansible 플레이가 접속하는 사용자처럼 직접 관리하는 계정이 이 파일에 기대고 있지 않다면 지워도 됩니다.

”Alpacon denied this sudo command”

sudo 거부 사유에 오류 코드가 있으면 터미널에 다음과 같이 표시됩니다:

Alpacon denied this sudo command (SUDO_NO_WORKSESSION_POLICY).

오류 코드로 거부 이유와 해결 방법을 확인할 수 있습니다.

워크스페이스 설정은 접근 규칙의 Alpacon을 통한 sudo입니다. 세션에 기능을 추가하려면 세션 페이지에서 Sudo를 선택하거나 alpacon work-session update --scope를 사용하세요. 정책을 추가할 때는 sudo 명령어 패턴 규칙을 확인하세요.

코드의미조치
SUDO_SESSION_MISSING#sudo 요청에 해당하는 열린 세션이나 명령어를 찾지 못했습니다.승인된 작업 세션이나 대화형 Websh 세션 안에서 sudo를 다시 실행하세요.
WORK_SESSION_SCOPE_NOT_ALLOWED#작업 세션에 sudo 기능이 포함되어 있지 않습니다.세션에 sudo 기능을 추가하고 필요한 승인을 받은 뒤 다시 실행하세요. --scope는 기능 목록 전체를 바꾸므로 세션에 필요한 기능을 모두 지정하세요.
SUDO_COMMAND_TOO_LONG#검토용으로 기록하기에 명령어가 너무 깁니다.명령어를 줄이거나 스크립트로 작성해 실행하세요.
SUDO_SYSTEM_USER_NOT_FOUND#sudo를 실행하는 서버 계정이 Alpacon에 등록되어 있지 않습니다.서버의 계정 목록에 있는 계정으로 접속하거나 관리자에게 계정 확인을 요청하세요.
SUDO_ACCOUNT_BOUND_TO_APPLICATION#Websh 계정이 애플리케이션에 연결되어 있어 터미널에서 sudo 권한을 받을 수 없습니다.애플리케이션의 서비스 토큰으로 alpacon exec를 실행하세요.
SUDO_NO_ACCOUNTABLE_ACTOR#이 sudo 요청을 책임질 활성 사용자를 확인할 수 없습니다.서버 계정을 사용자에게 연결하거나 활성 사용자가 담당자인 작업 세션을 사용하세요.
SUDO_STEP_UP_UNAVAILABLE#Auth0를 사용하지 않는 배포 환경이라 필요한 MFA 인증을 진행할 수 없습니다.sudo 정책의 승인으로 MFA를 대신하는 작업 세션을 사용하세요.
SUDO_PRESENCE_REQUIRED#명령어를 실행하려면 최근에 완료한 MFA 인증이 필요합니다.등록한 인증 수단으로 MFA를 완료한 뒤 명령어를 다시 실행하세요.
SUDO_COMMAND_NOT_AUTHORIZED#명령어를 실행하는 사용자를 확인할 수 없어 sudo를 허용할 수 없습니다.본인 계정으로 로그인한 세션에서 명령어를 실행하세요.
SUDO_POLICY_MFA_REQUIRED#일치하는 sudo 정책은 MFA를 요구하지만 인증할 대화형 터미널이 없습니다.Websh에서 실행하거나 관리자에게 승인으로 MFA를 대신하는 작업 세션 sudo 정책을 요청하세요.
SUDO_NO_WORKSESSION_POLICY#작업 세션에 이 명령어와 일치하는 sudo 정책이 없습니다.work-session update --sudo로 일치하는 패턴을 추가하세요. sudo 접두어를 제외한 명령어 전체가 일치해야 하며 와일드카드는 *만 쓸 수 있습니다.
WORKSPACE_SUDO_WITH_MFA_DISABLED#워크스페이스에서 Alpacon을 통한 sudo를 허용하지 않습니다.슈퍼유저에게 워크스페이스의 sudo 설정을 켜 달라고 요청하세요.
SUDO_APPROVAL_REQUIRED#명령어에 사람의 승인이 필요하여 승인 요청이 생성되었습니다.승인된 뒤 같은 명령어를 다시 실행하세요.
SUDO_APPROVAL_PENDING#승인 대기가 끝났거나 Ctrl+C로 대기를 멈췄거나 정해진 시간 안에 MFA 인증을 마치지 못했습니다. 승인 요청은 계속 열려 있습니다.승인된 뒤 같은 명령어를 다시 실행하세요.
SUDO_APPROVAL_ALREADY_WAITING#같은 sudo 명령어가 다른 터미널에서 이미 승인을 기다리고 있습니다.대기 중인 터미널을 사용하거나 그 터미널에서 먼저 Ctrl+C를 누르세요.
SUDO_APPROVAL_REJECTED#승인자가 요청을 거절했거나 요청이 철회되었습니다.명령어는 실행되지 않았습니다. 승인자에게 이유를 묻거나 작업 이유를 더 구체적으로 적어 다시 요청하세요.
APPROVAL_NO_OTHER_APPROVER#요청자 외에는 요청을 승인할 사람이 없습니다.슈퍼유저에게 다른 승인자나 자동 승인 규칙을 추가해 달라고 요청하세요.
SUDO_NO_AUTHORITY#요청을 허용하는 sudo 권한이나 정책이 없습니다. Enforce에서는 관리자 승인 요청이 생성되며 가능한 경우 터미널이 승인을 기다립니다. Advisory에서는 승인 요청 없이 즉시 거부됩니다.Enforce에서는 승인된 뒤 다시 실행하세요. Advisory에서는 관리자에게 상시 sudo 권한을 요청하세요.
SUDO_TARGET_OTHER_PERSON#명령어가 다른 사람의 계정으로 전환하려 하므로 항상 차단됩니다.자신의 계정이나 공유 계정을 사용하세요.
SUDO_TARGET_UNPARSED#명령어가 전환하려는 계정을 확인할 수 없습니다.sudo -u deploy whoami처럼 대상 계정을 명확히 지정하세요.
SUDO_INTENT_DEVIATION#명령어가 작업 세션의 목적에 맞지 않아 승인 요청이 생성되었습니다.승인을 기다리거나 이 작업을 설명하는 작업 세션을 요청하세요.
SUDO_RISK_DENIED#워크스페이스의 접근 규칙이 명령어를 차단하거나 명령어의 위험도가 너무 높다고 판단했습니다.슈퍼유저에게 접근 규칙 검토를 요청하세요.

승인 관련 메시지와 터미널이 기다리는 동안의 동작은 승인 대기를 참고하세요. 즉시 거부되는 경우는 터미널이 기다리지 않는 경우를 참고하세요. Auth0가 없다면 Auth0가 없는 배포를 확인하세요.

오류 메시지 참고 문서에서 sudo_session_missing, sudo_no_worksession_policy, workspace_sudo_with_mfa_disabled에 해당하는 콘솔 메시지를 찾아보세요.

코드 없는 메시지

다음 메시지에는 조회할 오류 코드가 없습니다. 일시적으로 인가할 수 없다는 메시지는 첫 문장만 인용했습니다.

메시지의미해결 방법
Alpacon denied this sudo command.오류 코드 없이 명령어가 거부되었습니다. Websh나 alpacon exec 밖의 로컬 sudo가 차단된 경우에도 표시됩니다.로컬 sudo라면 Websh에서 실행하거나 관리자에게 웹 터미널 밖 sudo 설정 확인을 요청하세요. Websh나 alpacon exec에서 실행한 명령어라면 웹 콘솔의 권한 상승에서 거부 탭을 확인하세요.
Alpacon sudo authorization is unavailable; command denied.요청이 실패하거나 응답 시간이 초과되어 에이전트의 인가 결과를 받지 못했습니다.systemctl status alpamon으로 alpamon이 실행 중인지 확인하세요. 서버 연결 상태와 에이전트 로그도 확인한 뒤 다시 시도하세요.
Alpacon authorization is temporarily unavailable (the agent is not accepting connections); command not authorized.에이전트가 일시적으로 인가 요청을 받을 수 없습니다. 정책에 따른 거부가 아닙니다.잠시 기다린 뒤 다시 시도하세요.
Alpacon sudo authorization returned an invalid response; command denied.인가 응답을 읽을 수 없습니다.관리자에게 에이전트 로그 확인을 요청하세요.
Alpacon could not determine the sudo command; denied.PAM에서 인가할 명령어를 확인하지 못했습니다.명령어를 확인하고 반복되면 관리자에게 에이전트와 PAM 로그 확인을 요청하세요.
Alpacon could not determine the sudo target user; denied.PAM에서 대상 계정을 확인하지 못했습니다.sudo -u deploy whoami처럼 대상 계정을 명확히 지정하세요.
Alpacon could not encode the sudo command; denied.인가 요청에 사용할 형식으로 명령어를 인코딩하지 못했습니다.명령어가 올바른 UTF-8 텍스트인지 확인하세요.
Alpacon could not encode the sudo identity; denied.인가 요청에 사용할 형식으로 계정 정보를 인코딩하지 못했습니다.관리자에게 계정 이름과 인코딩 확인을 요청하세요.

설치된 PAM 모듈 확인

서버 상세 페이지에는 서버마다 Alpacon을 통한 sudo 상태가 표시됩니다.

  • 활성: 모듈이 설치되어 있습니다. alpamon-pam 버전을 함께 보여 줍니다.
  • 비활성: alpamon-pam이 설치되어 있지 않습니다.
  • 알 수 없음: 에이전트가 오래되어 상태를 보고하지 못합니다. alpamon을 업데이트하면 상태가 표시됩니다.
  • 해당 없음: 설정이 꺼져 있거나 Linux 서버가 아닙니다.

이 상태는 에이전트가 마지막으로 보고한 내용입니다. Alpamon 2.0.2 이상을 실행하는 Linux 서버에서 alpamon-pam을 직접 제거하거나 버전을 바꾸면 다음 보고 때 표시된 상태에 반영됩니다. 이전 버전 에이전트에서는 서버에서 패키지를 직접 제거해도 버전이 계속 표시될 수 있습니다. 확실하지 않다면 서버에서 직접 확인하세요:

bash
# Debian/Ubuntu
dpkg-query -W alpamon-pam
 
# RHEL/CentOS/Rocky/Alma/Fedora, openSUSE/SLES
rpm -q alpamon-pam
최종 수정: