웹사이트 검색

Sudoers 파일을 편집하는 방법


소개

권한 분리는 Linux 및 Unix 계열 운영 체제에서 구현되는 기본적인 보안 패러다임 중 하나입니다. 일반 사용자는 더 넓은 운영 체제가 아닌 자신의 환경에 미치는 영향 범위를 줄이기 위해 제한된 권한으로 작업합니다.

루트라고 하는 특수 사용자는 슈퍼 사용자 권한을 가집니다. 이것은 일반 사용자에게 존재하는 제한이 없는 관리 계정입니다. 사용자는 다양한 방법으로 수퍼유저 또는 루트 권한으로 명령을 실행할 수 있습니다.

이 기사에서는 /etc/sudoers 파일 편집에 특히 중점을 두고 루트 권한을 정확하고 안전하게 얻는 방법에 대해 설명합니다.

Ubuntu 20.04 서버에서 이 단계를 완료할 것이지만 Debian 및 CentOS와 같은 대부분의 최신 Linux 배포판은 유사한 방식으로 작동해야 합니다.

이 가이드는 여기에서 설명한 초기 서버 설정을 이미 완료했다고 가정합니다. 루트가 아닌 일반 사용자로 서버에 로그인하고 아래에서 계속하십시오.

참고: 이 자습서에서는 권한 에스컬레이션 및 sudoers 파일에 대해 자세히 설명합니다. 사용자에게 sudo 권한을 추가하려는 경우 CentOS용 새 Sudo 사용 사용자를 만드는 방법 빠른 시작 자습서를 확인하세요.

루트 권한을 얻는 방법

루트 권한을 획득하는 세 가지 기본 방법이 있으며, 정교함 수준에 따라 다릅니다.

루트로 로그인

루트 권한을 얻는 가장 간단하고 직접적인 방법은 루트 사용자로 서버에 직접 로그인하는 것입니다.

로컬 시스템에 로그인하는 경우(또는 가상 서버에서 대역외 콘솔 기능을 사용하는 경우) 로그인 프롬프트에서 사용자 이름으로 root를 입력하고 요청 시 루트 암호를 입력하십시오.

SSH를 통해 로그인하는 경우 SSH 연결 문자열에서 IP 주소 또는 도메인 이름 앞에 루트 사용자를 지정합니다.

  1. ssh root@server_domain_or_ip

루트 사용자에 대한 SSH 키를 설정하지 않은 경우 프롬프트가 표시되면 루트 비밀번호를 입력하십시오.

su를 사용하여 루트 되기

관리자가 아닌 작업에 시스템을 사용하는 것은 위험하기 때문에 루트로 직접 로그인하는 것은 일반적으로 권장되지 않습니다.

슈퍼 사용자 권한을 얻는 다음 방법은 필요할 때 언제든지 루트 사용자가 될 수 있도록 하는 것입니다.

"대체 사용자\를 나타내는 su 명령을 호출하여 이를 수행할 수 있습니다. 루트 권한을 얻으려면 다음을 입력하십시오.

  1. su

루트 사용자의 암호를 묻는 메시지가 표시되면 루트 셸 세션으로 이동합니다.

루트 권한이 필요한 작업을 마쳤으면 다음을 입력하여 일반 셸로 돌아갑니다.

  1. exit

sudo를 사용하여 루트로 명령 실행

마지막으로 논의할 루트 권한을 얻는 방법은 sudo 명령을 사용하는 것입니다.

sudo 명령을 사용하면 새 셸을 생성할 필요 없이 루트 권한으로 일회성 명령을 실행할 수 있습니다. 다음과 같이 실행됩니다.

  1. sudo command_to_execute

su와 달리 sudo 명령은 루트 암호가 아닌 현재 사용자의 암호를 요청합니다.

보안 문제로 인해 sudo 액세스는 기본적으로 사용자에게 부여되지 않으며 올바르게 작동하기 전에 설정해야 합니다. 새 Sudo 사용 사용자를 만드는 방법 CentOS용 빠른 시작 자습서를 확인하여 sudo 사용 사용자를 설정하는 방법을 알아보세요.

다음 섹션에서는 sudo 구성을 수정하는 방법에 대해 자세히 설명합니다.

Visudo는 무엇입니까?

sudo 명령은 /etc/sudoers에 있는 파일을 통해 구성됩니다.

경고: 일반 텍스트 편집기로 이 파일을 편집하지 마십시오! 대신 항상 visudo 명령을 사용하십시오!

/etc/sudoers 파일의 잘못된 구문으로 인해 상승된 권한을 얻을 수 없는 시스템이 손상될 수 있으므로 visudo 명령을 사용하여 편집하는 것이 중요합니다. 파일.

