AI 에이전트는 sudo를 할 수 없으며, 바로 그 점이 여러분을 위한 경계선을 그어줍니다
AI 에이전트가 프로덕션 서버를 정리하게 두는 것은 `sudo`를 사용할 수 없다는 점을 알아차리기 전까지는 위험하게 들립니다. 권한 경계가 작업을 에이전트에게 안전한 영역과 사람만 할 수 있는 영역으로 저절로 분할합니다.
저는 AI 코딩 에이전트에게 실제 업무, 즉 폐기 후 배송될 운영 서버를 SSH를 통해 딥클리닝하는 작업을 맡겼습니다. 본능적으로 그런 상황이 걱정될 수 있습니다. 에이전트가 실제 운영 중인 장비에서 파괴적인 명령을 실행하는 것은 바로 사람들이 경고하는 시나리오입니다. 실제로 일어난 일은 에이전트가 sudo를 사용할 수 없었기 때문에 위험한 절반의 작업을 전혀 실행할 수 없었다는 것입니다. 권한 모델 덕분에, 누구도 의도적으로 설계하지 않았는데도 작업이 에이전트에게 안전한 영역과 인간 전용 영역으로 나뉘었습니다.
에이전트가 시도한 작업과 중단된 지점
에이전트는 먼저 회수 가능한 불필요한 파일들을 처리했습니다. 컨테이너 도구를 실행하여 중지된 컨테이너, 죽은 이미지, 빌드 캐시를 제거한 다음, 홈 디렉터리에서 오래된 체크아웃을 삭제했습니다. 이 작업들은 모두 권한 상승이 필요 없었고, 용량은 빠르게 확보되었습니다.
| 회수 항목 | 용량 |
|---|---|
| 중지된 컨테이너 | 3.4 GB |
| 죽은 이미지 | 34.5 GB |
| 빌드 캐시 | 15.1 GB |
| 홈 디렉터리 불필요한 파일 | ~1 GB |
로그인 사용자로 실행되는 명령어만으로 약 39GB가 확보되었습니다. 그다음 서비스 계층에 도달했습니다. 오래된 systemd 유닛 비활성화, 패키지 제거, 시스템을 헤드리스 부팅 대상으로 전환하는 작업입니다. 이 작업들은 모두 sudo가 필요했고, 에이전트는 거기서 멈췄습니다.
에이전트가 그 선을 넘을 수 없는 이유
에이전트와 루트 사이에는 두 가지의 단단한 벽이 있으며, 이 둘은 모두 유지할 가치가 있습니다.
첫째, 에이전트가 명령을 실행하는 셸에는 제어 터미널이 없습니다. sudo는 비밀번호를 입력받기 위해 TTY를 요구하며, TTY가 없으면 sudo: a terminal is required to read the password라는 메시지와 함께 즉시 실패합니다. 이것은 에이전트가 우회할 수 있는 정책이 아닙니다. 명령은 절대로 완료될 수 없습니다.
둘째, 그리고 더 중요한 것은 에이전트에 비밀번호를 제공하는 것은 설계상 고려 대상이 아니라는 점입니다. 프롬프트에 루트 비밀번호를 입력할 수 있는 에이전트는 잘못된 이유로 그렇게 하도록 설득될 수 있는 에이전트입니다. 에이전트가 자격 증명을 직접 처리하지 않는다는 규칙이 바로 첫 번째 제약을 성가신 점이 아닌 기능으로 만들어주는 것입니다.
권한 모델이 만든 분리
그래서 정리 작업은 그것들을 설명하는 정책 문서 없이도 저절로 두 갈래로 나뉘었습니다.
인간은 별도의 터미널에서 ssh host -t sudo ...로 두 번째 레인을 실행했습니다. 여기서 -t는 실제 TTY를 강제로 할당하여 암호 프롬프트가 작동하게 합니다. 에이전트가 이미 대량 정리를 수행하고 남은 항목에 대한 깔끔한 보고서를 남겼으므로, 인간의 차례는 개방형 세션이 아니라 검토된 짧은 권한 상승 명령어 목록이었습니다.
이것이 왜 수정해야 할 제한이 아니라 좋은 기본값인지
에이전트에게 암호 없는 sudo 규칙을 주고 전체 작업을 마치게 하고 싶은 유혹이 들 수 있습니다. 그런 유혹을 참으십시오. root가 필요한 명령어는 서비스 비활성화, 패키지 완전 삭제, 부팅 시 머신 동작 변경 등 사람이 가장 먼저 읽어보길 원하는 명령어들입니다. sudo 경계는 바로 그러한 명령어들을 사람에게 전달하고, 되돌릴 수 있고 영향 범위가 작은 작업은 에이전트에게 남겨둡니다.
이 설정을 되돌리지 않으면 이점을 무료로 얻을 수 있습니다. 에이전트의 손에 자격 증명을 쥐여주지 말고, 포괄적인 암호 없는 규칙을 추가하지 않으면, 이 분리는 저절로 이루어집니다.
- 에이전트는 로그인 사용자 권한으로 컨테이너 정리, 캐시 회수, 파일 제거를 처리하고, 건드릴 수 없었던 것을 보고합니다.
- root가 필요한 모든 것은 구조적으로 사람의 영역으로 넘어가며, 에이전트가 이미 범위를 정한 짧은 목록에 대해 명시적인
ssh -t sudo세션을 통해 실행됩니다. - 일시적으로 권한 상승을 부여해야 한다면, 영구적인 권한이 아니라, 해당 머신을 떠나기 전에 제거할 좁고 시간제한이 있는 규칙으로 만드십시오.
프로덕션 서버에 에이전트를 가까이 두면서 가장 안심이 되었던 점은 에이전트가 구조적으로 할 수 없는 일이 얼마나 많은지 발견한 것이었습니다.
관련 글
AI 에이전트가 무언가를 망가뜨리기 전에 중지시키는 가드레일 훅
AI 에이전트는 실제 도구를 실행하며, 때로는 잘못된 도구를 실행하기도 합니다. 다음은 파괴적인 작업을 사후가 아닌 실행 계층에서 포착하는 방법입니다.
효과적인 AI 페어 프로그래밍을 위한 결정적 파이프라인
AI 코더는 강력하지만 게이트가 없으면 방향을 잃습니다. 상태 파일과 계획 동결 기능을 갖추고 이를 감싸는 계획, 빌드, 검증, 배포 파이프라인이 있습니다.
신뢰할 수 없는 텍스트를 읽는 에이전트를 위한 프롬프트 인젝션 방어
웹 페이지와 파일을 읽는 에이전트는 그 안에 숨겨진 지시에 의해 하이재킹될 수 있습니다. 여기에 프롬프트 인젝션을 막는 아키텍처가 있습니다.
더 많은 별칭 대신, AI 에이전트를 셸 프런트엔드로 사용하기
잊혀진 셸 스크립트의 무덤에는 대안이 있습니다. 작업을 평이한 말로 설명하고 AI가 당신을 위해 grep, awk, jq를 조합하도록 하세요.
영어로 한 번 작성하고, 자동 번역하여 더 많은 독자에게 도달하세요
공개적인 글쓰기는 자신에게는 배움이 되고 다른 사람들에게는 도움이 되지만, 하나의 언어는 도달 범위를 제한합니다. 영어로 원본을 하나 작성하면, 파이프라인이 나머지를 번역하고 게시합니다.
코드를 커밋하고 배포하는 CI 봇을 위한 최소 권한
광범위한 쓰기 권한과 무제한 배포 권한을 가진 자동화 봇은 한 번의 잘못된 실행을 전체 시스템 장애로 만듭니다. 영향 범위를 줄이는 방법은 다음과 같습니다.