개요
리눅스 서버 운영의 첫걸음은 안전하고 표준화된 방식으로 신규 사용자 계정을 생성하고 권한을 분리하는 것입니다. 본 글에서는 우분투 환경에서 초보자도 실수 없이 계정을 다룰 수 있는 adduser 명령어의 핵심 실무 패턴을 단계별로 살펴봅니다. 또한 로우레벨 명령어인 useradd와의 결정적인 차이점 및 홈 디렉터리 권한 관련 필수 주의사항을 함께 정리합니다.
adduser 기본 사용법 - 대화형 환경과 스크립트 기반 계정 생성
adduser 실습 진행을 위해 사용자 계정 및 비밀번호 관리에 필요한 패키지를 최신 상태로 확인하고 설치합니다.

adduser 명령어는 사용자의 홈 디렉터리 생성과 기본 셸 설정을 대화형 또는 비대화형으로 자동 처리해 주는 고수준 계정 생성 도구입니다.
여기서는 --disabled-password와 --gecos 옵션을 사용하여 대화형 입력 프롬프트를 건너뛰고 스크립트 기반으로 즉시 계정을 생성합니다.
⚙️ [주요 옵션]
--home DIR : 기본 경로 대신 지정한 경로를 사용자의 홈 디렉터리로 설정합니다.--shell SHELL : 기본 로그인 셸 대신 지정한 셸 경로를 사용자의 로그인 셸로 지정합니다.--gecos GECOS : 사용자의 실명, 사무실, 전화번호 등의 추가 정보를 프롬프트 입력 없이 한 번에 지정합니다.--disabled-password : 비밀번호를 설정하지 않은 상태로 계정을 생성하며, 비밀번호가 설정될 때까지 직접 로그인을 비활성화합니다.--disabled-login : 비밀번호 없이 계정을 생성하고 셸 로그인을 완전히 비활성화합니다.--ingroup GROUP : 사용자의 기본 그룹을 기존에 존재하는 특정 그룹으로 지정합니다.--system : 일반 사용자가 아닌 백그라운드 서비스나 데몬 실행을 위한 시스템 사용자를 생성합니다.

chpasswd 명령어는 표준 입력을 통해 계정 이름과 비밀번호 쌍을 전달받아 대화형 프롬프트 없이 비밀번호를 일괄 설정합니다.
앞서 비밀번호 없이 생성된 testuser 계정에 새 비밀번호를 안전하게 부여합니다.

id 명령어는 지정한 사용자의 고유 식별자(UID), 기본 그룹(GID), 소속된 보조 그룹 목록을 출력하여 계정이 정상적으로 생성되었는지 확인합니다.
출력 결과를 통해 testuser 계정에 할당된 UID 및 보조 그룹 정보를 한눈에 파악할 수 있습니다.

ls -la 명령어로 새로 생성된 사용자의 홈 디렉터리 내부를 조회하여 환경 설정 파일들이 정상적으로 복사되었는지 확인합니다.
계정 생성 과정에서 /etc/skel 템플릿에 있던 .bashrc, .profile 등의 기본 설정 파일이 생성자의 권한으로 올바르게 배포되었음을 알 수 있습니다.

보조 그룹 및 관리자(sudo) 권한 추가 패턴
사용자 편입 실습에 필요한 보조 그룹을 미리 생성하기 위해 sudo groupadd -f devops 명령어를 실행합니다.-f 옵션은 해당 그룹이 이미 존재하더라도 오류를 발생시키지 않고 안전하게 명령을 완료합니다.

adduser 명령어 뒤에 사용자명과 그룹명을 차례로 지정하여 testuser 계정을 devops 보조 그룹에 간편하게 추가합니다.
우분투의 adduser는 별도의 복잡한 옵션 없이 사용자명과 그룹명만으로 보조 그룹 편입 작업을 직관적으로 처리합니다.

우분투 환경에서 관리자 권한을 부여하기 위해 testuser 계정을 시스템 관리자 그룹인 sudo에 추가합니다.sudo 그룹에 소속된 사용자는 관리자 권한으로 시스템 제어 명령어를 실행할 수 있는 권한을 얻게 됩니다.

groups 명령어를 사용하여 testuser 계정이 현재 속해 있는 모든 그룹 목록을 조회합니다.
출력 결과를 통해 기본 그룹 외에 새롭게 추가한 sudo 및 devops 보조 그룹이 올바르게 반영되었음을 확인합니다.

