| sitelink1 | |
|---|---|
| sitelink2 | |
| sitelink3 | |
| sitelink4 | |
| extra_vars5 | |
| extra_vars6 |
아래 문서는 Windows 11 Pro의 OpenSSH 기반 SFTP 서버에서, FTP 서비스 용도로만 쓰는 SFTP 전용 계정을 만들고(생성), 바꾸고(수정), 없애는(삭제) 표준 운영 절차서(SOP) 입니다.
(※ “전용”이므로 쉘/원격명령 불가, SFTP만 허용, 홈 디렉터리 격리를 기본 정책으로 합니다.)
1) 범위 / 전제
-
대상: Windows 11 Pro + OpenSSH Server (sshd)
-
계정 유형: 로컬 사용자(Local user) 권장 (도메인 사용 시 절차 동일하나 그룹정책/권한은 AD에서 병행)
-
SFTP만 허용:
sshd_config의 Match 블록 + ForceCommand internal-sftp 사용 -
홈 디렉터리 예시:
D:\SFTP\<계정명>(운영 환경에 맞춰 드라이브/경로 조정)
2) 표준 정책
-
암호/키 인증: 기본은 키 기반 인증 권장, 비밀번호는 정책에 맞게(길이/복잡도/주기)
-
권한(ACL): 홈 폴더는 해당 사용자 + Administrators만 접근, 상위 폴더는 읽기 제한
-
로그/감사: Windows 이벤트 로그(“OpenSSH/Operational”)와 접근 로그 중앙수집(선택)
-
변경 관리:
C:\ProgramData\ssh\sshd_config변경 전 백업, 변경 후 테스트 → 재시작
3) 사전 점검 (공통)
# OpenSSH Server 설치/상태
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Get-Service sshd
# 포트 오픈 확인(22/TCP)
Test-NetConnection -ComputerName localhost -Port 22
4) 생성 절차 (Create)
4.1 로컬 사용자 생성
# 관리자 PowerShell 실행
$User = "sftp_jinie" # 예시 계정명
$Pass = Read-Host "New password" -AsSecureString
New-LocalUser -Name $User -Password $Pass -NoPasswordNeverExpires:$true -AccountNeverExpires:$true -Description "SFTP 전용 계정"
# (원하면) Users 그룹에만 포함되도록 확인
Add-LocalGroupMember -Group "Users" -Member $User
운영 정책상 대화형 로그온 금지가 필요하면 로컬 보안 정책(GPO)에서 “로컬 로그온 거부”에 계정을 추가하세요.
4.2 홈 디렉터리/권한 준비
$Home = "D:\SFTP\$User"
New-Item -ItemType Directory -Path $Home -Force | Out-Null
# 상위 루트(D:\SFTP)는 목록만 가능하게, 각 홈은 본인만 풀권한
icacls "D:\SFTP" /inheritance:r /grant:r "Administrators:(OI)(CI)(F)" "SYSTEM:(OI)(CI)(F)" /T
icacls $Home /inheritance:r /grant:r "$User:(OI)(CI)(F)" "Administrators:(OI)(CI)(F)" "SYSTEM:(OI)(CI)(F)"
4.3 키 기반 인증(권장)
# 사용자 프로필 경로
$ProfileRoot = (Get-LocalUser $User).SID | ForEach-Object {
(Get-Item "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$_").GetValue("ProfileImagePath")
}
$SshDir = Join-Path $ProfileRoot ".ssh"
New-Item -ItemType Directory -Path $SshDir -Force | Out-Null
# 공개키 등록(아래는 예시; 실제 공개키로 교체)
$PubKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEXAMPLEexampleEXAMPLE user@host"
$Auth = Join-Path $SshDir "authorized_keys"
$PubKey | Out-File -FilePath $Auth -Encoding ascii -Force
# .ssh/authorized_keys 권한 600 스타일
icacls $SshDir /inheritance:r /grant:r "$User:(OI)(CI)(F)" "Administrators:(OI)(CI)(F)" "SYSTEM:(OI)(CI)(F)"
icacls $Auth /inheritance:r /grant:r "$User:(R,W)" "Administrators:(F)" "SYSTEM:(F)"
4.4 SFTP 전용 강제 (sshd_config)
-
백업
Copy-Item "C:\ProgramData\ssh\sshd_config" "C:\ProgramData\ssh\sshd_config.bak_$(Get-Date -Format yyyyMMddHHmmss)"
-
설정 파일에 Subsystem / Match 블록 추가(또는 존재 시 병합)
# C:\ProgramData\ssh\sshd_config
# SFTP 서브시스템(권장: internal-sftp)
Subsystem sftp internal-sftp
# SFTP 전용 계정 정책
Match User sftp_jinie
ForceCommand internal-sftp -d "D:/SFTP/sftp_jinie"
PasswordAuthentication yes
PubkeyAuthentication yes
# 필요 시 셸/포워딩 제한
AllowTcpForwarding no
X11Forwarding no
여러 전용계정 운영 시
Match User에 공백 구분 다중 지정 가능(예:Match User user1,user2,user3)
시작 디렉터리-d는 따옴표/경로 구분자 주의(Windows 경로는/또는 이스케이프된\모두 가능)
-
서비스 재시작 & 테스트
Restart-Service sshd
# 로컬에서 테스트 (키/비번 둘 다)
sftp sftp_jinie@localhost
5) 수정 절차 (Modify)
5.1 비밀번호 변경
$User = "sftp_jinie"
$NewPass = Read-Host "New password" -AsSecureString
Set-LocalUser -Name $User -Password $NewPass
5.2 공개키 교체/추가
$Auth = "C:\Users\sftp_jinie\.ssh\authorized_keys"
notepad $Auth # 키 추가/삭제
# 저장 후 권한 재확인
icacls $Auth /inheritance:r /grant:r "sftp_jinie:(R,W)" "Administrators:(F)" "SYSTEM:(F)"
5.3 홈 디렉터리 변경
-
새 디렉터리 생성/권한 부여 → 데이터 마이그레이션
-
sshd_config의Match User ... -d "새경로"수정 → 백업 후 저장 -
Restart-Service sshd→ 접속 테스트
5.4 접속 제한/해제 (임시 잠금)
# 계정 비활성화
Disable-LocalUser -Name "sftp_jinie"
# 재활성화
Enable-LocalUser -Name "sftp_jinie"
또는 sshd_config의 해당 Match 블록을 주석처리/삭제 후 재시작으로 차단(정책적).
6) 삭제 절차 (Delete)
6.1 사전 백업/차단
-
데이터 보존 정책에 따라 홈 디렉터리 ZIP/이관
-
Disable-LocalUser로 즉시 잠금 → 운영 승인 후 최종 삭제
6.2 사용자/리소스 삭제
# 서비스 중지 필요 없음(권장: 업무 비시간)
Remove-LocalUser -Name "sftp_jinie"
# 홈 폴더/키 파일 정리(정책에 따라 보존/삭제)
Remove-Item -Recurse -Force "D:\SFTP\sftp_jinie"
# sshd_config Match 블록 제거 후 재시작
Restart-Service sshd
7) 점검 체크리스트
-
sshd서비스 실행/자동시작 -
포트 22 열림(방화벽 규칙
OpenSSH-Server-In-TCP) -
sshd_config백업·버전관리,Subsystem sftp internal-sftp존재 -
Match User <계정>블록에 ForceCommand internal-sftp 설정 -
홈 디렉터리 권한: 계정/Administrators/SYSTEM만
-
.ssh\authorized_keys권한 600 스타일 유지 -
테스트:
sftp <계정>@localhost업/다운로드 정상 -
이벤트 로그(OpenSSH/Operational) 오류 없는지 확인
8) 운영 팁
-
여러 계정 공통 정책은
Match Group sftp_users로 묶고, 로컬 그룹sftp_users에 사용자 추가해서 관리하면 편합니다. -
FTPS(FTP over TLS) 대신 SFTP를 쓰면 방화벽·NAT·인증이 단순해지므로 운영 비용↓.
-
외부망 노출 시 키 인증 강제, 비밀번호 인증 비활성화(+ 2FA/보안장비) 권장:
PasswordAuthentication no PubkeyAuthentication yes -
대규모 환경은 폴더/권한/Match 블록을 스크립트화(PowerShell) 해 템플릿 자동화 권장.
