사용자와 사용자 그룹

Chooooo·2025년 2월 8일
0

리눅스 정리

목록 보기
4/10

사용자

리눅스는 여러 사용자가 동시에 로그인할 수 있는 멀티 유저 시스템(multi-user system)이다.
여기서 사용자사용하는 사람이 아니라, 사용자(user)라는 이름의 계정(account)을 의미한다.

  • 한 사람이 여러 계정을 소유할 수 있고, 여러 계정을 동시에 사용할 수도 있다.

다중 사용자 시스템으로 설계되었다는 것은, 단순히 여러 사람이 동시에 시스템을 사용할 수 있다는 것 이상의 의미를 가진다. 각 사용자는 독립된 작업 환경과 권한을 가지며, 이를 통해 시스템의 보안과 안정성을 유지한다.

사용자의 종류

리눅스는 실제 사람이 사용하는 사용자 말고도 여러 사용자를 등록해 시스템을 운용한다. 리눅스의 사용자는 크게 3가지로 나눌 수 있다.

root 사용자

root 사용자는 리눅스 시스템의 모든 권한을 가진 관리자 계정. 시스템 내 모든 파일에 대한 일기/쓰기/실행 권한이 있으며, 시스템의 주요 설정 변경, 패키지 관리, 시스템 전원 관리 및 리부팅 등을 수행할 수 있다. 즉, 절대적인 권한을 가짐.

  • 시스템 설정 파일 수정
  • 다른 사용자의 파일 접근 및 수정
  • 시스템 전반의 보안 정책 설정
  • 사용자 계정 생성 및 관리
  • 시스템 업데이트 및 패키지 관리

시스템 사용자

시스템 사용자는 리눅스 시스템에서 만든 사용자. 백그라운드 서비스나 데몬(daemon)을 실행하는 등 특정 기능을 수행한다. (특정 서비스나 프로세스를 실행하기 위해 존재)
그래서 보통 리눅스를 설치할 때 또는 특정 드라이버나 프로그램을 설치할 때 자동으로 추가된다. 시스템 관리 용이라서 일반적으로 로그인이 불가능하다.

  • 데몬은 특정 서비스를 제공하기 위해 시스템을 부팅할 때 자동으로 실행돼 백그라운드에서 작동하는 프로세스를 의미한다.

일반 사용자

일반 사용자는 root 사용자, 시스템 사용자를 제외한 모든 사용자를 의미한다. 시스템에 로그인해 리눅스를 사용하는 일반적인 사용자. 제한된 권한을 가짐

  • 자신의 홈 디렉토리에서만 파일을 생성하고 수정할 수 있다.
  • 시스템 설정을 변경하기 위해서는 sudo 명령어를 통해 임시로 관리자 권한을 얻어야 한다.
  • 다른 사용자의 파일에 접근할 수 없다.

왜 사용자를 구분 ?

리눅스가 사용자를 구분하는 이유 중 가장 중요한 이유는 보안을 강화하고 시스템의 효율성을 높이기 위함이다. 한 리눅스 시스템 안에는 여러 사용자가 존재한다. 시스템의 보안 수준을 높이려면 사용자별로 알맞은 권한을 부여하고, 권한에 맞는 작업만 허용해야 한다. 그러기 위해 목적별로 사용자를 나누고, root 사용자를 비롯해 기능별 시스템 사용자를 두어 관리하는 것이다.

root 사용자

root 사용자는 시스템 내 모든 파일에 대해 읽기/쓰기/실행 권한이 있어서 시스템의 모든 설정을 변경할 수 있다. 또한, 시스템 업데이트, 주요 소프트웨어 및 패키지 설치/업데이트/제거, 시스템 복구 등 시스템에 중요한 일을 모두 담당한다.

-> 이처럼 root 사용자는 권한이 막강해서 비밀번호 유출 등으로 권한이 탈취되면 시스템 전체가 탈취당했다고 해도 과언이 아니다. 그만큼 root 사용자는 보안에 각별히 신경써야 한다.

시스템 외부에서 root 사용자로 로그인하지 못하게 설정하라.

root 사용자로 로그인하지 못하게 설정하면 보안은 한층 더 단단해진다.
-> root 사용자가 네트워크를 통해 SSH로 접속할 수 있게 설정한다면 악성 코드나 해커에게 시스템에 로그인할 수 있는 방법을 제공하는 것이나 마찬가지. 따라서 root 사용자가 SSH로 로그인하는 것을 제한하는 것이 좋다.

