docs: [ops] 서버 계정 관리 문서 업데이트

- 09-security: 서버 계정 관리 섹션 신규 추가 (Linux/MySQL 계정 현황, 생성 절차, 잠금/해제)
- 09-security: SSH 인증 정책 정리 (패스워드 허용, root 외부 접근 차단)
- 01-server-overview: 3개 서버 사용자 정보 업데이트 (hskwon/pro/kkk)
- 01-server-overview: 운영 DB 사용자 테이블에 pro, kkk 추가
This commit is contained in:
2026-03-13 19:30:05 +09:00
parent 2ccbe0b5f1
commit 987030f24c
2 changed files with 100 additions and 7 deletions

View File

@@ -18,7 +18,7 @@
| RAM | 8GB |
| Swap | 4GB |
| 디스크 | 98GB (여유 79GB) |
| 사용자 | hskwon (SSH 키 인증, sudo NOPASSWD) |
| 사용자 | hskwon(개발팀장), pro(개발실장/잠금), kkk(개발자/잠금) |
### 도메인 목록
@@ -117,6 +117,8 @@
|--------|-----------|------|------|
| codebridge@localhost | 비밀번호 | sam, sam_stage, sam_stat, codebridge | 애플리케이션 |
| hskwon@localhost | auth_socket | ALL (WITH GRANT OPTION) | 관리자 |
| pro@localhost | 비밀번호 (잠금) | codebridge, sam, sam_stage, sam_stat | 개발실장 |
| kkk@localhost | 비밀번호 (잠금) | codebridge, sam, sam_stage, sam_stat | 개발자 (2026-03-13) |
| root@localhost | auth_socket | ALL | 시스템 (sudo mysql) |
| sam_backup@110.10.147.46 | 비밀번호 | SELECT, LOCK TABLES (sam, sam_stat) | CI/CD 백업 |
@@ -135,7 +137,7 @@
| CPU | 4 vCPU |
| RAM | 8GB (Swap 4GB) |
| Disk | 98GB (사용 15GB / 여유 79GB) |
| 사용자 | hskwon (SSH 키 인증, sudo NOPASSWD) |
| 사용자 | hskwon(개발팀장), pro(개발실장/잠금), kkk(개발자/잠금) |
### 도메인 매핑
@@ -214,7 +216,7 @@
| IP | 114.203.209.83 |
| 호스트명 | sam-dev |
| OS | Ubuntu 24.04.2 LTS |
| 사용자 | hskwon (SSH 키 인증, sudo NOPASSWD) |
| 사용자 | hskwon(개발팀장), pro(개발실장), kkk(개발자) |
### 서비스 현황

View File

