리눅스 사용자 그룹 및 파일 권한

LinuxBeginner
지금 연습하기

소개

리눅스는 다중 사용자 운영체제입니다. 이는 여러 사용자가 동시에 동일한 리눅스 컴퓨터를 사용할 수 있음을 의미하며, 각 사용자는 자신만의 개인 공간과 파일을 가지는 동시에 일부 시스템 자원을 공유합니다. 이 실습에서는 시스템 관리와 보안의 핵심 개념인 리눅스 사용자 관리와 파일 권한의 기초를 소개합니다.

이 과정은 학습과 실습을 돕기 위해 단계별 지침을 제공하는 가이드 실습입니다. 각 단계를 주의 깊게 따라가며 직접 경험을 쌓아보세요. 통계에 따르면 이 실습은 초급 수준으로, 92%의 완료율과 학습자들로부터 99%의 긍정적인 평가를 받았습니다.

현재 사용자 정보 확인하기

리눅스에서 각 사용자는 고유한 사용자 이름을 가집니다. 먼저 현재 어떤 사용자로 로그인되어 있는지 확인하는 것부터 시작해 보겠습니다.

터미널을 열고 다음 명령어를 입력하세요:

whoami

whoami 명령어는 현재 사용자의 이름을 표시하는 간단한 도구입니다.

다음과 유사한 출력 결과가 나타날 것입니다:

labex:project/ $ whoami
labex

이는 현재 "labex"라는 사용자로 로그인되어 있음을 나타냅니다.

새로운 사용자 생성하기

이제 새로운 사용자를 만들어 보겠습니다. 리눅스에서 사용자를 생성하려면 관리자 권한이 필요합니다. 여기서는 sudo 명령어를 사용하여 이 권한을 얻을 것입니다.

sudo는 "Superuser Do"의 약자로, 일반 사용자가 슈퍼유저 (또는 root 사용자) 의 권한으로 명령을 실행할 수 있게 해줍니다.

사용자를 생성하기 전에 기본 그룹 (Primary Group) 의 개념을 살펴보겠습니다. 리눅스에서 모든 사용자는 하나의 기본 그룹에 속하며, 여러 개의 보조 그룹 (Secondary Group) 에 속할 수 있습니다. 기본 그룹은 보통 사용자가 생성하는 파일의 소유 그룹으로 지정됩니다.

adduser 명령어로 새 사용자를 생성하면, 시스템은 자동으로 사용자 이름과 동일한 이름의 기본 그룹을 생성합니다. 이를 사용자 개인 그룹 (User Private Group, UPG) 방식이라고 합니다.

다음 명령어를 입력하여 "jack"이라는 이름의 새 사용자를 생성하세요:

sudo adduser jack

이 명령어는 다음과 같은 작업을 수행합니다:

  1. "jack"이라는 이름의 새 사용자 생성
  2. "jack"이라는 이름의 새 그룹 (기본 그룹) 생성
  3. 사용자 "jack"을 "jack" 그룹의 기본 구성원으로 추가
  4. /home/jack 위치에 jack 의 홈 디렉토리 생성

jack 의 비밀번호를 설정하고 추가 정보를 입력하라는 메시지가 나타납니다. 비밀번호는 간단하게 (예: "password") 설정하고, 나머지 정보는 엔터 키를 눌러 기본값을 사용하면 됩니다.

참고: 비밀번호를 입력할 때 화면에 아무런 글자도 표시되지 않는데, 이는 보안을 위한 정상적인 동작입니다. 당황하지 말고 비밀번호를 입력한 뒤 엔터를 누르세요.

사용자 생성이 완료되면, jack 의 홈 디렉토리가 생성되었는지 확인하고 jack 의 기본 그룹 정보를 체크해 보겠습니다:

ls /home
id jack

id 명령어는 jack 의 사용자 ID(UID), 기본 그룹 ID(GID), 그리고 소속된 모든 보조 그룹을 보여줍니다.

사용자 그룹 탐색하기

리눅스에서 사용자 그룹은 권한 관리를 위해 여러 사용자를 조직화하는 방법입니다. 각 사용자는 하나의 기본 그룹을 가지며 여러 보조 그룹에 속할 수 있습니다. 현재 사용자가 속한 그룹들을 확인해 봅시다:

id labex

다음과 같은 출력을 볼 수 있습니다:

uid=5000(labex) gid=5000(labex) groups=5000(labex),27(sudo),121(ssl-cert),5002(public)

이 결과의 의미는 다음과 같습니다:

  • labex 사용자의 ID(UID) 는 5000 입니다.
  • labex의 기본 그룹 이름도 labex이며 그룹 ID(GID) 는 5000 입니다.
  • labexsudo, ssl-cert, public과 같은 여러 보조 그룹에 속해 있습니다.

이제 시스템에 존재하는 모든 그룹을 확인해 보겠습니다:

cat /etc/group | sort

cat 명령어는 파일 내용을 출력하고, /etc/group은 그룹 정보가 저장된 파일입니다. | sort는 출력 내용을 알파벳 순서로 정렬합니다.

labex와 관련된 그룹만 골라내려면 다음 명령어를 사용하세요:

cat /etc/group | grep -E "labex"

grep은 강력한 검색 도구입니다. 이 명령은 그룹 파일에서 "labex"라는 문자열이 포함된 줄만 찾아줍니다.

새 그룹 생성 및 사용자 추가하기

"developers"라는 새 그룹을 만들고, 방금 생성한 사용자 "jack"을 이 그룹에 추가해 보겠습니다.

먼저, 새 그룹을 생성합니다:

sudo groupadd developers

그 다음, jack 을 developers 그룹에 추가합니다:

sudo usermod -aG developers jack

usermod 명령어는 사용자 계정 정보를 수정합니다. -aG 옵션은 기존 그룹 목록을 유지하면서 새로운 보조 그룹을 추가한다는 의미입니다.

jack 이 developers 그룹의 멤버가 되었는지 확인하려면 다음을 입력하세요:

groups jack

jack 의 그룹 목록에 "developers"가 포함되어 있는 것을 확인할 수 있습니다.

사용자를 sudo 그룹에 추가하기

이제 사용자 jack에게 sudo 그룹에 추가하여 관리자 권한을 부여해 보겠습니다. 그 전에 왜 이 작업이 중요한지 이해해 봅시다:

사용자를 sudo 그룹에 추가하면 해당 사용자는 슈퍼유저 (root) 권한으로 명령을 실행할 수 있게 됩니다. 이는 다음과 같은 이유로 유용합니다:

  1. 보안: root 사용자로 직접 로그인하지 않고도 관리 작업을 수행할 수 있어 보안 위험을 줄입니다.
  2. 책임 추적: 사용자가 sudo 를 사용할 때 그 내역이 기록되므로, 관리 작업에 대한 감사 추적이 가능합니다.
  3. 편의성: 가끔 발생하는 관리 작업을 위해 매번 root 계정으로 전환할 필요가 없습니다.
  4. 세밀한 제어: sudo 설정을 통해 특정 사용자가 특정 명령만 높은 권한으로 실행하도록 제한할 수 있습니다.

jack 을 sudo 그룹에 추가하려면 다음 명령어를 사용하세요:

sudo usermod -aG sudo jack

이 명령어는 usermod를 사용하여 계정을 수정합니다. -aG 옵션은 "그룹에 추가 (append)"를 의미하므로, jack 을 다른 그룹에서 제거하지 않고 sudo 그룹에만 추가합니다.

추가한 후에는 다음 명령어로 그룹 멤버십을 확인합니다:

sudo groups jack

jack 의 그룹 목록에 sudo가 표시되어야 합니다.

jack 을 sudo 그룹에 추가함으로써 시스템 관리 작업을 수행할 수 있는 능력을 부여했습니다. 하지만 큰 권한에는 큰 책임이 따른다는 점을 명심해야 합니다. sudo 권한을 가진 사용자는 시스템 전체에 영향을 줄 수 있으므로 신뢰할 수 있어야 하며 자신의 행동이 가져올 결과를 잘 이해하고 있어야 합니다.

파일 권한 및 소유권 이해와 조작

