XKCD 웹툰의 유명한 만화를 떠올려 보세요. 의자에 앉은 게으른 남자가 친구에게 샌드위치를 만들어 달라고 하지만, 상대에게 명령할 권한이 없습니다. 그러다 강력한 sudo 명령어를 입력하는 순간, 어떻게든 샌드위치가 만들어지죠.
현실에서 사람에게 sudo를 사용하면 별 효과가 없겠지만, 리눅스 세계에서는 이 명령어가 모든 장애물을 뚫고 지나가는 마법 같은 열쇠입니다. 그렇다면 sudo는 정확히 무엇이고, 왜 존재할까요? 그 답은 리눅스가 권한을 처리하는 방식에 숨어 있습니다.
리눅스 사용자 권한의 이해
리눅스는 권한을 다루는 방식 덕분에 보안성이 뛰어난 운영체제로 평가받습니다. macOS(리눅스와 공통 조상을 공유)나 Windows도 요즘은 이 부분에서 리눅스와 비슷해졌지만, 오픈소스 운영체제인 리눅스는 여전히 독특한 면모를 지니고 있습니다.
리눅스의 권한 처리 방식을 이해하면 sudo 명령어도 훨씬 쉽게 받아들일 수 있습니다. 모든 현대 운영체제에는 '관리자(administrator)' 또는 '루트(root)'라는 최상위 권한이 존재합니다. 관리자 계정이 있다면 어떤 설정이든 변경하고, 어떤 데이터든 삭제하는 등 컴퓨터로 원하는 거의 모든 작업을 할 수 있습니다.
여기에는 데이터 손실이나 시스템 전체 포맷 및 재설치로 이어질 수 있는, 원래 해서는 안 되는 작업도 포함됩니다.
리눅스는 루트 권한을 기본값으로 두지 않습니다. 대신 일반 계정으로는 권한 수준을 높이지 않는 한 시스템의 민감한 영역에 접근할 수 없습니다. 따라서 GUI 환경에서 평소와 다른 작업을 시도하면 관리자 비밀번호를 입력하라는 메시지가 뜹니다.
하지만 터미널 명령줄로 작업할 때는 sudo가 가장 안전하고 효율적인 방법입니다.
Sudo와 터미널
리눅스에서 상승된 권한을 얻는 방법은 두 가지입니다. 하나는 루트 사용자로 영구 로그인하는 것인데, 이 경우 컴퓨터에 접근하는 누구나(심지어 본인도 실수로) 시스템에 큰 피해를 줄 수 있습니다. 반면 sudo는 뒤따르는 특정 명령을 실행하는 짧은 시간 동안만 권한을 일시적으로 올려줍니다.
Sudo 문법
sudo의 문법(명령 형식)은 아주 간단합니다. 'sudo'를 입력한 뒤 실행하려는 명령어를 붙이기만 하면 됩니다.
예를 들어 'sudo apt-get update'는 관련 파일에 등록된 모든 앱 저장소를 업데이트합니다. sudo 없이 실행하면 권한이 없다는 오류 메시지가 출력되죠. 참고로 이 명령은 새로 설치한 리눅스 배포판에서 가장 먼저 실행하게 되는 sudo 명령이기도 합니다.
Sudo의 'su'가 의미하는 것
sudo의 'su'는 'superuser'의 약자이며, 동시에 독립적인 명령어이기도 합니다. su 명령을 사용하면 sudo가 승격시키는 대상 사용자의 권한을 변경할 수 있습니다.
sudo는 일시적으로 루트 권한을 부여하지만, su는 적절한 권한을 가진 다른 사용자로 전환합니다. 사소한 차이처럼 보이지만, sudo가 승격하는 계정을 바꾸는 데에는 분명한 이유가 있습니다.
첫째, 계정을 분리하면 일반 사용자가 루트 비밀번호를 알 필요가 없습니다. 둘째, 모든 sudo 명령은 기록(log)으로 남기 때문에 시스템 관리자(루트)가 누가 su 명령을 내렸는지 추적할 수 있습니다.
su의 문법은 기본적으로 sudo와 동일합니다:
su USERNAME -c COMMAND
USERNAME에는 명령을 실행할 사용자를, COMMAND에는 실행하려는 리눅스 명령어를 넣습니다.
다른 사용자로 여러 명령을 실행하려면 다음처럼 입력하세요:
su USER
USER 자리에 원하는 사용자 계정을 적으면 됩니다.
su를 단독으로 사용하면 'exit' 명령을 입력할 때까지 해당 사용자 계정으로 전환된 상태가 유지됩니다. 이 점을 잊으면 그 세션의 터미널을 다음 사용자가 열었을 때 여전히 상승된 권한을 갖게 되므로 주의해야 합니다. 이런 이유로 일반적으로는 su보다 sudo를 사용하는 것이 좋습니다.
Sudo 시간 제한
sudo 명령을 처음 사용하면 비밀번호를 입력해야 하며, 이후 15분 동안 유효합니다. 이 기본값은 sudo visudo 명령으로 'timestamp_timeout=' 값을 늘리거나 줄여 변경할 수 있습니다. 다만 특별한 이유가 없다면 기본값을 그대로 두는 것이 좋습니다.
Sudo 옵션 스위치
sudo의 문법은 단순하지만 알아두면 유용한 옵션이 몇 가지 있습니다. 추가 정보를 확인하거나 sudo 세션을 제어하는 데 도움이 됩니다:
- -h: sudo의 문법과 명령 정보를 표시합니다.
- -V: 현재 시스템에 설치된 sudo 버전을 표시합니다.
- -v: sudo 시간 제한을 갱신해 타이머를 다시 시작합니다.
- -l: 사용자 권한 목록을 표시합니다.
- -k: 현재 sudo 세션을 즉시 종료하고 상승된 권한을 제거합니다.
sudo에는 더 많은 옵션이 내장되어 있으며, 위에서 소개한 -h 옵션으로 모두 확인할 수 있습니다.
위 스크린샷은 도움말 옵션을 사용했을 때의 결과입니다.
알아두면 좋은 Sudo 명령어
그렇다면 모든 리눅스 사용자가 알아야 할 sudo 기반 명령어는 무엇일까요? 앞서 살펴본 sudo apt-get update 외에 아래 명령어들도 기억해 두세요:
- sudo apt-get upgrade: 설치된 모든 패키지를 업그레이드합니다.
- sudo apt-get install <패키지명>: 원하는 소프트웨어를 설치합니다. 패키지명만 바꿔주면 됩니다.
- 패키지 이름을 모르겠다면 dpkg --list를 사용해 설치된 패키지 목록을 확인하세요.
- 설치된 패키지를 터미널에서 제거하려면 sudo apt-get remove <패키지명>을 사용합니다(마찬가지로 실제 패키지명으로 대체).
이 명령어들이 처음 접하게 되는 sudo 명령일 가능성이 높습니다. 위에서 배웠듯 sudo 뒤에는 어떤 명령이든 올 수 있지만, 더 높은 권한이 실제로 필요한 명령에만 사용하는 것이 바람직합니다.