리눅스 사용자 및 그룹 관리 접근 제어와 권한 부여

김명주·2025년 1월 1일

사용자와 그룹의 역할

기능을 수행하는데 있어서 모두가 root 권한을 사용해도 문제가 없지만, 보안 취약점이 발견되거나 등의 문제가 발생했을 때 피해를 최소한으로 줄이기 위해선 사용자랑 그룹의 권한을 이용해 제어해 줘야 한다.

  • 시스템 자원에 대한 접근 제어
  • 보안 유지

시스템 사용자와 일반 사용자

  • 사용자 : 자원에 접근할 수 있는 주체로 각 사용자는 고유한 ID를 가진다. (UID)

    • 시스템 사용자 : 시스템 운영에 필요한 특별한 권한을 가진 사용자. ex) root
    • 일반 사용자 : 개인적인 작업을 수행하는 일반적인 권한을 가진 사용자
  • 그룹 : 사용자들을 묶어 권한을 공통으로 관리할 수 있다.

    • 시스템 그룹 : 시스템 운영에 필요한 특정 기능이나 서비스와 관련된 그룹
    • 사용자 그룹 : 일반 사용자들을 관리하고 권한을 부여하기 위해 생성된 그룹

사용자와 그룹의 관계

사용자와 그룹은 리눅스 시스템에서 밀접한 관계를 가지고 있다.
각 사용자는 하나의 주 그룹(Primary group)에 속하며, 여러 보조 그룹의 멤버가 될 수 있다.
사용자와 그룹을 이용해 필요한 권한을 적합하게 부여해야 안전하게 리눅스를 사용할 수 있다.

사용자
│
├── 시스템 사용자
│   └── root (주 그룹: root)
│
└── 일반 사용자
    ├── user1
    │   ├── 주 그룹: users
    │   └── 보조 그룹: docker, audio
    │
    └── user2
        ├── 주 그룹: users
        └── 보조 그룹: video, ftp, games

그룹
├── 시스템 그룹: root
└── 사용자 그룹: users, docker, audio, video, ftp, games

sudo와 su 명령어

sudo (Superuser Do): 일반 사용자가 root 권한 또는 다른 계정의 권한으로 명령을 실행할 수 있게 해주는 명령어

  • 특정 명령어를 root 권한으로 실행할 때 사용
  • 사용자의 비밀번호를 입력하여 인증
  • 보안상 더 안전하며, 명령어 별로 권한을 세밀하게 제어할 수 있다.
  • 주요 sudo 파라미터 :
    • -u [사용자명] : 지정한 사용자의 권한으로 명령을 실행한다
    • -i : 대상 사용자의 로그인 셸을 시작한다
    • -s : 셸을 실행하지 않고 지정된 명령만 실행한다.
    • -l : 현재 사용자의 sudo 권한을 나열한다.
    • -E : 현재 사용자의 환경변수를 유지한 채로 sudo 명령을 실행한다.
  • 사용 예시
    • sudo -u newuser whoami : newuser의 권한으로 whoami 명령을 실행
    • sudo -i -u postgres : postgres 사용자의 로그인 셸을 시작
    • sudo -s ls -l /root : root 권한으로 /root 디렉토리의 내용을 나열
    • sudo -l : 현재 사용자의 sudo 권한을 확인

su (Switch User): 다른 사용자 계정으로 전환하는 명령어. 주로 root 계정으로 전환할 때 사용

  • root 계정으로 전환하여 모든 명령을 root 권한으로 실행할 수 있다.
  • root 비밀번호를 알아야 사용할 수 있다.
  • 보안상 주의가 필요하며, 일반적으로 sudo 를 사용하기를 권장
su
# 또는
su - root

사용자 및 그룹관리 명령어

사용자 계정 생성 및 관리

useradd: 새로운 사용자 계정을 생성하는 명령어

sudo useradd [옵션] 사용자명

주요 옵션 :

  • -m : 사용자의 홈 디렉터리를 생성
  • -s : 사용자의 기본 셸 지정
  • -G : 사용자를 추가 그룹에 포함
sudo useradd -m -s /bin/bash -G sudo newuser