visudo 명령은 평소와 같이 텍스트 편집기를 열지만 저장 시 파일 구문의 유효성을 검사합니다. 이것은 루트 권한을 얻는 유일한 방법일 수 있는 sudo 작업을 차단하는 구성 오류를 방지합니다.

일반적으로 visudovi 텍스트 편집기로 /etc/sudoers 파일을 엽니다. 그러나 Ubuntu는 대신 nano 텍스트 편집기를 사용하도록 visudo를 구성했습니다.

다시 vi로 변경하려면 다음 명령을 실행하십시오.

  1. sudo update-alternatives --config editor
Output
There are 4 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status ------------------------------------------------------------ * 0 /bin/nano 40 auto mode 1 /bin/ed -100 manual mode 2 /bin/nano 40 manual mode 3 /usr/bin/vim.basic 30 manual mode 4 /usr/bin/vim.tiny 10 manual mode Press <enter> to keep the current choice[*], or type selection number:

선택하려는 항목에 해당하는 번호를 선택하십시오.

CentOS에서는 ~/.bashrc에 다음 행을 추가하여 이 값을 변경할 수 있습니다.

  1. export EDITOR=`which name_of_editor`

변경 사항을 구현하기 위해 파일을 소싱합니다.

  1. . ~/.bashrc

visudo를 구성한 후 명령을 실행하여 /etc/sudoers 파일에 액세스합니다.

  1. sudo visudo

Sudoers 파일을 수정하는 방법

선택한 텍스트 편집기에 /etc/sudoers 파일이 표시됩니다.

주석을 제거한 상태로 Ubuntu 20.04에서 파일을 복사하여 붙여넣었습니다. CentOS /etc/sudoers 파일에는 더 많은 줄이 있으며 그 중 일부는 이 가이드에서 다루지 않습니다.

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root    ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

이 줄이 무엇을 하는지 살펴보겠습니다.

기본 라인

첫 번째 줄인 Defaults env_reset은 터미널 환경을 재설정하여 사용자 변수를 제거합니다. 이것은 sudo 세션에서 잠재적으로 유해한 환경 변수를 지우는 데 사용되는 안전 조치입니다.

두 번째 줄인 Defaults mail_badpass는 구성된 mailto 사용자에게 잘못된 sudo 암호 시도에 대한 알림을 메일로 보내도록 시스템에 지시합니다. 기본적으로 이것은 루트 계정입니다.

Defaults secure_path=...로 시작하는 세 번째 줄은 PATH(운영 체제가 응용 프로그램을 찾을 파일 시스템의 위치)를 지정합니다. sudo 작업. 이것은 유해할 수 있는 사용자 경로를 사용하는 것을 방지합니다.

사용자 권한 라인

루트 사용자의 sudo 권한을 지시하는 네 번째 줄은 이전 줄과 다릅니다. 다양한 필드의 의미를 살펴보겠습니다.

  • 루트 ALL=(ALL:ALL) ALL 첫 번째 필드는 규칙이 적용될 사용자 이름(루트)을 나타냅니다.\n
  • 루트 ALL=(ALL:ALL) ALL 첫 번째 "ALL\은 이 규칙이 모든 호스트에 적용됨을 나타냅니다.\n
  • root ALL=(ALL:ALL) ALL 이 "ALL\은 루트 사용자가 모든 사용자로서 명령을 실행할 수 있음을 나타냅니다.\n
  • root ALL=(ALL:ALL) ALL 이 "ALL\은 루트 사용자가 모든 그룹으로 명령을 실행할 수 있음을 나타냅니다.\n
  • root ALL=(ALL:ALL) ALL 마지막 "ALL\은 이러한 규칙이 모든 명령에 적용됨을 나타냅니다.\n

이것은 루트 사용자가 암호를 제공하는 한 sudo를 사용하여 모든 명령을 실행할 수 있음을 의미합니다.

그룹 권한 라인

다음 두 줄은 사용자 권한 줄과 유사하지만 그룹에 대한 sudo 규칙을 지정합니다.

%로 시작하는 이름은 그룹 이름을 나타냅니다.

여기에서 admin 그룹은 모든 호스트의 모든 사용자로 모든 명령을 실행할 수 있음을 알 수 있습니다. 마찬가지로 sudo 그룹은 동일한 권한을 갖지만 모든 그룹으로도 실행할 수 있습니다.

/etc/sudoers.d 라인 포함

마지막 줄은 언뜻 보기에 주석처럼 보일 수 있습니다.

. . .

#includedir /etc/sudoers.d

일반적으로 설명을 나타내는 #로 시작 하지 않습니다. 그러나 이 행은 실제로 /etc/sudoers.d 디렉토리 내의 파일도 소싱되고 적용됨을 나타냅니다.

해당 디렉토리 내의 파일은 /etc/sudoers 파일 자체와 동일한 규칙을 따릅니다. ~로 끝나지 않고 .가 없는 모든 파일을 읽고 sudo 구성에 추가합니다.