sudo -l -U 명령어를 실행하여 testuser 계정에 실제로 부여된 sudo 권한과 실행 규칙을 검증합니다.
출력된 결과의 (ALL : ALL) ALL 항목을 통해 해당 사용자가 모든 관리자 명령어를 정상적으로 실행할 수 있는 상태임을 최종 확인합니다.

데몬 및 백그라운드 서비스용 시스템 계정(–system) 생성
sudo adduser --system --no-create-home --group appservice 명령어를 실행하여 백그라운드 서비스 전용 시스템 계정과 동명의 전용 그룹을 함께 생성합니다.--system 옵션은 100~999 사이의 낮은 시스템 UID/GID를 자동 할당하며, --no-create-home 옵션으로 불필요한 홈 디렉터리 생성을 방지하여 프로세스 보안 격리 환경을 구축합니다.

getent passwd appservice 명령어를 실행하여 시스템 사용자 데이터베이스에서 appservice 계정의 세부 속성을 조회합니다.
출력 결과를 통해 홈 디렉터리가 /nonexistent로 지정되고 로그인 셸이 /usr/sbin/nologin으로 자동 설정되어 대화형 로그인이 안전하게 차단되었음을 확인할 수 있습니다.

grep appservice /etc/group 명령어를 사용하여 그룹 설정 파일에 시스템 그룹이 정상적으로 등록되었는지 확인합니다.
계정 생성 시 지정한 --group 옵션에 따라 계정 이름과 동일한 appservice 전용 시스템 그룹(GID 103)이 정상적으로 생성된 것을 확인합니다.

id appservice 명령어를 실행하여 생성된 시스템 계정의 고유 식별자(UID)와 기본 그룹(GID) 정보를 최종 검증합니다.
출력 결과에서 일반 사용자 범위(1000 이상)가 아닌 시스템 전용 식별자인 UID 102와 GID 103이 올바르게 매핑되어 있음을 확인할 수 있습니다.

useradd와의 차이점 비교 및 안전한 계정 삭제(deluser) 주의사항
adduser 명령어가 계정 생성 시 참조하는 기본 설정 파일(/etc/adduser.conf)에서 디렉터리 권한(DIR_MODE) 및 기본 셸(DSHELL) 항목을 확인합니다.useradd와 달리 adduser는 해당 설정 파일에 정의된 기본값(예: 홈 디렉터리 권한 0750 또는 0700, 기본 셸 /bin/bash)을 자동으로 적용하여 안전한 계정 환경을 구성합니다.

sudo deluser --remove-home testuser 명령어를 실행하여 사용자 계정과 함께 해당 사용자의 홈 디렉터리 및 메일 스풀을 완전히 삭제합니다.
계정만 제거하고 홈 디렉터리를 남겨두면 잔여 파일의 소유권이 고아(orphan) 상태로 남아 보안 위협이 될 수 있으므로 --remove-home 옵션을 사용하여 깨끗하게 정리합니다.

sudo deluser --system appservice 명령어를 실행하여 백그라운드용 시스템 계정을 안전하게 삭제합니다.--system 옵션은 삭제 대상이 시스템 계정인지 검증하여 일반 사용자가 실수로 삭제되는 문제를 방지하며 서비스 계정을 정리합니다.

실습 과정에서 생성했던 임시 보조 그룹을 정리하기 위해 sudo groupdel devops 2>/dev/null || true 명령어를 실행합니다.
더 이상 사용하지 않는 보조 그룹을 시스템에서 깔끔하게 제거하여 불필요한 설정 잔여물을 방지합니다.

id testuser || true 명령어를 실행하여 계정 정보가 시스템 사용자 데이터베이스에 여전히 남아 있는지 조회합니다.
명령어 실행 결과에 해당 사용자의 UID 및 그룹 정보가 출력되는 경우, 삭제 프로세스가 완전히 완료되지 않았거나 동일한 이름의 다른 세션/설정이 존재하는지 확인할 필요가 있습니다.

지금까지 우분투에서 adduser 명령어를 활용한 사용자 추가 실무 패턴과 작업 시 꼭 알아야 할 주의점들을 정리해보았습니다.
알려드린 핵심 팁들을 잘 기억하셔서 보다 안전하고 효율적으로 서버 환경을 관리해 보시기 바랍니다.