Linux 권한 부여

LinuxBeginner
지금 연습하기

소개

Linux 시스템에서 사용자 권한과 액세스 제어를 관리하는 일은 시스템 관리와 보안의 기본입니다. sudo 명령은 "superuser do"의 약자로, 권한이 부여된 사용자가 일반적으로 슈퍼유저 또는 root 계정의 권한으로 명령을 실행할 수 있게 합니다.

이 실습에서는 Linux 환경에서 사용자에게 권한을 부여하고 제한하는 방법을 익힙니다. 사용자를 sudo 그룹에 추가해 관리 작업을 수행할 수 있게 하는 방법과, 특정 명령만 실행하도록 권한을 제한하는 방법을 배웁니다. 민감한 작업에 대한 액세스를 신중하게 제어해야 하는 시스템을 안전하게 유지하려면 이러한 기술이 필요합니다.

사용자 관리와 sudo 기본 사항 이해하기

이 단계에서는 Linux의 사용자 관리와 sudo 명령의 기본 사항을 알아봅니다. 새 사용자를 만든 다음 해당 사용자에게 관리자 권한을 부여하는 방법을 익힙니다.

sudo란?

sudo 명령을 사용하면 권한이 부여된 사용자가 다른 사용자의 보안 권한으로 명령을 실행할 수 있습니다. 일반적으로 이 사용자는 슈퍼유저(root)입니다. root 사용자로 로그인하지 않고도 관리 작업을 수행할 수 있으므로 보안 모범 사례로 여겨집니다.

새 사용자 만들기

먼저 새 사용자 계정을 만듭니다. 터미널을 열고 다음 명령을 실행합니다.

sudo adduser trusted_advisor

새 사용자의 비밀번호와 몇 가지 선택 정보를 입력하라는 메시지가 표시됩니다. 이 실습에서는 password123처럼 간단한 비밀번호를 설정하고, 나머지 항목은 Enter 키를 눌러 비워 둡니다.

출력은 다음과 비슷합니다.