@@ -4,16 +4,107 @@
---
## 서버 계정 관리
### Linux 계정 현황
| 계정 | 이름 | sam-dev | sam-prod | sam-cicd | 비고 |
|------|------|---------|----------|----------|------|
| hskwon | 권혁성 | sudo, users | sudo, users, webservice | sudo, users, webservice | 개발팀장 |
| pro | 김보곤 | develop, sudo, users | pro, sudo, users, webservice (잠금) | pro, sudo, users, webservice (잠금) | 개발실장 |
| kkk | 강영보 | develop, sudo, users | pro, sudo, users, webservice (잠금) | pro, sudo, users, webservice (잠금) | 개발자 (2026-03-13 생성) |
### MySQL 계정 현황
| 계정 | sam-dev | sam-prod | sam-cicd | 비고 |
|------|---------|----------|----------|------|
| hskwon | ALL *.* (auth_socket) | ALL *.* (auth_socket) | ALL *.* (auth_socket) | 개발팀장 |
| codebridge | - | sam, sam_stage, sam_stat, codebridge | - | 앱 사용자 |
| pro | chandj, sam, samdb | codebridge, sam, sam_stage, sam_stat (잠금) | codebridge, gitea, sam, sam_stage, sam_stat (잠금) | 개발실장 |
| kkk | chandj, sam, samdb | codebridge, sam, sam_stage, sam_stat (잠금) | codebridge, gitea, sam, sam_stage, sam_stat (잠금) | 개발자 (2026-03-13 생성) |
| sam_backup | - | - (운영 DB에서 원격 접근) | sam, sam_stat (원격 백업) | CI/CD 백업 |
### 신규 계정 생성 절차
```bash
# 1. 개발서버 (전체 권한)
ssh sam-dev "sudo useradd -m -s /bin/bash -G develop,sudo,users -c '이름' 계정명"
ssh sam-dev "echo '계정명:비밀번호' | sudo chpasswd"
# 2. 운영/CICD (잠금 상태로 생성)
ssh sam-prod "sudo useradd -m -s /bin/bash -G pro,sudo,users,webservice -c '이름' 계정명"
ssh sam-prod "echo '계정명:비밀번호' | sudo chpasswd"
ssh sam-prod "sudo usermod -L 계정명" # Linux 잠금
ssh sam-cicd "sudo useradd -m -s /bin/bash -G pro,sudo,users,webservice -c '이름' 계정명"
ssh sam-cicd "echo '계정명:비밀번호' | sudo chpasswd"
ssh sam-cicd "sudo usermod -L 계정명" # Linux 잠금
# 3. DB 계정 — 개발 (활성)
ssh sam-dev "mysql -u root -p'<비밀번호>' -e \"
CREATE USER '계정명'@'localhost' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON chandj.* TO '계정명'@'localhost';
GRANT ALL PRIVILEGES ON sam.* TO '계정명'@'localhost';
GRANT ALL PRIVILEGES ON samdb.* TO '계정명'@'localhost';
FLUSH PRIVILEGES;\""
# 4. DB 계정 — 운영/CICD (잠금)
ssh sam-prod "sudo mysql -e \"
CREATE USER '계정명'@'localhost' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON codebridge.* TO '계정명'@'localhost';
GRANT ALL PRIVILEGES ON sam.* TO '계정명'@'localhost';
GRANT ALL PRIVILEGES ON sam_stage.* TO '계정명'@'localhost';
GRANT ALL PRIVILEGES ON sam_stat.* TO '계정명'@'localhost';
ALTER USER '계정명'@'localhost' ACCOUNT LOCK;
FLUSH PRIVILEGES;\""
ssh sam-cicd "sudo mysql -e \"
CREATE USER '계정명'@'localhost' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON codebridge.* TO '계정명'@'localhost';
GRANT ALL PRIVILEGES ON gitea.* TO '계정명'@'localhost';
GRANT ALL PRIVILEGES ON sam.* TO '계정명'@'localhost';
GRANT ALL PRIVILEGES ON sam_stage.* TO '계정명'@'localhost';
GRANT ALL PRIVILEGES ON sam_stat.* TO '계정명'@'localhost';
ALTER USER '계정명'@'localhost' ACCOUNT LOCK;
FLUSH PRIVILEGES;\""
```
### 계정 잠금/해제
```bash
# Linux 잠금 해제
sudo usermod -U 계정명
# Linux 잠금
sudo usermod -L 계정명
# MySQL 잠금 해제
sudo mysql -e "ALTER USER '계정명'@'localhost' ACCOUNT UNLOCK;"
# MySQL 잠금
sudo mysql -e "ALTER USER '계정명'@'localhost' ACCOUNT LOCK;"
```
---
## SSH 키 관리
양쪽 서버 모두 비밀번호 로그인 비활성화, root SSH 비활성화, 키 인증만 허용.
### SSH 인증 정책
| 서버 | 패스워드 인증 | root 외부 접근 | SSH 키 | 비고 |
|------|:----------:|:----------:|:------:|------|
| sam-dev | ✅ 허용 | ❌ 차단 | ✅ 허용 | 개발서버 |
| sam-prod | ✅ 허용 | ❌ 차단 | ✅ 허용 | 운영서버 |
| sam-cicd | ✅ 허용 | ❌ 차단 | ✅ 허용 | CICD서버 |
> 일반 계정은 패스워드 접근 허용, root는 외부 접근 완전 차단 (`PermitRootLogin no`)
```bash
# SSH 설정 확인
sudo grep -E "^(PasswordAuthentication|PermitRootLogin|PubkeyAuthentication)" /etc/ssh/sshd_config
# 올바른 설정:
# PasswordAuthentication no
# PermitRootLogin no
# 현재 설정:
# PasswordAuthentication yes
# PermitRootLogin no # root 외부 접근 완전 차단
# PubkeyAuthentication yes
```