Computer >> 컴퓨터 >  >> 스마트폰 >> Linux

리눅스 sudo 명령어 완벽 가이드: 기본 개념부터 설정 파일 편집까지

이 가이드에서는 sudo 명령어가 무엇인지, 리눅스에서 어떻게 사용하는지, 그리고 설정 파일을 어떻게 편집하는지 자세히 설명합니다.

sudo란 무엇인가?

우분투(Ubuntu) 리눅스 사용자라면 "sudo" 명령어를 이미 접해봤을 것입니다. sudo는 리눅스 시스템의 관리자가 특정 사용자나 그룹에게 "root" 권한을 부여할 수 있게 해주는 매우 유용한 도구입니다. 또한 이 권한을 하나 또는 여러 개의 특정 명령어로 제한하도록 설정할 수도 있습니다.

예를 들어 우분투 팀은 보안상의 이유로 root 계정의 직접 로그인을 기본적으로 차단하고, 대신 일반 사용자가 sudo를 통해 관리자 작업을 수행하도록 정책을 정했습니다. 따라서 우분투를 사용 중이라면 이미 sudo 권한이 설정되어 있어 완전한 "root" 권한으로 작업할 수 있습니다.

이제 자신의 머신에서 sudo 권한을 설정하고 구성하는 방법을 자세히 살펴보겠습니다.

⚠️ 주의: 실습 전에 반드시 숙지하세요. 운영 서버(production server)에서는 아래 내용을 시도하지 마시기 바랍니다. 반드시 테스트 환경에서 예제를 연습한 후, sudo에 충분히 익숙해졌을 때 실제 서버에 적용하세요. sudo는 매우 강력한 도구이므로 각별한 주의가 필요합니다.

sudo 설정 파일 열기

제가 아는 한 "sudo" 패키지는 거의 모든 리눅스 배포판에 기본 포함되어 있습니다. 따라서 설치 과정은 생략하고 바로 설정 단계로 넘어가겠습니다. 이 튜토리얼에서는 Red Hat 계열 리눅스 머신을 기준으로 진행합니다.

먼저 root 계정으로 로그인한 뒤, 명령줄에서 다음 명령어를 실행합니다:

# visudo

위 명령어는 시스템의 기본 에디터(저의 경우 Vim)로 sudo 설정 파일인 /etc/sudoers를 엽니다. 파일을 아래로 스크롤하여 다음과 같은 문구가 있는 부분을 찾습니다:

root   ALL=(ALL) ALL

sudoers 설정 문법 이해하기

이 설정 구문은 다음과 같이 구성됩니다:

  • 사용자(user): sudo 권한을 부여할 대상 사용자
  • 호스트명(hostname): 해당 명령어가 실행될 수 있는 호스트. 특정 호스트명 또는 위 예제처럼 "ALL"(모든 호스트)
  • 명령어(command): 해당 사용자에게 관리자 권한으로 실행을 허용할 명령어

사용자에게 sudo 권한 부여하기

Vim에서 위에서 확인한 줄로 스크롤을 내린 후, 키보드의 o 키를 눌러 새 줄을 추가합니다. 그리고 calvin을 본인의 사용자명으로 바꿔 다음 내용을 입력합니다:

calvin ALL=(ALL) ALL

다음 키 조합으로 파일을 저장하고 종료합니다:

ESC :wq

Enter(Return) 키를 눌러 변경 사항을 적용합니다. 이제 사용자 'calvin'은 sudo를 통해 모든 관리자 권한을 갖게 되었습니다.

설정 테스트하기

새 터미널 창을 열고 sudo 권한을 부여받은 사용자로 로그인합니다. 'calvin' 사용자로 Apache 웹 서버를 재시작하여 새 권한이 올바르게 설정되었는지 확인해 보겠습니다:

# sudo /etc/init.d/httpd restart
Password:
Stopping httpd:                            [  OK  ]
Starting httpd:                            [  OK  ]

시스템이 비밀번호를 요구하면 해당 사용자 계정의 비밀번호를 입력합니다. 그러면 Apache 웹 서버가 성공적으로 재시작될 것입니다. 이 방식은 다른 모든 관리 작업에도 동일하게 활용할 수 있습니다.

허용 명령어 제한하기

사용자에게 전체 권한을 부여하는 것이 항상 최선은 아닙니다. 필요하다면 특정 명령어만 관리자 권한으로 실행하도록 제한할 수 있습니다. 예를 들어 사용자 'calvin'이 Apache 웹 서버 재시작만 할 수 있도록 하려면, visudo 명령어로 설정 파일을 연 후 앞서 입력한 줄을 다음과 같이 수정합니다:

calvin ALL=(ALL) /etc/init.d/httpd restart

파일을 저장하고 종료한 뒤, 'calvin' 사용자로 터미널에 로그인하여 Apache를 sudo로 재시작해 봅니다:

# sudo /etc/init.d/httpd restart
Password:
Stopping httpd:                            [  OK  ]
Starting httpd:                            [  OK  ]

정상적으로 동작합니다. 이번에는 웹 서버를 중지(stop)해 보겠습니다:

# sudo /etc/init.d/httpd stop
Password:
Sorry, user calvin is not allowed to execute '/etc/init.d/httpd stop' as root on commons.

보시는 것처럼 사용자 'calvin'은 허용된 작업만 수행할 수 있으며, 그 외의 작업은 차단됩니다.

여러 명령어를 허용하려면 쉼표(,)로 구분하여 sudoers 파일에 추가하면 됩니다. 예를 들어 'calvin'에게 웹 서버의 재시작과 중지를 모두 허용하려면 설정을 다음과 같이 작성합니다:

calvin ALL=(ALL) /etc/init.d/httpd restart,/etc/init.d/httpd stop

이제 웹 서버 중지 명령도 정상적으로 실행됩니다:

# sudo /etc/init.d/httpd stop
Password:
Stopping httpd:                            [  OK  ]

비밀번호 없이 sudo 사용하기 (NOPASSWD)

sudo의 또 다른 유용한 기능은 비밀번호 입력 없이 sudo 권한을 사용하는 것입니다. 이는 셸 스크립트(shell script)로 관리 작업을 자동화할 때 특히 유용합니다.

⚠️ 보안 경고: 여러 사람이 공유하는 계정에 이 기능을 적용하는 것은 권장하지 않습니다. 계정 비밀번호가 유출될 경우 심각한 보안 사고로 이어질 수 있습니다. 반드시 신중하게 사용하세요.

sudoers 파일을 열고 앞서 입력한 줄을 다음과 같이 수정합니다:

calvin ALL=(ALL) /etc/init.d/httpd restart NOPASSWD: ALL

설정의 마지막 부분(NOPASSWD:)은 sudo가 비밀번호를 묻지 않고, 지정된 명령어를 관리자 권한으로 바로 실행하도록 지시합니다. 파일을 저장하고 에디터를 종료한 뒤 Apache를 재시작해 보겠습니다:

# sudo /etc/init.d/httpd restart
Stopping httpd:                            [  OK  ]
Starting httpd:                            [  OK  ]

비밀번호를 묻지 않고 바로 실행되는 것을 확인할 수 있습니다.

마무리

sudo 설정 파일(/etc/sudoers)로 할 수 있는 커스터마이징은 이 외에도 매우 다양합니다. 이 글에서는 그중 핵심적인 부분만 다루었지만, sudo 권한 관리를 시작하기에 충분한 내용입니다. 강력한 만큼 항상 신중하게 사용하시기 바랍니다.