일부 리눅스 애플리케이션은 실행하기 위해 상승된 권한(elevated privileges)이 필요합니다. 이때 su 명령어를 사용해 슈퍼유저(root)로 전환할 수 있으며, 그 대안으로 sudo 명령어를 활용할 수도 있습니다.
sudo의 작동 방식
작동 원리는 조금 다르지만, sudo 명령어는 윈도우나 macOS에서 종종 마주치는 '확인 프롬프트'와 비슷한 역할을 합니다. 해당 운영체제에서 특정 작업을 계속 진행할지 묻는 메시지가 뜨면, 상승된 권한으로 작업을 실행하겠다는 버튼을 눌러야 하고, 경우에 따라서는 관리자 비밀번호까지 입력해야 합니다.
리눅스에서는 sudo 명령어가 일반 작업과 관리 작업 사이의 장벽 역할을 합니다. 덕분에 명령어가 실행하려는 작업에 대해 사용자가 직접 확인하고, 해당 작업을 수행할 권한이 있는지 검증하게 됩니다. 더욱 유사한 예로는 윈도우의 run as(다른 자격 증명으로 실행) 명령이 있습니다. 리눅스와 마찬가지로 run as 명령도 명령줄에서 특정 사용자, 주로 관리자의 자격 증명으로 파일을 실행하는 기능을 제공합니다.
전문가 팁: 현재 sudo를 쓰고 있는지 su를 쓰고 있는지 확실하지 않다면, 명령줄 끝에 표시되는 기호를 확인하세요. 파운드 기호(#)가 표시되어 있다면 root 계정으로 로그인된 상태입니다.
sudo 명령어의 주요 특징
터미널에서 어떤 명령어 앞에 sudo를 붙이면 해당 명령이 상승된 권한으로 실행됩니다. 바로 이 점 때문에 sudo가 권한 관련 오류를 해결하는 표준적인 방법으로 자리 잡았습니다.
sudo는 명령 단위(per-command)로 동작합니다. 주요 기능은 다음과 같습니다.
- 호스트별 권한 제한: 사용자가 각 호스트에서 실행할 수 있는 명령어를 세부적으로 제한할 수 있습니다.
- 상세한 로깅: 모든 명령 기록을 남겨 누가 무엇을 했는지 명확한 감사 추적(audit trail)을 제공합니다.
- 시간 초과 설정: sudo 권한 유지 시간을 구성 가능한 타임아웃으로 관리할 수 있습니다.
- 설정 파일 공유: 하나의 설정 파일을 여러 대의 서로 다른 머신에서 재사용할 수 있습니다.
sudo 명령어 사용 예시
관리자 권한이 없는 일반 사용자가 리눅스에서 소프트웨어 설치 명령을 입력했다고 가정해 봅니다.
dpkg -i software.deb
관리 권한이 없는 사용자는 소프트웨어를 설치할 수 없기 때문에 위 명령은 오류를 반환합니다. 이때 sudo 명령어가 해결책이 됩니다. 올바른 명령은 다음과 같습니다.
sudo dpkg -i software.deb
이번에는 오류 없이 소프트웨어가 정상적으로 설치됩니다.
참고: 반대로 리눅스를 설정하여 특정 사용자가 sudo 명령어를 아예 사용하지 못하도록 차단하는 것도 가능합니다.