AI 협업 개발

AI 에이전트는 sudo를 할 수 없으며, 바로 그 점이 여러분을 위한 경계선을 그어줍니다

AI 에이전트가 프로덕션 서버를 정리하게 두는 것은 `sudo`를 사용할 수 없다는 점을 알아차리기 전까지는 위험하게 들립니다. 권한 경계가 작업을 에이전트에게 안전한 영역과 사람만 할 수 있는 영역으로 저절로 분할합니다.

이 글은 영어 원문을 AI 모델이 번역한 것입니다. 표현이 원문과 다를 수 있습니다. 영어 원문 보기

저는 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라는 메시지와 함께 즉시 실패합니다. 이것은 에이전트가 우회할 수 있는 정책이 아닙니다. 명령은 절대로 완료될 수 없습니다.

둘째, 그리고 더 중요한 것은 에이전트에 비밀번호를 제공하는 것은 설계상 고려 대상이 아니라는 점입니다. 프롬프트에 루트 비밀번호를 입력할 수 있는 에이전트는 잘못된 이유로 그렇게 하도록 설득될 수 있는 에이전트입니다. 에이전트가 자격 증명을 직접 처리하지 않는다는 규칙이 바로 첫 번째 제약을 성가신 점이 아닌 기능으로 만들어주는 것입니다.

권한 모델이 만든 분리

그래서 정리 작업은 그것들을 설명하는 정책 문서 없이도 저절로 두 갈래로 나뉘었습니다.

`sudo` 경계는 정리 작업을 에이전트 레인과 사람 레인으로 나눕니다 서버 정리 1 `sudo` 없음 2 `sudo` 에이전트 레인 컨테이너, 캐시, 홈 사람 레인 systemd, apt, 부팅 대상 // 위험한 절반은 선택이 아니라 구조적으로 사람 레인에 속하게 됩니다

인간은 별도의 터미널에서 ssh host -t sudo ...로 두 번째 레인을 실행했습니다. 여기서 -t는 실제 TTY를 강제로 할당하여 암호 프롬프트가 작동하게 합니다. 에이전트가 이미 대량 정리를 수행하고 남은 항목에 대한 깔끔한 보고서를 남겼으므로, 인간의 차례는 개방형 세션이 아니라 검토된 짧은 권한 상승 명령어 목록이었습니다.

이것이 왜 수정해야 할 제한이 아니라 좋은 기본값인지

에이전트에게 암호 없는 sudo 규칙을 주고 전체 작업을 마치게 하고 싶은 유혹이 들 수 있습니다. 그런 유혹을 참으십시오. root가 필요한 명령어는 서비스 비활성화, 패키지 완전 삭제, 부팅 시 머신 동작 변경 등 사람이 가장 먼저 읽어보길 원하는 명령어들입니다. sudo 경계는 바로 그러한 명령어들을 사람에게 전달하고, 되돌릴 수 있고 영향 범위가 작은 작업은 에이전트에게 남겨둡니다.

이 설정을 되돌리지 않으면 이점을 무료로 얻을 수 있습니다. 에이전트의 손에 자격 증명을 쥐여주지 말고, 포괄적인 암호 없는 규칙을 추가하지 않으면, 이 분리는 저절로 이루어집니다.

  • 에이전트는 로그인 사용자 권한으로 컨테이너 정리, 캐시 회수, 파일 제거를 처리하고, 건드릴 수 없었던 것을 보고합니다.
  • root가 필요한 모든 것은 구조적으로 사람의 영역으로 넘어가며, 에이전트가 이미 범위를 정한 짧은 목록에 대해 명시적인 ssh -t sudo 세션을 통해 실행됩니다.
  • 일시적으로 권한 상승을 부여해야 한다면, 영구적인 권한이 아니라, 해당 머신을 떠나기 전에 제거할 좁고 시간제한이 있는 규칙으로 만드십시오.

프로덕션 서버에 에이전트를 가까이 두면서 가장 안심이 되었던 점은 에이전트가 구조적으로 할 수 없는 일이 얼마나 많은지 발견한 것이었습니다.

관련 글