블로그로 돌아가기

Linux Sudoers 파일 설정하기

Linux Sudoers 파일 설정하기

소개

혹시 왜 “sudo”를 입력해야 하는지 궁금한 적이 있으신가요? 특정 명령어를 Linux 또는 Unix 운영체제 환경에서 실행할 때 말이죠. Sudo는 사실 축약어로, “super-user do”를 의미합니다. sudo 명령어를 사용하면 다른 사용자의 보안 권한으로 프로그램을 실행하고 명령어를 수행할 수 있습니다.

기본적으로 sudo 명령어는 시스템 사용자가 super-user의 권한으로 명령어를 실행할 수 있도록 허용합니다. Linux/Unix OS를 새로 설치하면 슈퍼유저 권한을 가진 root 계정이 생성됩니다. Linux/Unix 시스템의 초기 서버 설정을 할 때, 시스템 관리자는 root 계정으로 로그인하여 다른 시스템 사용자에게 시스템 권한을 할당합니다. 이러한 설정은 sudoers라는 파일에 저장됩니다. root 권한이 있는 계정은 sudoers 파일을 편집하고 다른 사용자의 권한을 변경할 수 있습니다.

이 튜토리얼에서는 root 권한을 획득하고 sudoers 파일을 편집하는 방법에 대해 알아보겠습니다.

사전 요구 사항

이 튜토리얼은 실습 위주로 진행되므로, 내용을 완전히 이해하려면 명령어를 직접 테스트해 보아야 합니다. 이 튜토리얼에서는 Ubuntu 20.04 서버를 사용하지만, 다음과 같은 최신 Linux 배포판을 사용하고 있다면 단계를 그대로 따라 하실 수 있습니다: DebianCentOS. 다음 링크를 통해 CloudSigma에서 자신만의 Ubuntu 클라우드 서버를 설정할 수 있습니다..

Root 권한 획득하기

아래에서 설명할 세 가지 방법을 통해 root 권한을 획득할 수 있습니다:

root로 로그인

root 권한을 얻기 위해 대부분의 사람들이 사용하는 가장 간단한 방법은 root 사용자 자격 증명을 사용하여 시스템에 로그인하는 것입니다. 로컬 머신에 접속하는 경우, 단순히 사용자 이름을 입력하면 비밀번호를 입력하라는 메시지가 표시됩니다.

root로 로그인하는 또 다른 방법은 서버에 로그인하고 작업을 수행하기 위한 명령줄 도구인 SSH를 사용하는 것입니다. 여기에는 서버의 사용자 이름과 IP 주소가 필요합니다. root로 로그인하는 구문은 다음과 같으며, 본인 서버의 IP 주소로 대체하여 사용하십시오:

터미널에 위의 명령어를 입력하면, SSH 키를 설정하지 않은 경우 비밀번호를 입력하라는 메시지가 표시되거나, SSH 키를 설정한 경우 SSH 키의 비밀번호(passphrase)를 입력하라는 메시지가 표시됩니다. 올바른 자격 증명을 제공하면 로그인됩니다. Ubuntu에서 SSH를 사용하여 원격 서버에 연결하는 방법에 대한 단계별 지침은 다음 가이드를 참조하십시오..

su를 사용하여 root 되기

root가 아닌 다른 계정을 사용하여 Linux 시스템에 로그인할 수 있으며, 이는 관리 작업이 아닌 일반 작업을 수행할 때 권장되는 방법입니다. root 권한을 얻고 싶을 때는 언제든지 터미널에 su를 입력하면 됩니다:

시스템에서 root 비밀번호를 묻는 메시지가 표시되며, 비밀번호를 입력하면 root 셸 세션에 접속하게 됩니다. 이 셸 세션에 있는 동안 모든 관리 작업을 수행할 수 있으며, 일반 셸로 돌아가고 싶을 때는 언제든지 간단히 Ctrl + D를 누르면 됩니다. 또는 터미널에 exit를 입력하고 엔터를 누를 수도 있습니다.

sudo를 사용하여 root 권한 명령어 실행하기

이 튜토리얼의 시작 부분에서 간략히 소개된 sudo 명령어를 사용하면 root 권한 셸이 없어도 단일 행 명령어를 실행할 수 있습니다. 단순히 sudo를 입력한 뒤 실행할 명령어를 입력하면 됩니다:

예를 들어, 시스템을 업데이트하려면 다음과 같이 입력할 수 있습니다:

비밀번호를 입력하라는 메시지가 표시됩니다. susudo 명령어의 차이점은 su는 root 비밀번호를 요구하는 반면, sudo는 현재 사용자의 비밀번호를 요구한다는 점입니다. sudo 권한은 시스템에 큰 보안 영향을 미치기 때문에 기본적으로 사용자에게 부여되지 않습니다. 이에 대해서는 다음 섹션에서 자세히 설명하겠습니다.

Visudo를 사용하여 sudoers 파일 편집하기

Sudo 권한은 sudoers 파일에서 설정되며, 이 파일은 다음에 위치합니다: /etc/sudoers. 이러한 권한은 모든 사용자가 Linux 시스템에 액세스하는 데 필요합니다. 구문 오류가 발생하면 사용자가 시스템에 로그인할 수 없으므로 시스템이 망가진 상태로 남게 됩니다.

Visudo 명령은 저장할 때 파일의 구문을 검사하는 특수 편집기로 파일을 엽니다. 따라서 시스템을 사용할 수 없게 만드는 것을 방지하려면 오직 visudo 명령만 사용하여 파일을 여는 것이 중요합니다. 기본적으로 visudo는 텍스트 편집기를 (vi) vim으로 열도록 설정되어 있었습니다. 하지만 Ubuntu는 visudo가 nano 텍스트 편집기를 사용하도록 구성했습니다. Debian 또는 Ubuntu에서는 다음 명령을 입력하여 다른 편집기로 변경할 수 있습니다:

스크린샷에 표시된 것처럼 기본 편집기를 선택할 수 있는 편집기 목록이 표시됩니다. 선호하는 편집기 옆의 번호를 선택하십시오:

displays a list of editors

On a CentOS Linux 배포판에서는 /etc/sudoers를 편집하고 아래 줄을 추가합니다:

다음 명령을 입력하십시오. your_editor_of_choice 부분을 원하는 편집기 이름으로 바꾸는 것을 잊지 마십시오:

이 명령은 ~/.bashrc 파일에 해당 줄을 추가합니다. 변경 사항을 적용하려면 터미널에 다음을 입력하십시오:

이제 visudo가 구성되었으므로, 다음 명령을 입력하여 /etc/sudoers 파일을 열 수 있습니다:

Sudoers 파일 편집

이전 명령을 실행하면 구성한 대로 기본 편집기에서 파일이 열립니다. 아래는 파일의 내용입니다:

주석이 꽤 상세히 설명되어 있지만, 아래에서 각 줄이 무엇을 나타내는지 논의해 보겠습니다.

기본 설정 줄
  • Defaults env_reset – 터미널 환경 변수를 재설정하여 모든 사용자 변수를 제거합니다. 따라서 sudo 세션에서 잠재적으로 유해한 변수를 지웁니다.
  • Defaults mail_badpass – 실패한 sudo 비밀번호 입력 시도에 대한 알림을 구성된 mailto 사용자(보통 root 계정)에게 메일로 보내도록 시스템에 지시합니다.
  • Defaults secure_path – 시스템에 위험할 수 있는 다른 사용자 정의 경로의 사용을 방지하기 위해, sudo 작업이 실행 시 사용할 애플리케이션을 찾을 파일 시스템의 여러 경로를 포함합니다.
사용자 권한 지정 줄
이 줄은 다른 줄들과 다르며 root 사용자의 권한을 지정합니다. 이 줄의 각 태그가 나타내는 의미는 다음과 같습니다:

  1. root ALL=(ALL:ALL) ALL – 첫 번째 필드는 규칙이 적용될 사용자 이름을 지정합니다. 이 경우에는 root 사용자입니다.
  2. root ALL=(ALL:ALL) ALL – 첫 번째 ALL 은(는) 규칙이 모든 호스트에 적용됨을 지정합니다.
  3. root ALL=(ALL:ALL) ALL – 두 번째 ALL 은(는) 이 규칙이 적용되는 사용자(즉, root)가 모든 사용자로 명령을 실행할 수 있음을 지정합니다.
  4. root ALL=(ALL:ALL) ALL – 세 번째 ALL 은(는) 이 규칙이 적용되는 사용자(즉, root)가 모든 그룹으로 명령을 실행할 수 있음을 지정합니다.
  5. root ALL=(ALL:ALL) ALL – 마지막 ALL 은(는) 이 규칙들이 모든 명령에 적용됨을 지정합니다.

