좋은 단계로 오셨습니다 👍
아래는 **호스팅 업체에서 실제로 쓰는 구조를 단순화한 `adduser` 자동화 쉘스크립트 예제**입니다.
(교육·이해용 / 실서버 적용 시 보안 강화 필요)
⚠️ **전제**
* root 권한에서 실행
* 웹에서 직접 실행 ❌
* 내부 관리용 스크립트 or 데몬에서 호출
---
## 1️⃣ 기본 개념 구조
```text
웹 가입
→ DB 저장
→ 내부 프로비저닝 서버
→ shell script 실행
→ 시스템 계정 생성
```
---
## 2️⃣ 가장 단순한 자동 adduser 스크립트
### 📄 `create_host_user.sh`
```bash
#!/bin/bash
# ====== 설정 ======
USERNAME="$1"
PASSWORD="$2"
BASE_DIR="/home"
SHELL="/bin/bash"
# ====== 체크 ======
if [ -z "$USERNAME" ] || [ -z "$PASSWORD" ]; then
echo "사용법: $0 사용자명 비밀번호"
exit 1
fi
if id "$USERNAME" &>/dev/null; then
echo "이미 존재하는 사용자입니다."
exit 1
fi
# ====== 사용자 생성 ======
useradd -m -d ${BASE_DIR}/${USERNAME} -s $SHELL "$USERNAME"
# ====== 비밀번호 설정 (해시 사용) ======
echo "${USERNAME}:${PASSWORD}" | chpasswd
# ====== 기본 디렉토리 생성 ======
mkdir -p ${BASE_DIR}/${USERNAME}/public_html
mkdir -p ${BASE_DIR}/${USERNAME}/logs
mkdir -p ${BASE_DIR}/${USERNAME}/tmp
# ====== 권한 설정 ======
chown -R ${USERNAME}:${USERNAME} ${BASE_DIR}/${USERNAME}
chmod 711 ${BASE_DIR}/${USERNAME}
chmod 755 ${BASE_DIR}/${USERNAME}/public_html
echo "계정 생성 완료: $USERNAME"
```
---
## 3️⃣ 실행 예시
```bash
chmod +x create_host_user.sh
./create_host_user.sh kimhost mypassword123
```
결과:
```text
/home/kimhost
/home/kimhost/public_html
/home/kimhost/logs
```
---
## 4️⃣ 실제 호스팅 업체에서는 이렇게 더 강화함
### 🔒 ① 평문 비밀번호 전달 ❌
대신:
```bash
HASH=$(openssl passwd -6 "$PASSWORD")
useradd -m -p "$HASH" "$USERNAME"
```
---
### 🔒 ② 쉘 제한 (FTP 전용 계정)
```bash
useradd -m -s /sbin/nologin "$USERNAME"
```
또는
```bash
/bin/false
```
---
### 🔒 ③ 웹서버 그룹에 포함
```bash
usermod -aG www-data "$USERNAME"
```
---
### 🔒 ④ 디스크 용량 제한 (쿼터)
```bash
setquota -u "$USERNAME" 1024000 1200000 0 0 /
```
---
## 5️⃣ cPanel 방식에 가까운 구조 (실무형)
```bash
USER=kimhost
HOME=/home/$USER
useradd -m -d $HOME -s /bin/bash $USER
mkdir -p $HOME/{public_html,logs,tmp}
chown -R $USER:$USER $HOME
chmod 711 $HOME
```
---
## 6️⃣ 보안적으로 매우 중요한 점 ⚠️
### ❌ 절대 하지 말 것
```php
exec("create_host_user.sh $id $pw");
```
### ✅ 올바른 구조
```text
웹 서버
→ 내부 API 요청
→ root 데몬
→ 쉘스크립트 실행
```
---
## 7️⃣ 구조 한 줄 요약
> **호스팅 업체의 자동 adduser는
> root 권한 쉘스크립트를
> 웹과 분리된 내부 프로비저닝 시스템에서 실행한다**
---
## 8️⃣ 다음 단계로 보면 딱 좋은 주제
* `www-data` 와 호스팅 계정 권한 분리
* Apache + suPHP / php-fpm 계정별 실행
* FTP 계정만 열고 SSH 차단하는 이유
* 해킹 시 왜 다른 계정으로 확산이 어려운지
원하시면 **실제 호스팅 수준 스크립트(쿼터·FTP·DB까지)** 도 만들어 드릴게요.
카페 게시글
도사의컴퓨터강의
호스팅 업체에서 쓰는 adduser 쉘 스크립트..
김종록
추천 0
조회 20
26.01.08 22:35
댓글 0
다음검색