이것은 주로 응용 프로그램이 설치 시 sudo 권한을 변경하기 위한 것입니다. 관련된 모든 규칙을 /etc/sudoers.d 디렉토리의 단일 파일에 넣으면 어떤 권한이 어떤 계정과 연결되어 있는지 쉽게 확인하고 조작을 시도하지 않고도 자격 증명을 쉽게 되돌릴 수 있습니다. /etc/sudoers 파일을 직접.

/etc/sudoers 파일 자체와 마찬가지로 항상 visudo를 사용하여 /etc/sudoers.d 디렉토리 내의 파일을 편집해야 합니다. 이러한 파일을 편집하기 위한 구문은 다음과 같습니다.

  1. sudo visudo -f /etc/sudoers.d/file_to_edit

사용자에게 Sudo 권한을 부여하는 방법

사용자가 sudo 권한을 관리할 때 수행하려는 가장 일반적인 작업은 새 사용자에게 일반 sudo 액세스 권한을 부여하는 것입니다. 이는 계정에 시스템에 대한 전체 관리 액세스 권한을 부여하려는 경우에 유용합니다.

이 가이드의 Ubuntu 시스템과 같이 범용 관리 그룹으로 설정된 시스템에서 이 작업을 수행하는 가장 쉬운 방법은 실제로 문제의 사용자를 해당 그룹에 추가하는 것입니다.

예를 들어 Ubuntu 20.04에서 sudo 그룹에는 전체 관리자 권한이 있습니다. 다음과 같이 사용자를 그룹에 추가하여 사용자에게 동일한 권한을 부여할 수 있습니다.

  1. sudo usermod -aG sudo username

gpasswd 명령도 사용할 수 있습니다.

  1. sudo gpasswd -a username sudo

둘 다 동일한 작업을 수행합니다.

CentOS에서는 일반적으로 sudo 그룹이 아닌 wheel 그룹입니다.

  1. sudo usermod -aG wheel username

또는 gpasswd를 사용하여:

  1. sudo gpasswd -a username wheel

CentOS에서 사용자를 그룹에 추가하는 것이 즉시 작동하지 않으면 /etc/sudoers 파일을 편집하여 그룹 이름의 주석을 제거해야 할 수 있습니다.

  1. sudo visudo
. . .
%wheel ALL=(ALL) ALL
. . .

사용자 지정 규칙을 설정하는 방법

이제 파일의 일반 구문에 익숙해졌으므로 몇 가지 새로운 규칙을 만들어 보겠습니다.

별칭을 만드는 방법

sudoers 파일은 다양한 종류의 "별칭\으로 항목을 그룹화하여 보다 쉽게 구성할 수 있습니다.

예를 들어 멤버십이 겹치는 세 가지 다른 사용자 그룹을 만들 수 있습니다.

. . .
User_Alias		GROUPONE = abby, brent, carl
User_Alias		GROUPTWO = brent, doris, eric,
User_Alias		GROUPTHREE = doris, felicia, grant
. . .

그룹 이름은 대문자로 시작해야 합니다. 그런 다음 GROUPTWO의 구성원이 다음과 같은 규칙을 생성하여 apt 데이터베이스를 업데이트하도록 허용할 수 있습니다.

. . .
GROUPTWO	ALL = /usr/bin/apt-get update
. . .

위와 같이 실행할 사용자/그룹을 지정하지 않으면 sudo는 기본적으로 루트 사용자로 설정됩니다.

GROUPTHREE의 구성원이 "명령 별칭\을 생성하고 이를 GROUPTHREE에 대한 규칙에 사용하여 시스템을 종료하고 재부팅하도록 허용할 수 있습니다.

. . .
Cmnd_Alias		POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE	ALL = POWER
. . .

머신의 전원을 끄고 재부팅하는 명령이 포함된 POWER라는 명령 별칭을 만듭니다. 그런 다음 GROUPTHREE의 구성원이 이러한 명령을 실행할 수 있도록 허용합니다.

또한 다음과 같이 명령을 실행할 사용자를 지정하는 규칙 부분을 대체할 수 있는 "다음 계정으로 실행\ 별칭을 만들 수 있습니다.

. . .
Runas_Alias		WEB = www-data, apache
GROUPONE	ALL = (WEB) ALL
. . .

이렇게 하면 GROUPONE의 구성원인 누구나 www-data 사용자 또는 apache 사용자로 명령을 실행할 수 있습니다.

둘 사이에 충돌이 있는 경우 이후 규칙이 이전 규칙보다 우선한다는 점을 명심하십시오.

규칙을 잠그는 방법

sudo가 호출에 반응하는 방식을 더 잘 제어할 수 있는 여러 가지 방법이 있습니다.

