소개
권한 분리는 리눅스 및 유닉스와 유사한 운영 체제에서 구현된 기본 보안 패러다임 중 하나입니다. 일반 사용자는 자신의 환경에 영향을 줄이기 위해 제한된 권한으로 작동하며, 넓은 운영 체제에는 영향을 미치지 않습니다.
A special user, called root, has super-user privileges. This is an administrative account without the restrictions that are present on normal users. Users can execute commands with super-user or root privileges in a number of different ways.
이 문서에서는 /etc/sudoers
파일을 편집하는 데 특히 중점을 두어 올바르고 안전하게 루트 권한을 얻는 방법에 대해 논의하겠습니다.
이 단계를 우분투 20.04 서버에서 완료할 것이지만, 데비안 및 CentOS와 같은 대부분의 현대 리눅스 배포판도 유사한 방식으로 작동해야 합니다.
이 안내서는 여기에서 논의된 초기 서버 설정을 이미 완료했다고 가정합니다. 일반적인 비-루트 사용자로 서버에 로그인한 다음 아래 지침을 계속하세요.sudoers
파일에 대해 심층적으로 다룹니다. 사용자에게 sudo
권한을 추가하기만을 원한다면, 우리의
참고: 이 튜토리얼은 권한 상승과 sudoers
파일에 대해 자세히 다룹니다. 단지 sudo
권한을 사용자에게 추가하고 싶다면 새로운 Sudo 활성화 사용자 생성 방법 빠른 시작 튜토리얼을 우분투와 센토스에서 확인하세요.
루트 권한 획득 방법
루트 권한을 획득하는 기본적인 세 가지 방법이 있으며, 이들은 정교함의 정도가 다릅니다.
루트로 로그인
루트 권한을 획득하는 가장 간단하고 직접적인 방법은 서버에 루트 사용자로 직접 로그인하는 것입니다.루트 사용자.
로컬 머신에 로그인하는 경우(또는 가상 서버의 아웃-오브-밴드 콘솔 기능을 사용하는 경우) 로그인 프롬프트에서 사용자 이름으로 root
를 입력하고 루트 암호를 입력하십시오. 루트 묻는다.
만약 SSH를 통해 로그인하고 있다면, SSH 연결 문자열에서 IP 주소나 도메인 이름 앞에 root 사용자를 지정하세요:
만약 root 사용자에 대한 SSH 키를 설정하지 않았다면, 메시지가 나오면 root 암호를 입력하세요.
root로 변경하기 위해 su
사용하기
root로 직접 로그인하는 것은 일반적으로 권장되지 않습니다. 이는 시스템을 관리 작업이 아닌 다른 작업으로 사용하기 쉽기 때문에 위험합니다.
다음과 같은 방법으로 언제든지 필요할 때 root 사용자가 될 수 있습니다.
이렇게 하려면 “대체 사용자”를 의미하는 su
명령어를 호출하면 됩니다. root 권한을 얻으려면 다음을 입력하세요:
root 사용자의 암호를 요청받은 후, root 쉘 세션으로 들어가게 됩니다.
관리 작업이 완료되면 정상적인 쉘로 돌아가기 위해 다음을 입력하세요:
sudo
를 사용하여 root로 명령어 실행하기
마지막으로 논의할 root 권한을 얻는 방법은 sudo
명령어입니다.
sudo
명령어를 사용하면 새 쉘을 생성하지 않고 root 권한으로 일회성 명령을 실행할 수 있습니다. 이렇게 실행됩니다:
su
와 달리 sudo
명령어는 현재 사용자의 암호를 요청하지만 root 암호는 요청하지 않습니다.
sudo
의 보안적 의미 때문에 기본적으로 사용자에게 액세스 권한이 부여되지 않으며 제대로 작동하기 전에 설정해야 합니다. 새로운 Sudo 활성화된 사용자 생성 방법에 대한 빠른 시작 튜토리얼을 Ubuntu와 CentOS에서 확인하여 sudo
활성화된 사용자를 설정하는 방법을 배우십시오.
다음 섹션에서는 sudo
구성을 보다 상세하게 수정하는 방법에 대해 논의할 것입니다.
Visudo란 무엇인가?
sudo
명령어는 /etc/sudoers
에 위치한 파일을 통해 구성됩니다.
경고: 절대 일반 텍스트 편집기로 이 파일을 편집하지 마십시오! 항상 visudo
명령어를 사용하세요!
부적절한 구문이 /etc/sudoers
파일에 있으면 고칠 수 없는 시스템으로 남겨질 수 있기 때문에 visudo
명령어를 사용하여 파일을 편집하는 것이 중요합니다.
visudo
명령어는 저장할 때 파일의 구문을 확인하는 일반 텍스트 편집기를 엽니다. 이는 sudo
작업을 차단하는 구성 오류를 방지합니다. 이는 루트 권한을 얻는 유일한 방법일 수 있습니다.
전통적으로 visudo
는 vi
텍스트 편집기로 /etc/sudoers
파일을 엽니다. 그러나 Ubuntu는 visudo
를 nano
텍스트 편집기로 구성했습니다.
다시 vi
로 변경하려면 다음 명령어를 실행하세요.
OutputThere 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
에 다음 줄을 추가하여 이 값을 변경할 수 있습니다.
변경 사항을 적용하려면 파일을 소스로 가져오세요.
visudo
를 구성한 후 명령을 실행하여 /etc/sudoers
파일에 액세스하세요.
sudoers 파일 수정 방법
선택한 텍스트 편집기에서 /etc/sudoers
파일이 표시됩니다.
I have copied and pasted the file from Ubuntu 20.04, with comments removed. The CentOS /etc/sudoers
file has many more lines, some of which we will not discuss in this guide.
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
비밀번호 시도에 대한 알림을 보내도록 지시합니다. 기본적으로 이는 root 계정입니다.
세 번째 라인인 Defaults secure_path=...
는 sudo
작업에 사용될 PATH
(운영 체제가 애플리케이션을 찾을 파일 시스템의 위치)를 지정합니다. 이는 위험할 수 있는 사용자 경로를 사용하지 않도록 방지합니다.
사용자 권한 라인
네 번째 라인인 root 사용자의 sudo
권한은 앞선 라인들과 다릅니다. 다른 필드들이 무엇을 의미하는지 살펴보겠습니다:
-
root ALL=(ALL:ALL) ALL
첫 번째 필드는 규칙이 적용될 사용자 이름을 나타냅니다 (root). -
root ALL=(ALL:ALL) ALL
첫 번째 “ALL”은 이 규칙이 모든 호스트에 적용됨을 나타냅니다. -
root ALL=(ALL:ALL) ALL
이 “ALL”은 root 사용자가 모든 사용자로 명령을 실행할 수 있음을 나타냅니다. -
root ALL=(ALL:ALL) ALL
이 “ALL”은 root 사용자가 모든 그룹으로 명령을 실행할 수 있음을 나타냅니다. -
root ALL=(ALL:ALL) ALL
마지막 “ALL”은 이 규칙이 모든 명령어에 적용됨을 나타냅니다.
이는 우리의 root 사용자가 자신의 비밀번호를 제공하는 한 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
파일 자체와 마찬가지로 /etc/sudoers.d
디렉토리 내의 파일은 항상 visudo
를 사용하여 편집해야 합니다. 이러한 파일을 편집하는 구문은 다음과 같습니다:
사용자에게 Sudo 권한 부여하기
sudo
권한을 관리할 때 사용자가 달성하려는 가장 일반적인 작업은 새 사용자에게 일반 sudo
액세스 권한을 부여하는 것입니다. 이것은 계정에 시스템에 대한 전체 관리 액세스 권한을 부여하려는 경우에 유용합니다.
이 가이드에서와 같이 일반 용도의 관리 그룹으로 설정된 시스템에서 이것을 수행하는 가장 쉬운 방법은 문제의 사용자를 해당 그룹에 추가하는 것입니다.
예를 들어 Ubuntu 20.04에서 sudo
그룹은 전체 관리자 권한을 가지고 있습니다. 사용자를 그룹에 추가하여 이러한 동일한 권한을 부여할 수 있습니다.
gpasswd
명령을 사용할 수도 있습니다.
이들은 모두 동일한 결과를 달성합니다.
CentOS에서는 일반적으로 wheel
그룹이 아닌 sudo
그룹입니다:
또는 gpasswd
를 사용하는 경우:
CentOS에서 사용자를 그룹에 추가하는 것이 즉시 작동하지 않으면 /etc/sudoers
파일을 편집하여 그룹 이름을 주석 처리 해제해야 할 수 있습니다:
. . .
%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
는 root 사용자로 기본값으로 설정됩니다.
GROUPTHREE
의 멤버가 시스템을 종료하고 다시 시작할 수 있도록 “명령 별칭”을 만들고 GROUPTHREE
에 대한 규칙에서 사용할 수 있습니다.
. . .
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE ALL = POWER
. . .
우리는 POWER
라는 명령어 별칭을 만들어서 기계의 전원을 끄고 재부팅하는 명령어를 포함시킵니다. 그리고나서 GROUPTHREE
의 구성원들이 이 명령어를 실행할 수 있도록 허용합니다.
또한 “Run as” 별칭을 만들 수도 있는데, 이는 명령어를 실행할 사용자를 지정하는 규칙의 일부를 대체할 수 있습니다:
. . .
Runas_Alias WEB = www-data, apache
GROUPONE ALL = (WEB) ALL
. . .
이를 통해 GROUPONE
의 구성원들이 www-data
사용자나 apache
사용자로 명령어를 실행할 수 있게 됩니다.
단, 두 규칙 사이에 충돌이 있을 경우 나중에 작성된 규칙이 이전 규칙을 덮어쓰게 되니 주의하세요.
규칙 잠금 방법
sudo
가 호출에 반응하는 방식에 대한 더 많은 제어를 달성할 수 있는 여러 가지 방법이 있습니다.
mlocate
패키지와 관련된 updatedb
명령어는 단일 사용자 시스템에서는 상대적으로 무해합니다. 사용자들이 root 권한으로 이것을 실행할 수 있게 허용하려면 암호 없이 이런 규칙을 만들 수 있습니다:
. . .
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
플래그를 사용하여 해당 사용자로 명령을 실행할 수 있습니다.
편의를 위해 기본적으로 sudo
는 일정 시간 동안 한 터미널에서 인증 세부 정보를 저장합니다. 즉, 해당 타이머가 종료될 때까지 비밀번호를 다시 입력할 필요가 없습니다.
보안 목적으로 관리 명령을 실행한 후 이 타이머를 지우려면 다음을 실행할 수 있습니다.
반면에 나중에 메시지가 표시되지 않도록 sudo
명령을 “준비”하거나 sudo
임대를 갱신하려면 항상 다음을 입력할 수 있습니다.
비밀번호를 입력하라는 메시지가 나타날 것이며, 이는 sudo
사용 시간이 만료될 때까지 나중에 sudo
사용을 위해 캐시됩니다.
사용자 이름에 정의된 권한 유형을 궁금해하는 경우 다음을 입력할 수 있습니다.
이렇게 하면 /etc/sudoers
파일에 적용되는 모든 규칙을 나열합니다. 이를 통해 어떤 사용자로 sudo
를 사용할 때 할 수 있거나 할 수 없는 작업에 대한 좋은 아이디어를 얻을 수 있습니다.
명령을 실행할 때마다 sudo
로 시작하지 않아 실패하는 경우가 많습니다. 명령을 다시 입력할 필요가 없도록 다음과 같은 bash 기능을 활용할 수 있습니다.
이중 느낌표는 마지막 명령을 반복합니다. 비권한 명령을 권한 있는 명령으로 빠르게 변경하기 위해 sudo
로 시작했습니다.
visudo
를 사용하여 /etc/sudoers
파일에 다음 줄을 추가할 수 있습니다.
. . .
Defaults insults
. . .
이렇게 하면 sudo
가 사용자가 sudo
에 대한 잘못된 비밀번호를 입력할 때 우스꽝스러운 모욕을 반환합니다. sudo -k
를 사용하여 이전 sudo
캐시된 비밀번호를 지우고 시도해 볼 수 있습니다.
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
파일을 읽고 수정하는 기본적인 이해와 다양한 방법을 통해 root 권한을 얻을 수 있는 지식을 갖추게 되었습니다.
일반 사용자에게 슈퍼 유저 권한이 주어지지 않은 것은 이유가 있습니다. 루트 권한으로 실행하는 각 명령이 무엇을 하는지 이해하는 것이 중요합니다. 책임을 가볍게 여기지 마십시오. 사용 사례에 가장 적합한 방법을 배우고 필요하지 않은 기능을 제한하십시오.
Source:
https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file