root 사용자 권한으로 명령을 실행하는 방법

SSH로 접속할 때 root 사용자로 로그인이 불가능 하다면, root 사용자의 권한이 필요한 작업은 어떻게 수행해야 하는가 ?
-> 리눅스는 일반 사용자로 로그인한 상태에서 root 사용자의 권한을 사용할 수 있는 3가지 방법을 제공한다.

su 명령어 사용

사용자를 전환하는 su(switch user 또는 substitue user) 명령어를 사용하는 방법이다.
기본 문법 : su [옵션] [-] [사용자]

su 명령어는 현재 세션에서 다른 사용자로 전환할 수 있게 해준다. root로 전환하면 모든 관리자 권한을 얻게 된다. su 명령어를 단독으로 사용하면 root 사용자로 전환을 시도하며, 이때 root 비밀번호가 필요하다. 다른 사용자로 전환하려면 su username 형식으로 사용한다.

사용자 앞 하이픈(-)은 선택사항이다. 하이픈을 입력하면 마치 새로운 사용자가 쉘에 로그인한 것처럼 현재 작업 디렉토리도 새로운 사용자의 홈 디렉토리로 변경된다. 또한 환경변수도 새로운 사용자의 환경변수로 설정된다. 하이픈을 입력하지 않으면 현재 사용자의 현재 작업 디렉토리와 환경 변수를 그대로 유지한다.

  • 새로운 사용자로 어떤 작업을 할지에 따라 하이픈 입력 여부를 잘 결정해야 한다.

su 명령어는 완전한 사용자 전환을 제공하지만, 이는 root 비밀번호 노출될 위험이 있어 보안상 권장되지 않는다.

sudo(Superuser Do) 명령어

기본 문법 : sudo [옵션] 명령어
sudo는 현재 사용자 계정을 유지하면서 일시적으로 관리자 권한을 얻을 수 있게 해준다. sudo는 특정 명령어에 대해서만 관리자 권한을 부여하므로, su보다 더 안전한 방식.

sudo를 사용할 때는 현재 사용자의 비밀번호를 입력하며, 해당 사용자가 sudo 권한을 가지고 있어야 한다. 이 권한은 /etc/sudoers 파일에서 관리된다. sudo는 명령어 실행 기록이 남기 때문에 시스템 관리 측면에서도 유용하다.

  • 사용자 편의를 고려해 인증에 한 번 성공하면 sudo 명령어를 다시 실행하더라도 일정 시간동안 비밀번호를 다시 묻지 않는다.

runuser 명령어 사용

runuser는 특정 사용자의 권한으로 명령을 실행할 수 있게 해주는 명령어이다. su와 비슷하지만, root 사용자만 실행할 수 있으며 더 안전한 방식을 제공한다. runuser는 PAM(Pluggable Authentication Modules) 인증을 거치지 않고 직접 전환하므로, 보안 정책이 엄격한 환경에서 유용하다.

runuser는 root 사용자가 다른 사용자의 권한으로 명령을 실행할 때 사용하는 명령어이다.
1. root 사용자만 실행할 수 있다.
2. 비밀번호 입력이 필요하지 않다.
3. PAM 인증을 사용하지 않는다.

일반적인 사용 상황은 자동화된 스크립트나 시스템 서비스에서 특정 사용자 권한으로 명령을 실행해야 할 때이다. 예를 들어, 시스템 백업 스크립트가 root로 실행되지만 특정 작업은 다른 사용자 권한으로 수행해야 할 때 runuser를 사용할 수 있다.

옵션설명
-l(—-login)다른 사용자의 쉘을 시작한다.
-g(—group)다른 사용자의 기본 그룹을 지정한다.
-s shell다른 사용자의 기본 쉘을 지정한다.
-c command다른 사용자로 실행할 명령을 지정한다.
  • sudo를 통한 runuser 사용은 가능하지만, 권장되지 않는다. root 사용자가 직접 사용하도록 설계되었음

