--- title: useradd — 계정 생성 date: 2026-10-18 time: 12:00 model: admin category: programs author_type: human summary: 서비스/배포용 계정을 만들고 홈·셸·그룹을 지정하는 명령어. tags: 프로그램, 사용자 및 보안 관리, useradd --- **💬 "useradd 명령어"** useradd는 **계정을 만듭니다**. 서비스 계정은 로그인 셸을 막아 최소 권한으로 운영합니다. adduser(대화형)와 달리 옵션으로 정확히 지정합니다. - **개념**: 새 사용자 계정을 생성합니다. - **-r**: 시스템 계정으로 만들어 UID를 낮게 잡습니다. - **-s**: 로그인 셸을 지정합니다(서비스 계정은 /usr/sbin/nologin). - **-G**: 보조 그룹을 지정합니다. ## 자주 쓰는 옵션 | 옵션 | 설명 | | --- | --- | | -r | 시스템 계정 생성 | | -m | 홈 디렉터리 생성 | | -s /usr/sbin/nologin | 로그인 금지(서비스 계정) | | -G <그룹> | 보조 그룹 지정 | ## 필수 명령어 조합 3가지 - `useradd -r -s /usr/sbin/nologin -d /opt/app myapp` — 로그인 불가 서비스 계정 생성 - `useradd -m -s /bin/bash deploy` — 배포용 로그인 계정 생성 - `id myapp` — 생성 결과(UID/GID/그룹) 확인 **💬 "트러블슈팅 흐름으로 예시 하나 구성해줘"** 실제 운영 중인 서버에서 자주 만나는 상황을 순서대로 정리했습니다. ### 1단계 · 계정 생성 용도에 맞게 옵션을 지정합니다. ``` useradd -r -s /usr/sbin/nologin -d /opt/app myapp ``` ### 2단계 · 그룹 지정 필요하면 보조 그룹에 넣습니다. ``` usermod -aG www-data myapp ``` ### 3단계 · 확인 UID/GID와 셸을 확인합니다. ``` id myapp && getent passwd myapp ``` ## 실무에서는 이렇게 씁니다 ### 1. 서비스 계정 분리 **상황** — 앱을 root로 돌리지 않도록 전용 계정이 필요합니다. ``` useradd -r -s /usr/sbin/nologin -d /opt/app myapp && chown -R myapp:myapp /opt/app ``` **결과** — 앱이 전용 계정으로 실행될 수 있는 기반이 만들어집니다. **포인트** — 서비스는 최소 권한 계정으로 돌리는 것이 보안 기본입니다. ### 2. 배포 계정 **상황** — CI가 SSH로 접속할 계정이 필요합니다. ``` useradd -m -s /bin/bash deploy && mkdir -p /home/deploy/.ssh && chown -R deploy:deploy /home/deploy/.ssh ``` **결과** — 키 인증을 설정할 수 있는 배포 계정이 생깁니다. **포인트** — 권한은 필요한 디렉터리로만 한정합니다. ## 주의할 점 - root로 서비스 실행은 금지에 가깝습니다. 전용 계정을 만듭니다. - 셸을 nologin으로 두지 않으면 서비스 계정이 로그인 통로가 됩니다. - 계정 삭제 시 남은 파일 소유권과 cron/서비스 참조를 함께 정리합니다. ## 실제 실행 화면 서비스 계정을 생성하고 UID/GID·셸을 확인한 결과입니다. ![useradd 명령어 실행 결과: 서비스 계정 생성과 확인](https://games.cursorai.co.kr/assets/useradd-demo.png) 실제 운영 중인 서버 --- 원문(HTML): https://games.cursorai.co.kr/programs/linux/security/useradd.html