이 규칙이 나타내는 바에 따르면, root 사용자는 올바른 비밀번호를 제공하면 sudo를 사용하여 모든 명령을 실행할 수 있습니다.

그룹 권한 지정 줄

이 줄들은 그룹에 적용되는 sudo 권한 규칙을 지정합니다. 필드들은 사용자 권한 줄과 동일한 작업을 나타내지만, 약간의 차이가 있습니다. 그룹 이름을 나타내기 위해 %로 시작합니다.

보시다시피, admin 그룹은 모든 호스트에서 모든 사용자로 모든 명령을 실행할 수 있습니다. sudo 그룹은 동일한 권한을 가지며, 추가로 모든 그룹으로 명령을 실행할 수 있는 권한을 가집니다.

/etc/sudoers.d 포함 줄

#includedir /etc/sudoers.d 줄은 줄 시작 부분의 # 때문에 주석처럼 보일 수 있습니다. 하지만 이는 /etc/sudoers.d 디렉터리 내의 파일을 소스로 가져와 sudoers 파일의 일부로 사용해야 함을 나타내는 include 지시문입니다. 이 디렉터리 내의 파일은 sudoers 파일과 동일한 규칙을 따릅니다.

디렉터리 내에서 점(.)이 포함되어 있지 않고 ~로 끝나지 않는 모든 파일은 읽혀서 sudoers 파일 구성에 추가됩니다. 이 디렉터리를 사용하면 애플리케이션이 설치 시 기본 sudoers 파일을 변경하지 않고 /etc/sudoers.d 디렉터리 내의 단일 전용 파일에 모든 관련 규칙을 배치하여 sudo 권한을 변경할 수 있습니다. 또한, 애플리케이션의 권한을 검사하거나 되돌리려는 경우 /etc/sudoers.d 디렉터리 내의 파일을 쉽게 확인하거나 수정할 수 있으며, /etc/sudoers 파일을 직접 수정할 필요가 없습니다.

기본적으로 /etc/sudoers.d 디렉터리 내의 모든 파일은 항상 visudo 명령을 사용하여 편집해야 합니다. 아래는 구문이며, 명령에서 편집하려는 파일 이름으로 바꾸는 것을 잊지 마십시오:

사용자에게 Sudo 권한 할당하기

새 사용자에게 일반 sudo 액세스 권한을 부여하면 해당 사용자 계정에 시스템에 대한 전체 관리자 액세스 권한을 부여했음을 의미합니다. 이는 시스템 관리자가 sudo 권한을 가진 다른 비-root 사용자를 생성할 때 수행하는 일반적인 작업입니다.

와 같은 시스템에서는 Ubuntu 20.04 이미 범용 관리 그룹이 존재하므로, 사용자를 해당 그룹에 추가하여 쉽게 sudo 권한을 할당할 수 있습니다. /etc/sudoers 파일에서 볼 수 있듯이 sudo 그룹은 전체 관리자 권한을 가지며, 다음 명령을 입력하여 그룹에 사용자 이름을 추가할 수 있습니다:

선택적으로, 동일한 작업을 수행하기 위해 gpasswd 명령을 사용할 수 있습니다:

On CentOS에서 sudo 권한이 있는 기본 그룹의 이름은 wheel이므로, 다음 명령을 사용하여 권한을 할당할 수 있습니다:

선택적으로, gpasswd 명령을 사용하여 다음 명령으로 동일한 작업을 수행할 수 있습니다:

일부 경우에는 wheel CentOS의 그룹은 /etc/sudoers 파일에서 주석 처리되어 있을 수 있습니다. 이를 활성화하려면 visudo로 파일을 열고 그룹 이름이 있는 줄의 주석을 해제하십시오. 줄 시작 부분의 #을 제거하면 됩니다: %wheel ALL=(ALL) ALL.