# newuser라는 사용자를 추가할건데, 
#홈 디렉터리도 생성하고, 
#이 사용자는 bash 쉘을 기본으로 사용하고 sudo 라는 그룹에 이 사용자를 조인함

usermod: 기존 사용자 계정의 속성을 수정하는 명령어

sudo usermod [옵션] 사용자명

주요 옵션 :

  • -l : 사용자의 로그인 이름을 변경
  • -g : 사용자의 기본 그룹을 변경
  • -G : 사용자의 보조 그룹을 변경
  • -a : -G 옵션과 함께 사용하여 기존 그룹 멤버십을 유지하면서 새 그룹 추가

userdel: 사용자 계정을 삭제하는 명령어

sudo userdel [옵션] 사용자명

주요 옵션:

  • -r : 사용자의 홈 디렉터리와 메일 스풀을 함께 삭제
  • -f : 사용자가 로그인 중이거나 실행 중인 프로세스가 있어도 강제로 삭제

그룹 관리

groupadd: 새로운 그룹을 생성하는 명령어

sudo groupadd [옵션] 그룹명

주요 옵션 :

  • -g : 그룹의 GID(Group ID)를 지정
  • -r : 시스템 그룹을 생성
sudo groupadd -g 1001 developers
# developers라는 그룹을 생성하는데 그 그룹의 GID는 1001로 지정

groupmod: 기존 그룹의 속성을 수정하는 명령어

sudo groupmod [옵션] 그룹명

주요 옵션 :

  • -n : 그룹의 이름 변경
  • -g : 그룹의 GID 변경

groupdel: 그룹을 삭제하는 명령어

sudo groupdel 그룹명
sudo groupdel programmers

파일 및 디렉터리 권한 관리

권한 구조

리눅스에서 파일과 디렉터리에는 소유자, 그룹, 기타 사용자의 권한을 설정할 수 있다.

  • 소유자 : 파일이나 디렉터리의 소유자로, 해당 리소스에 대한 모든 권한을 가진다.
  • 그룹 : 파일이나 디렉터리에 할당된 그룹의 멤버들이 가지는 권한을 정의한다.
  • 기타 사용자 : 소유자나 그룹에 속하지 않은 모든 사용자에 대한 권한을 설정한다.

파일 권한 확인

ls -l 명령어로 파일 및 디렉터리 권한을 확인할 수 있다.
다음과 같은 출력을 볼 수 있다.

첫번째 부분의 -rw-r--r--는 파일의 권한을 나타낸다.
첫 문자는 파일 유형을, 그 뒤 9개 문자는 소유자, 그룹, 기타 사용자의 읽기(r), 쓰(w)기, 실행 권한(x)을 나타낸다

  • - : 일반 파일
  • d : 디렉터리
  • l : 심볼릭 링크
  • c : 문자 디바이스 파일
  • b : 블록 디바이스 파일
  • p : 명명된 파이프
  • s : 소켓 파일

권한 설정

  • chmod: 파일이나 디렉토리의 권한을 변경하는 명령어
      1. 심볼릭 모드 :
      • 사용자 지정 : u(사용자), g(그룹), o(기타), a(모두)
      • 연산자 : +(추가), -(제거), =(설정)
      • 권한 : r(읽기), w(쓰기), x(실행)
      • 예 : chmod u+x file.tx <- 소유자에게 실행 권한 추가
      1. 8진수 모드:
      • 3자리 숫자로 표현 : 4(읽기), 2(쓰기), 1(실행)
      • 각 자리는 사용자, 그룹, 기타 순서
      • 예 : chmod 644 file.txt <- 소유자 읽기/쓰기 권한부여, 그룹과 기타 읽기만
  • chown : 파일이나 디렉토리의 소유자나 그룹을 변경하는 명령어
    • chown user:group file.txt <- 파일의 소유자를 user로, 그룹을 group으로 변경
    • -R 옵션을 사용하여 디렉터리와 그 하위 파일들의 소유권을 재귀적으로 변경할 수 있다.
  • umask: 새로 생성되는 파일이나 디렉토리의 기본 권한을 설정하는 명령어
profile
개발자를 향해 달리는 사람

0개의 댓글