mlocate 패키지와 관련된 updatedb 명령은 단일 사용자 시스템에서 비교적 무해합니다. 사용자가 암호를 입력할 필요 없이 루트 권한으로 실행하도록 허용하려면 다음과 같은 규칙을 만들 수 있습니다.

. . .
GROUPONE	ALL = NOPASSWD: /usr/bin/updatedb
. . .

NOPASSWD는 암호가 요청되지 않음을 의미하는 "태그\입니다. 여기에는 기본 동작인 PASSWD라는 동반 명령이 있습니다. 태그는 나머지와 관련이 있습니다. 나중에 "쌍둥이\ 태그에 의해 기각되지 않는 한 규칙의

예를 들어 다음과 같은 줄이 있을 수 있습니다.

. . .
GROUPTWO	ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
. . .

또 다른 유용한 태그는 NOEXEC로, 특정 프로그램에서 일부 위험한 동작을 방지하는 데 사용할 수 있습니다.

예를 들어 less와 같은 일부 프로그램은 인터페이스 내에서 다음을 입력하여 다른 명령을 생성할 수 있습니다.

!command_to_run

이것은 기본적으로 less가 실행되는 것과 동일한 권한으로 사용자가 부여한 모든 명령을 실행하며 이는 매우 위험할 수 있습니다.

이를 제한하기 위해 다음과 같은 줄을 사용할 수 있습니다.

. . .
username	ALL = NOEXEC: /usr/bin/less
. . .

기타 정보

sudo를 다룰 때 유용할 수 있는 정보가 몇 가지 더 있습니다.

구성 파일에서 "다음으로 실행\할 사용자 또는 그룹을 지정한 경우 각각 -u-g 플래그를 사용하여 해당 사용자로 명령을 실행할 수 있습니다. :

  1. sudo -u run_as_user command
  2. sudo -g run_as_group command

편의를 위해 기본적으로 sudo는 하나의 터미널에 일정 시간 동안 인증 정보를 저장합니다. 즉, 해당 타이머가 종료될 때까지 암호를 다시 입력할 필요가 없습니다.

보안을 위해 관리 명령 실행을 완료했을 때 이 타이머를 지우려면 다음을 실행할 수 있습니다.

  1. sudo -k

반면에 나중에 메시지가 표시되지 않도록 sudo 명령을 "초기화\하거나 sudo 임대를 갱신하려는 경우 다음을 수행할 수 있습니다. 항상 입력:

  1. sudo -v

sudo 시간 프레임이 만료될 때까지 나중에 sudo가 사용할 수 있도록 비밀번호를 입력하라는 메시지가 표시됩니다.

사용자 이름에 어떤 종류의 권한이 정의되어 있는지 궁금한 경우 다음을 입력할 수 있습니다.

  1. sudo -l

이렇게 하면 사용자에게 적용되는 /etc/sudoers 파일의 모든 규칙이 나열됩니다. 이를 통해 모든 사용자가 sudo를 사용하여 수행할 수 있는 작업과 수행할 수 없는 작업에 대한 좋은 아이디어를 얻을 수 있습니다.

명령을 실행할 때 sudo로 시작하는 것을 잊었기 때문에 명령이 실패하는 경우가 많습니다. 명령을 다시 입력하지 않으려면 "마지막 명령 반복\을 의미하는 bash 기능을 활용할 수 있습니다.

  1. sudo !!

이중 느낌표는 마지막 명령을 반복합니다. 권한이 없는 명령을 권한이 있는 명령으로 빠르게 변경하기 위해 sudo를 앞에 붙였습니다.

재미를 위해 visudo를 사용하여 /etc/sudoers 파일에 다음 줄을 추가할 수 있습니다.

  1. sudo visudo
. . .
Defaults	insults
. . .

이로 인해 사용자가 sudo에 대해 잘못된 암호를 입력하면 sudo가 어리석은 모욕을 반환합니다. sudo -k를 사용하여 이전 sudo 캐시된 비밀번호를 지우고 사용해 볼 수 있습니다.

  1. sudo -k
  2. sudo ls
Output
[sudo] password for demo: # enter an incorrect password here to see the results Your mind just hasn't been the same since the electro-shock, has it? [sudo] password for demo: My mind is going. I can feel it.

결론

이제 sudoers 파일을 읽고 수정하는 방법과 루트 권한을 얻기 위해 사용할 수 있는 다양한 방법에 대한 기본적인 이해가 있어야 합니다.

이유 때문에 일반 사용자에게는 슈퍼 사용자 권한이 부여되지 않는다는 점을 기억하십시오. 루트 권한으로 실행하는 각 명령의 기능을 이해하는 것이 중요합니다. 책임을 가볍게 여기지 마십시오. 사용 사례에 이러한 도구를 사용하는 가장 좋은 방법을 알아보고 필요하지 않은 기능을 잠급니다.