사용자 정의 규칙 생성

지금까지 배운 sudoers의 일반적인 구문 지식을 바탕으로, 이제 몇 가지 규칙을 설정할 차례입니다.

별칭(Alias) 생성

별칭을 사용하면 다양한 "별칭" 아래에 항목을 그룹화하여 sudoers 파일을 정리할 수 있습니다. 이 섹션에서는 다음 세 가지 지시어에 대해 설명합니다: User_Alias (사용자/그룹 별칭 생성용), Cmnd_Alias (명령어 별칭 생성용), 그리고 Runas_Alias (다른 사용자가 다른 사용자로 실행할 수 있도록 허용).

예를 들어, User_Alias를 사용하여 /etc/sudoers 파일 내에 다음 스니펫을 추가하여 세 개의 서로 다른 사용자 그룹을 생성할 수 있습니다. 일부 사용자는 둘 이상의 그룹에 속할 수 있습니다:

모든 그룹 이름은 대문자로 시작해야 합니다. 위의 그룹 별칭을 /etc/sudoers 파일에 추가하면, apt 데이터베이스를 업데이트하는 권한을 GROUPTWO에 할당할 수 있습니다. 이를 위해 /etc/sudoers 파일에 다음 규칙을 추가합니다:

실행할 사용자/그룹을 지정하지 않으면, sudo 명령은 항상 기본적으로 root 사용자로 설정됩니다.

다음은 Cmnd_Alias의 예로, 시스템을 종료하고 재부팅하는 명령어 별칭을 생성합니다. 그런 다음 이 규칙은 GROUPTHREE에 할당됩니다. /etc/sudoers 파일 내에 다음 줄을 추가하면 이 작업을 수행할 수 있습니다:

위의 스니펫에서 첫 번째 줄은 전원 끄기 및 재부팅 명령을 포함하는 POWER라는 명령어 별칭을 생성합니다. 두 번째 줄은 GROUPTHREE의 구성원이 이 명령을 실행할 수 있도록 허용합니다.

다음은 사용자 그룹이 다른 사용자로 실행할 수 있도록 허용하는 Runas_Alias의 예입니다:

위의 스니펫에서 첫 번째 줄은 WEB이라는 별칭을 생성하여, 이 별칭이 apache 사용자 또는 www-data 사용자로 실행되도록 지정합니다. 두 번째 줄은 이 별칭을 GROUPONE에 할당합니다. 이제 그룹 1의 구성원은 apache 또는 www-data 사용자로 명령을 실행할 수 있습니다.

규칙 제한하기

이 섹션에서는 sudo가 호출에 반응하는 방식을 제어하는 다양한 방법에 대해 알아봅니다. 단일 사용자 시스템에서 일부 명령어는 비교적 무해합니다. 이러한 경우, 사용자가 root 권한으로 root 비밀번호를 입력하지 않고도 명령을 실행할 수 있도록 허용할 수 있습니다. 예를 들어, GROUPONE의 사용자가 비밀번호를 입력하지 않고 updatedb 명령을 실행할 수 있도록 허용하는 규칙을 /etc/sudoers 파일에 다음과 같이 추가하여 생성할 수 있습니다:

NOPASSWD 태그는 비밀번호를 요청하지 않음을 의미합니다. NOPASSWD 태그의 동반 태그는 기본 동작인 PASSWD입니다. 이는 프롬프트에서 비밀번호를 제공해야 함을 의미합니다.

태그는 동반 태그에 의해 재정의되지 않는 한 규칙에 적용됩니다. 예를 들면 다음과 같습니다:

이 규칙에서 GROUPTWO의 사용자는 updatedb 명령을 비밀번호 입력 없이 실행할 수 있습니다. 하지만 kill 명령을 실행하기 전에는 반드시 비밀번호를 제공해야 합니다.

일부 경우에는 위험한 실행을 방지하기 위해 사용자가 특정 명령을 실행하지 못하도록 제한하고 싶을 수 있습니다. 바로 이 부분에서 NOEXEC 태그가 역할을 하게 됩니다. 일부 프로그램은 자체 인터페이스 내에서 다른 명령을 실행할 수 있습니다. 이러한 프로그램의 예로는 less이 있습니다. 만약 less 인터페이스 내에서 다음과 같은 구문으로 명령을 입력하면, 해당 명령이 실행되어 예기치 않은 동작이 발생할 수 있습니다.