따라서 일반적인 관리 작업에는 sudo를 사용하고, runuser는 자동화된 시스템 작업이나 서비스에서 특정 사용자 권한이 필요한 경우에 사용하는 것이 좋다.(runuser는 주로 시스템의 감사 및 책임 추적을 위해 사용되기 때문 ?? 어떤 작업이 어떤 사용자 권한으로 실행되었는지 정확히 기록하는 것이 중요해서 runuser를 사용한다고 생각하자)

권한 관리의 일반적인 best practice

일상적인 시스템 관리 작업에는 sudo를 사용하는 것이 권장된다. sudo는 명령어 실행 기록을 남기고, 특정 명령어에 대해서만 권한을 부여할 수 있어 보안성이 높음.

자동화된 시스템 작업이나 서비스 실행의 경우:
시스템 서비스나 데몬 프로세스는 전용 시스템 사용자 계정을 생성하여 실행한다. 예를 들어, 웹 서버는 www-data 사용자로, 데이터베이스는 mysql 사용자로 실행된다. 이러한 서비스를 실행하거나 관리할 때 runuser를 사용하여 해당 시스템 사용자의 권한으로 전환한다.

sudo 명령어의 실행 권한 부여

sudo 명령어의 실행 권한은 /etc/sudoers 파일을 통해 관리된다.가장 일반적인 방법은 사용자를 sudo 권한을 가진 그룹에 추가하는 것이다.

Ubuntu와 같은 많은 리눅스 배포판에서는 sudo 또는 wheel 그룹이 이러한 목적으로 사용된다.

사용자를 sudo 그룹에 추가하는 방법 :

usermod -aG sudo username

우분투는 설치할 때 추가한 기본 사용자를 sudo 그룹에 포함한다. /etc/sudoers 파일에는 sudo 사용자 그룹이 실행하는 모든 명령을 허용하도록 설정돼 있다. 그래서 우분투를 설치할 때 추가한 사용자는 sudo 명령어를 사용할 권한이 있다.

사용자 그룹

사용자 그룹은 여러 사용자를 편리하게 관리하기 위한 도구이다. 각 사용자는 하나 이상의 사용자 그룹에 소속된다.

사용자 그룹 단위로 파일 접근 권한을 관리할 수 있다. 어떤 사용자 그룹에 파일이나 디렉토리에 대한 권한을 부여했다면 해당 사용자 그룹에 속한 사용자에게는 사용자 그룹에 부여한 권한이 그대로 적용된다. 또한 특정 사용자 그룹의 내부 사용자에게만 정보를 공유할 수도 있다.

사용자 정보를 /etc/passwd 파일에 저장하는 것처럼 사용자 그룹 정보는 /etc/group 파일에 저장한다. /etc/group 파일을 cat 명령어로 조회하면 시스템에 등록된 사용자 그룹 목록과 정보를 확인할 수 있다.

사용자 & 사용자 그룹 다루기

사용자 추가 및 삭제

추가 : adduser

기본 형식 : adduser [옵션] 사용자_이름
adduser 명령어는 새로운 사용자를 시스템에 추가한다. 사용자 생성 과정을 대화형으로 진행하며, 홈 디렉토리 생성과 기본 설정 파일 복사 등을 자동으로 처리함.
sudo adduser username

  • 그룹에 사용자를 추가할 때는 --ingroup 옵션으로 사용자 그룹을 지정한다.

제거 : deluser

기본 형식 : deluser [옵션] 사용자_이름
deluser는 시스템에서 사용자 제거. 기본적으로 사용자의 홈 디렉토리는 유지되며, --remove-home 옵션을 사용하면 홈 디렉토리까지 함께 삭제할 수 있다.

sudo deluser username
sudo deluser --remove-home username

사용자 그룹 추가 및 삭제

추가 및 삭제 : addgroup , delgroup

addgroup 명령어로 새로운 그룹 생성. 그룹은 여러 사용자에게 공통된 권한을 부여하는데 사용된다.
sudo addgroup groupname
delgroup 명령어로 그룹 삭제.
sudo delgroup groupname

사용자 비밀번호 변경하기

passwd 명령어는 사용자 비밀번호를 변경한다. 일반 사용자는 자신의 비밀번호만 변경할 수 있고, root 사용자는 모든 사용자의 비밀번호를 변경할 수 있다.

# 자신의 비밀번호 변경
passwd

# root가 다른 사용자의 비밀번호 변경
sudo passwd username
profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글