본문으로 건너뛰기
홈
기술
기술 전체
프로그래밍68
컴퓨터 과학63
AI48
웹 개발36
인프라33
데이터31
소프트웨어 공학18
소개
← 목록으로인프라 › 운영체제 › Linux

[Linux]사용자계정관리

목차

사용자 계정 관리

Linux는 사용자와 그룹으로 파일 접근 권한을 구분한다. 일반 계정으로 작업하고, 시스템 설정을 바꿀 때만 sudo로 필요한 명령을 실행한다. 슈퍼유저(root)는 시스템 전체에 대한 권한을 가지므로 계정과 권한을 바꾸기 전에는 대상 이름을 확인해야 한다.

계정 만들기

메모의 useradd -m -G sudo gun에서 -m은 홈 디렉터리를 만들고, -G는 보조 그룹을 지정한다. Ubuntu에서 sudo 그룹에 권한을 부여하도록 설정된 환경을 가정한 예시다. 모든 Linux 배포판에서 그룹 이름과 sudo 정책이 같은 것은 아니다. useradd 매뉴얼의 옵션 설명을 참고한다.

# gun 계정과 홈 디렉터리 생성
sudo useradd -m gun
sudo passwd gun

# 관리 권한이 필요한 계정에만 보조 그룹 추가
sudo usermod -aG sudo gun
id gun

passwd는 새 계정의 비밀번호를 대화식으로 설정한다. usermod -aG의 -a는 기존 보조 그룹을 유지하면서 추가한다는 뜻이다. -a를 빠뜨린 채 -G만 사용하면 다른 보조 그룹 목록이 바뀔 수 있다. 그룹을 바꾼 뒤에는 새 로그인 세션에서 id gun 또는 groups gun으로 결과를 확인한다. usermod 매뉴얼도 함께 볼 수 있다.

전환과 권한 확인

whoami             # 현재 사용자
id                 # 현재 UID와 그룹
groups gun         # gun 계정의 그룹
su - gun           # gun으로 로그인 셸 시작
sudo -l            # 현재 계정에 허용된 sudo 명령 확인

su - gun은 대상 계정의 로그인 환경을 읽는다. sudo 권한은 단순히 그룹 이름만으로 결정되지 않고 시스템의 sudo 정책에 따라 결정된다. /etc/sudoers를 확인할 수는 있지만 직접 편집해야 한다면 구문 검사 기능이 있는 visudo를 사용한다.

계정 삭제 전 확인

원래 메모의 userdel gun은 계정 정보만 지우며 홈 디렉터리는 남을 수 있다. 홈 디렉터리와 메일 스풀도 함께 제거하려는 경우에는 userdel -r gun을 사용할 수 있다. 이 명령은 실제 사용자 데이터를 삭제하므로 필요한 파일을 백업하고, getent passwd gun으로 계정과 홈 디렉터리 경로를 먼저 확인한다. 별도로 rm -rf /home/...를 입력하는 방법은 경로 오타로 다른 데이터를 지울 수 있어 권장하지 않는다. userdel 매뉴얼에 삭제 범위와 제약이 정리되어 있다.

메모에 있던 sudo shutdown -h now는 시스템 종료, sudo shutdown -r now는 재시작이다. 계정 관리 명령과 별개로 시스템 전체에 영향을 주므로 원격 서버에서 실행할 때는 접속이 끊기는 영향을 고려한다.

계정 정보가 어디에 저장될까

/etc/passwd에는 사용자 이름, UID, 기본 GID, 홈 디렉터리, 로그인 셸 등이 기록된다. 비밀번호 해시는 일반적으로 /etc/shadow에서 별도로 관리하며 일반 사용자에게 그 내용을 공개해서는 안 된다. /etc/group은 그룹 이름과 GID, 명시적으로 등록된 보조 그룹 구성원을 담는다. 이 파일들을 직접 문자열 편집하기보다 useradd, usermod, passwd, userdel 같은 도구로 바꾸고, 조회에는 getent를 쓰는 것이 안전하다. getent는 로컬 파일뿐 아니라 시스템에 설정된 NSS 조회 경로를 사용하므로 LDAP 등 외부 사용자 저장소가 있는 환경에도 적합하다.

getent passwd gun
getent group sudo
id gun
sudo -l -U gun

id gun의 uid는 사용자 식별자, gid는 기본 그룹, groups는 추가로 속한 그룹을 보여 준다. 같은 이름이라도 컨테이너와 호스트에서 UID가 다르면 파일 소유권이 기대와 달라질 수 있다. sudo -l -U gun은 관리자 권한이 있는 실행자만 다른 사용자의 정책을 조회할 수 있다.

서비스 계정과 로그인 계정 구분하기

사람이 로그인할 계정과 서비스를 실행할 계정은 목적이 다르다. 서비스가 홈 디렉터리나 셸 로그인이 필요하지 않다면 이를 허용하지 않는 시스템 계정으로 분리할 수 있다. 다음은 배포판의 정책에 맞게 경로와 셸을 확인한 뒤 적용하는 예시다.

sudo useradd --system --no-create-home --shell /usr/sbin/nologin appsvc
getent passwd appsvc
sudo -u appsvc id

--system의 UID 범위, nologin의 경로는 배포판에 따라 다를 수 있다. 서비스 프로세스가 이 계정으로 실행되도록 systemd 유닛의 User=appsvc 등을 설정하고, 필요한 데이터 디렉터리만 해당 계정 또는 그룹에 허용한다. 단순히 계정이 존재한다고 서비스가 자동으로 그 계정에서 실행되지는 않는다.

flowchart LR
  A[계정 생성] --> B[비밀번호 또는 로그인 정책 결정]
  B --> C[필요한 그룹만 지정]
  C --> D[파일과 서비스 실행 계정 연결]
  D --> E[새 세션에서 권한 확인]

그룹 변경이 바로 보이지 않을 때

sudo usermod -aG sudo gun 뒤에 이미 열린 gun의 셸에서 groups를 실행하면 여전히 이전 보조 그룹 목록이 보일 수 있다. 프로세스의 그룹 정보는 로그인 시점에 설정되기 때문이다. 새 로그인 세션을 열어 id를 확인한다. sudo 명령이 계속 거부되면 해당 배포판의 sudo 정책, 계정 잠금 여부, 로그인한 계정 이름을 함께 확인한다. /etc/sudoers는 구문 오류로 관리자 접근이 막힐 수 있으므로 visudo를 사용한다.

계정 삭제 전에 그 UID가 소유한 파일과 실행 중인 프로세스를 확인해야 한다. userdel은 계정 항목을 제거해도 외부 볼륨이나 다른 경로의 파일을 모두 지우지 않는다. 계정을 제거한 뒤 남은 파일은 소유자가 이름 대신 숫자 UID로 보일 수 있다. 같은 UID를 새 계정에 재사용하면 남은 파일에 예상치 못한 접근이 생길 수 있으므로 이전 소유 파일을 정리한다. userdel -r은 홈과 메일 스풀을 지우는 파괴적 명령이므로 백업·대상 경로를 확인한 뒤 실행한다.

참고: useradd(8), usermod(8), getent(1).

같은 카테고리의 글