이러한 동작을 방지하기 위해, /etc/sudoers 파일에 다음 규칙을 추가하여 username:

추가 정보

이 섹션에서는 sudo를 사용할 때 필요할 수 있는 몇 가지 추가 정보, 지시어 및 명령을 다룹니다.

구성에서 Runas_Alias를 사용하여 사용자 또는 그룹이 다른 사용자로 실행할 수 있도록 지정한 경우, 사용자는 -u 플래그를, 그룹은 -g 플래그를 사용하여 해당 사용자로 명령을 실행할 수 있습니다. 구문은 다음과 같습니다:

각 명령은 관련 비밀번호를 입력하라는 메시지를 표시합니다. 편의를 위해 sudo는 일정 시간 동안 비밀번호를 저장하므로, sudo로 명령을 실행할 때마다 매번 비밀번호를 입력할 필요가 없습니다. sudo 권한이 필요한 명령의 실행을 마친 후에는 다음 명령을 입력하여 이 시간을 초기화할 수 있습니다:

sudo 권한으로 수행해야 할 작업이 더 많아서 비밀번호 요청 전 시간을 연장하고 싶거나, 나중에 sudo 명령이 비밀번호를 묻지 않도록 하려면 다음 명령을 입력하여 시간을 갱신할 수 있습니다:

이 명령은 비밀번호를 묻고 나중에 sudo를 사용할 수 있도록 캐시에 저장합니다.

귀하의 이름에 정의된 sudo 권한을 나열하려면 다음 명령을 입력할 수 있습니다:

이 명령은 귀하의 사용자 이름에 적용되는 /etc/sudoers 파일에 구성된 모든 규칙을 나열합니다. 이 규칙들을 통해 귀하의 사용자 이름이 시스템에서 어떤 작업을 수행할 수 있는지 파악할 수 있습니다. 다음은 예시 스크린샷입니다:

screenshot

경우에 따라 앞에 sudo를 붙이는 것을 잊어버려 명령 실행에 실패할 수 있습니다. 이러한 상황에서는 sudo로 시작하는 명령을 다시 입력해야 할 수 있습니다. 명령을 다시 입력하지 않으려면 "이전 명령 반복"을 위한 bash 기능을 활용할 수 있습니다. 구문은 이중 느낌표입니다. 터미널에서 실행한 마지막 명령을 다음을 입력하여 실행할 수 있습니다:

마지막으로, sudo는 단순히 명령을 sudo 권한으로 실행하도록 승격시킨다는 점을 아는 것이 중요합니다. 추가 정보를 원하시면 다음 링크의 지침을 따라 사용자들과 재미있는 시간을 보낼 수 있습니다.

결론

여러 사용자와 작업할 때는 sudo 명령과 sudoers 파일을 잘 이해하는 것이 중요합니다. 이 튜토리얼에서는 sudoers 파일을 읽고 수정하는 기본 방법과 root 권한을 얻는 데 사용할 수 있는 다양한 방법을 소개했습니다.

권한 분리가 Linux 시스템을 안전하게 만드는 요소라는 점을 항상 명심하십시오. 따라서 일반 사용자에게 수퍼유저 권한을 부여해서는 안 됩니다. 특정 사용자가 시스템에서 특정 작업을 수행하는 데 절대적으로 필요한 권한만 할당하고, 모든 권한을 부여하지 마십시오.

즐거운 컴퓨팅 되세요!

author

Manpreet Singh

작성자 · CloudSigma

Preslav Dobrev는 CloudSigma의 크리에이티브 디자이너로서, 전통적이고 혁신적인 마케팅 채널을 활용하여 일관된 비즈니스 정체성을 구축하는 데 중점을 두고 있습니다. 그는 영향력 있는 브랜드 내러티브를 창출하기 위해 예술적 비전과 전략적 마케팅을 결합하는 데 능숙합니다.

댓글

아직 댓글이 없습니다. 첫 번째로 작성해 보세요.