리눅스에서 파일 권한과 소유권은 시스템 보안의 핵심입니다. 이 개념들을 살펴보고 조작하는 방법을 배워보겠습니다.

  1. 먼저, /home 디렉토리의 현재 권한 상태를 살펴봅시다:
ls -l /home

다음과 유사한 출력이 나타납니다:

total 8
drwxr-xr-x 2 jack  jack  4096 Jul 30 10:00 jack
drwxr-xr-x 5 labex labex 4096 Jul 30 09:55 labex

이 내용의 의미를 분석해 보겠습니다:

  • 첫 번째 문자는 파일 유형을 나타냅니다 (d는 디렉토리, -는 일반 파일).
  • 다음 9 개의 문자는 소유자, 그룹, 기타 사용자 순서대로의 권한을 나타냅니다.
  • r은 읽기 (read), w는 쓰기 (write), x는 실행 (execute) 권한을 의미합니다.
  • 권한 문자 뒤에 나오는 이름은 파일 소유자이며, 그 다음은 소유 그룹입니다.
  1. 이제 새 파일을 생성하고 소유권을 변경해 보겠습니다:
touch /home/labex/testfile
ls -l /home/labex/testfile
sudo chown jack:jack /home/labex/testfile
ls -l /home/labex/testfile

touch 명령어는 빈 파일을 생성합니다. 처음에는 labex 가 소유자로 지정되지만, chown 명령어를 사용하여 사용자 소유자와 그룹 소유자를 모두 jack 으로 변경했습니다.

왜 소유권을 변경할까요? 리눅스에서 파일 소유자는 해당 파일에 대해 특별한 권한을 가집니다. 소유권을 변경함으로써 jack 에게 이 파일에 대한 완전한 제어권을 부여한 것입니다.

  1. 마지막으로 파일의 권한을 수정해 보겠습니다:
sudo chmod 750 /home/labex/testfile
ls -l /home/labex/testfile

chmod 명령어는 파일의 권한을 변경합니다. 숫자 750 은 권한을 설정하는 약식 표현입니다:

  • 7 (소유자): 읽기 (4) + 쓰기 (2) + 실행 (1) = 7
  • 5 (그룹): 읽기 (4) + 실행 (1) = 5
  • 0 (기타 사용자): 권한 없음

이 권한 설정의 의미는 다음과 같습니다:

  • 소유자 (jack) 는 파일을 읽고, 쓰고, 실행할 수 있습니다.
  • jack 그룹의 구성원은 파일을 읽고 실행할 수 있습니다.
  • 그 외의 다른 사용자들은 이 파일에 대해 아무런 권한도 갖지 못합니다.

왜 이렇게 설정할까요? 이는 소유자에게는 모든 권한을 주고, 그룹에게는 제한된 접근을 허용하며, 그 외의 사람들은 차단하는 일반적인 설정 방식입니다. 이는 사용성과 보안 사이의 균형을 맞춘 것입니다.

파일 권한과 소유권을 이해하는 것은 리눅스에서 매우 중요합니다. 이를 통해 누가 파일을 읽고, 수정하고, 실행할 수 있는지 제어할 수 있으며, 이는 시스템 보안과 사용자 프라이버시의 근간이 됩니다. 리눅스를 계속 사용하다 보면 파일과 디렉토리의 접근 권한을 관리하기 위해 이 명령어들을 자주 사용하게 될 것입니다.

요약

축하합니다! 리눅스 사용자 그룹 및 파일 권한 실습을 마쳤습니다. 이번 실습을 통해 다음 내용들을 학습했습니다:

  1. 사용자 정보 확인 방법
  2. 새 사용자 생성 및 기본 그룹의 개념 이해
  3. 사용자 그룹 탐색 및 수정
  4. 새 그룹 생성 및 사용자 추가
  5. 사용자에게 sudo 권한 부여
  6. 파일 권한 확인 및 이해
  7. 파일 소유권 변경
  8. 파일 권한 수정

이러한 기술은 리눅스 환경에서 사용자를 관리하고 파일을 안전하게 보호하는 데 필수적인 기초 지식입니다. 리눅스 학습을 계속해 나가면서 시스템 관리와 보안을 다룰 때 이 개념들이 매우 중요하다는 것을 실감하게 될 것입니다.