---
title: "PAM 및 sudo 문제"
description: "Alpacon PAM과 sudo 문제를 해결하는 방법을 안내합니다. sudo-rs의 터미널 오류, sudoers 규칙 누락, 명령어 거부 코드를 확인하고 승인 대기가 끝나거나 다른 터미널에서 이미 기다리는 경우의 대응 방법을 알아봅니다. PAM 모듈 버전도 확인하세요."
---

> Full documentation index: https://docs.alpacax.com/llms.ko.txt

# PAM 및 sudo 문제

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

## "A terminal is required to authenticate"

[sudo-rs](/use/work-sessions/terminal/sudo-with-mfa/#sudo-rs-호환성)를 사용하는 호스트(Ubuntu 25.10
이상)에서는 `alpacon exec` 등을 통해 터미널 없이 실행한 `sudo` 명령어가 다음 메시지와 함께 실패할 수
있습니다:

```text
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 PID` | `sudo`가 Alpacon에서 추적하는 세션에서 실행되지 않았습니다. 승인된 [작업 세션](/use/work-sessions/) 또는 대화형 Websh 세션 안에서 실행하세요. |
| `sudo_approval response timeout` | Alpacon이 요청을 보냈지만 서버로부터 제때 응답을 받지 못했습니다. 연결 상태를 확인하고 다시 시도하세요. |
| `approved=false`와 `error_code`가 포함된 `Processing sudo_approval response` | 명령어가 거부되었습니다. ["Alpacon denied this sudo command"](#alpacon-denied-this-sudo-command)에서 코드를 확인하세요. |

## sudoers 규칙이 없는 경우

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

```text
# 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
```

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

- **서버 한 대:** 서버의 [에이전트 카드](/use/servers/manage/#에이전트-카드)에서 **alpamon-pam 설치 또는 업그레이드** 버튼을 누르거나 CLI로 `alpacon agent install-pam <server>`를 실행하세요. 두 방법 모두 [`install_pam` 작업](/reference/api/servers/servers/#에이전트-작업)을 보내 호스트의 패키지 매니저로 패키지를 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`을 사용하세요. [설치](/use/servers/register/install/#linux)를 참고하세요.
- **패키지는 있지만 `/etc/sudoers.d/alpacon`이 없는 경우:** 이미 현재 버전이 설치된 호스트에서는 이 작업이 아무것도 하지 않습니다. 셸에서 `apt-get install --reinstall -y alpamon-pam` 또는 `yum reinstall -y alpamon-pam`으로 다시 설치해 파일을 복구하세요.
- **워크스페이스 전체:** **Alpacon을 통한 sudo**이 꺼져 있다면 [접근 규칙](/use/policies/server-access/)에서 다시 켜세요. 현재 연결된 모든 서버에 `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.4 | `sudo`가 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 거부 사유에 오류 코드가 있으면 터미널에 다음과 같이 표시됩니다:

```text
Alpacon denied this sudo command (SUDO_NO_WORKSESSION_POLICY).
```

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

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

승인 관련 메시지와 터미널이 기다리는 동안의 동작은 [승인 대기](/use/work-sessions/terminal/sudo-with-mfa/#승인-대기)를 참고하세요. 즉시 거부되는 경우는 [터미널이 기다리지 않는 경우](/use/work-sessions/terminal/sudo-with-mfa/#터미널이-기다리지-않는-경우)를 참고하세요. Auth0가 없다면 [Auth0가 없는 배포](/use/work-sessions/terminal/sudo-with-mfa/#auth0가-없는-배포)를 확인하세요.

오류 메시지 참고 문서에서 [`sudo_session_missing`](/reference/error-messages/#sudo_session_missing),
[`sudo_no_worksession_policy`](/reference/error-messages/#sudo_no_worksession_policy),
[`workspace_sudo_with_mfa_disabled`](/reference/error-messages/#workspace_sudo_with_mfa_disabled)에
해당하는 콘솔 메시지를 찾아보세요.

## 코드 없는 메시지

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

| 메시지 | 의미 | 해결 방법 |
| --- | --- | --- |
| `Alpacon denied this sudo command.` | 오류 코드 없이 명령어가 거부되었습니다. Websh나 `alpacon exec` 밖의 로컬 sudo가 차단된 경우에도 표시됩니다. | 로컬 sudo라면 Websh에서 실행하거나 관리자에게 **웹 터미널 밖 sudo** 설정 확인을 요청하세요. Websh나 `alpacon exec`에서 실행한 명령어라면 웹 콘솔의 [권한 상승](/use/audit/events/sudo/#허가와-거부)에서 **거부** 탭을 확인하세요. |
| `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
```

Source: https://docs.alpacax.com/ko/use/work-sessions/terminal/troubleshoot-sudo/