Adding user `trusted_advisor' ...
Adding new group `trusted_advisor' (1001) ...
Adding new user `trusted_advisor' (1001) with group `trusted_advisor' ...
Creating home directory `/home/trusted_advisor' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for trusted_advisor
Enter the new value, or press ENTER for the default
 Full Name []:
 Room Number []:
 Work Phone []:
 Home Phone []:
 Other []:
Is the information correct? [Y/n] Y

사용자 정보 확인하기

사용자가 정상적으로 생성되었는지 확인하려면 /etc/passwd 파일의 내용을 조회합니다.

grep trusted_advisor /etc/passwd

사용자 정보가 포함된 행이 표시되어야 합니다.

sudo 권한 부여하기

사용자에게 sudo 권한을 부여하려면 해당 사용자를 sudo 그룹에 추가해야 합니다. Ubuntu에서는 sudo 그룹의 구성원이 sudo 명령을 사용할 수 있습니다. 다음 명령을 실행합니다.

sudo usermod -aG sudo trusted_advisor

이 명령은 사용자 trusted_advisor를 sudo 그룹에 추가합니다. 여기서 -a는 기존 그룹을 유지하면서 추가하고, -G sudo는 추가할 그룹을 지정합니다. 이제 이 사용자는 관리자 권한으로 명령을 실행할 수 있습니다.

sudo 액세스 확인하기

새 사용자에게 sudo 액세스 권한이 있는지 확인하려면 해당 사용자 계정으로 전환한 다음, 일반적으로 root 사용자만 액세스할 수 있는 /root 디렉터리의 내용을 조회합니다.

su - trusted_advisor

메시지가 표시되면 이 사용자를 위해 설정한 비밀번호를 입력합니다. 그런 다음 다음 명령을 실행합니다.

sudo ls /root

처음 sudo를 사용할 때는 비밀번호를 다시 입력하라는 메시지가 표시됩니다. 비밀번호를 입력한 후 /root 디렉터리의 내용이 표시되면 이 사용자에게 sudo 권한이 있는 것입니다.

마지막으로 trusted_advisor 사용자 세션을 종료해 원래 사용자로 돌아갑니다.

exit

sudoers 파일로 sudo 액세스 제한하기

이 단계에서는 sudoers 파일을 사용해 사용자의 sudo 권한을 특정 명령으로 제한하는 방법을 배웁니다. 이는 사용자가 작업을 수행하는 데 필요한 최소한의 권한만 가져야 한다는 최소 권한 원칙을 적용합니다.

sudoers 파일 이해하기

/etc/sudoers 파일은 sudo 명령을 사용할 수 있는 사용자와 실행할 수 있는 명령을 제어합니다. 구문 오류로 시스템에 접근하지 못할 수 있으므로 일반 텍스트 편집기로 이 파일을 직접 편집해서는 안 됩니다. 대신 저장하기 전에 구문 오류를 검사하는 visudo 명령을 사용합니다.

그룹에 부여된 광범위한 액세스 권한 제거하기

일치하는 규칙의 sudo 권한은 합산됩니다. 특정 명령만 허용하는 규칙을 추가해도 sudo 그룹이 부여하는 전체 액세스 권한은 취소되지 않습니다. 원래 사용하던 labex 세션에서 먼저 광범위한 액세스 권한을 제거합니다.

sudo deluser trusted_advisor sudo

그룹 구성이 변경된 상태를 적용하려면 테스트할 때 새 su - trusted_advisor 세션을 사용합니다.

sudoers 파일 편집하기

sudoers 파일을 안전하게 편집하려면 visudo 명령을 사용합니다.

sudo EDITOR=vim visudo

이 명령은 Vim을 명시적으로 엽니다. 따라서 아래의 편집 및 저장 키 입력은 Vim 기준입니다. G 키를 눌러 파일의 마지막 줄로 이동한 다음, o 키를 눌러 새 줄을 만들고 입력 모드로 전환합니다.

sudoers 구문 이해하기

sudoers 파일에 sudo 항목을 작성하는 기본 구문은 다음과 같습니다.

user_or_group    host=(run_as_user:run_as_group)    NOPASSWD: commands

각 항목의 의미는 다음과 같습니다.

  • user_or_group: 이 규칙을 적용할 사용자 또는 그룹
  • host: 이 규칙을 적용할 호스트 이름(일반적으로 ALL)
  • run_as_user: 명령을 실행할 사용자(root는 root로만 실행, ALL은 모든 사용자로 실행)
  • run_as_group: 명령을 실행할 그룹(생략 가능)
  • NOPASSWD: 비밀번호를 입력하지 않고 명령을 실행할 수 있도록 하는 선택적 태그
  • commands: sudo로 실행할 수 있는 구체적인 명령

제한된 sudo 액세스 권한 추가하기

파일 끝으로 이동해 다음 줄을 추가합니다. 이 규칙은 trusted_advisor가 비밀번호 없이 cp와 mv 명령만 실행하도록 허용합니다.

trusted_advisor ALL=(ALL) NOPASSWD: /bin/cp, /bin/mv

또한 /var/log/auth.log를 제공하지 않는 이 컨테이너에서 전용 sudo 로그를 사용하도록 다음 줄을 별도로 추가합니다.

Defaults logfile="/var/log/sudo.log"

Esc 키를 누르고 :wq를 입력한 다음 Enter 키를 눌러 저장하고 Vim을 종료합니다. visudo에서 구문 오류를 보고하면 e 키를 눌러 다시 편집하고 오류를 수정합니다. 변경 사항을 취소하려면 Esc 키를 누르고 :q!를 입력한 다음 Enter 키를 누릅니다.

이 단계는 명령 일치 여부를 확인하는 연습일 뿐입니다. cp 또는 mv로 제한 없이 root 권한을 허용하면 민감한 파일을 덮어쓸 수 있으므로 실제 운영 환경에서 안전한 제한이 아닙니다.

제한된 sudo 액세스 테스트하기

제한된 sudo 액세스가 예상대로 작동하는지 테스트합니다. 먼저 실습 작업 디렉터리로 돌아가 테스트 파일을 만듭니다.

cd /home/labex/project
echo "This is a test file" > important_file.txt

이제 trusted_advisor 사용자로 전환합니다.

su - trusted_advisor

메시지가 표시되면 비밀번호를 입력합니다.

파일을 root 디렉터리에 복사해 봅니다. 이 작업은 허용되어야 합니다.

sudo cp /home/labex/project/important_file.txt /root/

비밀번호를 묻지 않고 명령이 성공해야 합니다.

이제 허용 목록에 없는 cat 같은 명령을 실행해 봅니다.

sudo -n cat /root/important_file.txt

cat은 허용되지 않으므로 명령이 실패해야 합니다. -n은 비밀번호 입력 프롬프트를 표시하지 않도록 합니다. 거부 메시지에는 비밀번호가 필요하거나 명령이 허용되지 않는다는 내용이 표시될 수 있습니다. 파일 내용이 출력되어서는 안 됩니다.

ls도 허용된 명령이 아니므로 복사 결과를 확인하기 전에 제한된 사용자 세션을 종료합니다.

exit

labex 사용자로 파일이 복사되었는지 확인합니다.

sudo ls /root/

출력에 important_file.txt가 표시되어야 합니다.

테스트 파일 삭제하기

정리하려면 테스트 파일을 삭제합니다.

sudo rm /home/labex/project/important_file.txt /root/important_file.txt

sudo 로그와 보안 고려 사항 이해하기

이 단계에서는 sudo 로깅과 보안 모범 사례를 알아봅니다. 보안 모니터링과 감사에 sudo 사용 내역을 기록하는 일이 중요합니다.

sudo 로깅

사용자가 sudo로 명령을 실행하면 해당 작업이 로그에 기록됩니다. 이 기록은 보안 모니터링과 문제 해결에 유용한 감사 추적 자료가 됩니다.

시스템 로깅 서비스가 설치된 Ubuntu에서는 보통 /var/log/auth.log를 사용합니다. 이 컨테이너에서는 2단계에서 설정한 전용 로그를 사용합니다. labex 사용자로 최근 sudo 활동을 확인합니다.

sudo tail -n 10 /var/log/sudo.log

이 명령은 sudo 관련 로그 항목 중 최근 10개를 표시합니다. 출력에는 타임스탬프, 사용자 이름, sudo로 실행한 명령이 포함되어야 합니다.

sudo 보안 모범 사례

sudo 권한을 관리할 때는 다음 모범 사례를 따릅니다.

  • 최소 권한 원칙: 사용자에게는 작업을 수행하는 데 필요한 최소한의 권한만 부여합니다.

  • 구체적인 명령 지정: sudo 전체 액세스 권한을 부여하는 대신 사용자가 실행할 수 있는 명령을 정확히 지정합니다.

  • 비밀번호 입력 요구: 민감한 작업에서는 사용자가 sudo를 사용할 때 비밀번호를 입력하도록 설정합니다.

  • 정기적인 감사: sudo 로그와 sudoers 파일을 주기적으로 검토해 올바르게 설정되어 있는지 확인합니다.

  • 불필요한 액세스 권한 제거: 더 이상 높은 권한이 필요하지 않은 사용자는 sudo 그룹에서 즉시 제거합니다.

sudo 액세스 권한 제거하기

2단계에서 이미 trusted_advisor를 sudo 그룹에서 제거했습니다. 남아 있는 명령별 액세스 권한도 취소하려면 해당 규칙을 삭제합니다.

sudo EDITOR=vim visudo

Esc 키를 누르고 /^trusted_advisor를 입력한 다음 Enter 키를 눌러 규칙을 찾습니다. dd를 눌러 해당 줄 전체를 삭제합니다.

trusted_advisor ALL=(ALL) NOPASSWD: /bin/cp, /bin/mv

Defaults logfile 줄은 그대로 둡니다. :wq를 입력하고 Enter 키를 눌러 저장한 다음 종료합니다. 그룹 구성을 확인합니다.

groups trusted_advisor

출력에 sudo가 포함되지 않아야 합니다.

취소된 sudo 액세스 테스트하기

이제 사용자가 sudo로 더 이상 명령을 실행할 수 없는지 확인합니다.

su - trusted_advisor

메시지가 표시되면 비밀번호를 입력합니다.

sudo로 명령을 실행해 봅니다.

sudo -n ls /root

이제 trusted_advisor is not in the sudoers file 메시지가 표시되어야 합니다. 명령은 실패해야 합니다.

trusted_advisor 사용자 세션을 종료합니다.

exit

sudo 액세스 권한 다시 추가하기

이 실습에서는 사용자를 sudo 그룹에 다시 추가합니다.

sudo usermod -aG sudo trusted_advisor

사용자가 sudo 그룹에 다시 포함되었는지 확인합니다.

groups trusted_advisor

이제 그룹 목록에 "sudo"가 포함되어야 합니다.

요약

이 실습에서는 Linux 사용자 관리와 권한 제어의 기본 기술을 익혔습니다. 다음 개념과 작업을 직접 연습했습니다.

  1. 사용자 만들기: adduser 명령으로 새 사용자 계정을 만드는 방법을 배웠습니다.

  2. sudo 권한 부여하기: 사용자를 sudo 그룹에 추가해 관리자 권한을 부여하는 방법을 익혔습니다.

  3. sudo 액세스 제한하기: sudoers 파일에서 사용자가 실행할 수 있는 명령을 제한해 최소 권한 원칙을 적용했습니다.

  4. sudo 로깅 및 모니터링: sudo 활동이 로그에 기록되는 방식과 보안을 위해 로그를 모니터링하는 일이 중요한 이유를 살펴봤습니다.

  5. sudo 액세스 관리하기: 필요에 따라 사용자에게 sudo 권한을 부여하거나 제거하는 방법을 배웠습니다.

이러한 기술은 Linux 시스템 관리와 보안의 기본입니다. 사용자 권한을 적절히 관리하면 시스템의 무결성이나 보안을 해치지 않으면서 사용자에게 필요한 리소스만 제공할 수 있습니다.