웹사이트 검색

CentOS에서 SFTP 서버를 설정하는 방법


이 페이지에서

  1. 1. 서문
  2. 2. SFTP 설치
  3. 3. SFTP 구성
  4. 4. SFTP 테스트

이 튜토리얼은 CentOS에서 SFTP 서버를 설정하고 사용하는 방법을 설명합니다. 시작하기 전에 SFTP가 실제로 무엇을 나타내고 무엇을 위해 사용되는지 설명하겠습니다. 현재 대부분의 사람들은 일반 FTP를 사용하여 서버에서 클라이언트로 또는 클라이언트에서 서버로 데이터를 전송, 다운로드 또는 업로드할 수 있다는 것을 알고 있습니다. 하지만 이 프로토콜은 포트가 누구에게나 활짝 열려 있기 때문에 익명의 침입자에 의해 쉽게 해킹됩니다(TLS를 사용하지 않는 경우). 따라서 SFTP는 보안 수준을 강화하려는 주요 목적을 충족하기 위한 또 다른 대안으로 도입되었습니다.

SFTP는 SSH 파일 전송 프로토콜 또는 보안 파일 전송 프로토콜을 나타냅니다. 보안 연결을 제공하기 위해 SSH와 함께 패키지된 별도의 프로토콜을 사용합니다.

1. 서문

이 가이드에서는 64비트 버전의 CentOS 7을 사용하고 있습니다. 동일한 단계가 CentOS 6에서도 작동합니다. 자습서 결과는 클라이언트가 SFTP 서버에 대한 액세스 권한을 제공받을 수 있지만 SSH를 통해 서버 자체에 로그인할 수 없는 방법을 보여줍니다.

2. SFTP 설치

일반 FTP와 달리 SFTP를 사용하기 위해 추가 패키지를 설치할 필요가 없습니다. 서버에 설치하는 동안 이미 설치된 사전 빌드 SSHd 패키지만 있으면 됩니다. 따라서 필요한 SSH 패키지가 이미 있는지 확인하십시오. 다음은 단계입니다.

달리다:

rpm -qa|grep ssh

출력은 다음과 유사해야 합니다.

[ ~]# rpm -qa|grep ssh
libssh2-1.4.3-10.el7_2.1.x86_64
openssh-7.4p1-13.el7_4.x86_64
openssh-server-7.4p1-13.el7_4.x86_64
openssh-clients-7.4p1-13.el7_4.x86_64

그게 다야, 이제 SFTP 구성을 만드는 방법으로 이동합니다.

3. SFTP 구성

설치의 모든 전제 조건이 완료되면 구성 단계로 넘어갑니다. 모범 사례를 위해 SFTP 액세스 권한을 얻을 모든 사용자를 관리할 수 있도록 그룹과 사용자를 생성해야 합니다. 하지만 먼저 data라는 추가 폴더를 만들어 보겠습니다. 다음은 단계입니다.

mkdir -p /data/sftp
chmod 701 /data

기본적으로 위의 단계에서 수행하려는 작업은 SFTP 액세스를 위한 기본 디렉터리로 별도의 폴더를 가져오는 것입니다. SFTP 사용자의 모든 사용자 디렉터리는 이 데이터 폴더의 하위 디렉터리가 됩니다.

SFTP 사용자에 대한 그룹을 만들 수 있습니다. 다음 단계는 다음과 같습니다.

groupadd sftpusers

그런 다음 howtoforge 사용자를 생성하고 SFTPUSERS 그룹에 할당합니다. 다음은 단계입니다.

useradd -g sftpusers -d /upload -s /sbin/nologin mysftpuser
passwd mysftpuser
Changing password for user mysftpuser.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

다음은 위 명령어에 대한 설명입니다.

  1. 사용자를 만들고 -g 명령을 사용하여 사용자를 sftpusers 그룹에 포함합니다.\n
  2. -d /upload 명령을 설정하여 /upload 디렉토리에 사용자의 기본 디렉토리를 할당합니다. 이는 나중에 /upload 폴더가 /data/mysftpuser/upload 아래에 있음을 의미합니다.\n
  3. 사용자가 SSH가 아닌 SFTP 프로토콜만 사용할 수 있도록 /sbin/nologin 셸에 대한 액세스를 제한합니다.\n
  4. 사용자 이름을 "mysftpuser"로 지정합니다.\n
  5. "mysftpuser" 사용자의 암호를 설정합니다.\n


이제 /data/mysftpuser 아래에 /upload 폴더를 만든 다음 폴더에 적절한 소유권을 할당합니다.

mkdir -p /data/mysftpuser/upload
chown -R root:sftpusers /data/mysftpuser
chown -R mysftpuser:sftpusers /data/mysftpuser/upload

완료되면 /data 디렉토리 아래에 새 폴더가 존재하고 구성이 올바른지 확인하십시오.


[ ~]# ls -ld /data/
drwx-----x. 5 root root 54 Mar 22 14:29 /data/
[ ~]# ls -ld /data/mysftpuser
drwxr-xr-x. 3 root sftpusers 20 Mar 22 14:29 /data/mysftpuser
[ ~]# ls -ld /data/mysftpuser/upload
drwxr-xr-x. 2 mysftpuser sftpusers 6 Mar 22 14:29 /data/mysftpuser/upload
[ ~]# cat /etc/passwd|grep mysftpuser
mysftpuser:x:1001:1001::/upload:/sbin/nologin

이제 SSH 프로토콜을 구성하여 SFTP 프로세스를 생성합니다. 이는 /etc/ssh/sshd_config에서 구성 파일을 편집하여 수행할 수 있습니다. 다음은 단계입니다.

nano /etc/ssh/sshd_config

파일 끝에 다음 줄을 추가합니다.

Match Group sftpusers
ChrootDirectory /data/%u
ForceCommand internal-sftp

완료되면 SSH 서비스를 다시 시작하십시오. 다음 단계는 다음과 같습니다.

service sshd status
Redirecting to /bin/systemctl status sshd.service
? sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-03-22 14:21:38 CET; 16min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 942 (sshd)
CGroup: /system.slice/sshd.service
??942 /usr/sbin/sshd -D
Mar 22 14:21:37 localhost.localdomain systemd[1]: Starting OpenSSH server daemon...
Mar 22 14:21:38 localhost.localdomain sshd[942]: Server listening on 0.0.0.0 port 22.
Mar 22 14:21:38 localhost.localdomain sshd[942]: Server listening on :: port 22.
Mar 22 14:21:38 localhost.localdomain systemd[1]: Started OpenSSH server daemon.
Mar 22 14:21:49 localhost.localdomain sshd[1375]: Accepted password for root from 192.168.1.9 port 59465 ssh2
service sshd restart
[ ~]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service

4. SFTP 테스트

이제 모든 것이 구성되었으므로 설정이 목적에 맞는지 테스트해 보겠습니다.
TEST01이라는 다른 서버를 사용하여 SFTP에 액세스할 수 없습니다. 먼저 SFTP 서버의 포트를 확인하겠습니다. 이를 위해 nmap 기능을 사용하겠습니다. 클라이언트 서버에 없는 경우 아래와 같이 yum으로 다운로드하여 설치할 수 있습니다.

yum list nmap
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.copahost.com
* epel: mirror.imt-systems.com
* extras: mirror.imt-systems.com
* remi-php72: remi.mirror.wearetriple.com
* remi-safe: remi.mirror.wearetriple.com
* updates: ftp.rz.uni-frankfurt.de
Available Packages
nmap.x86_64 2:6.40-7.el7
yum install nmap -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.copahost.com
* epel: mirror.imt-systems.com
* extras: mirror.imt-systems.com
* remi-php72: remi.mirror.wearetriple.com
* remi-safe: remi.mirror.wearetriple.com
* updates: ftp.rz.uni-frankfurt.de
Resolving Dependencies
--> Running transaction check
---> Package nmap.x86_64 2:6.40-7.el7 will be installed
--> Processing Dependency: nmap-ncat = 2:6.40-7.el7 for package: 2:nmap-6.40-7.el7.x86_64
--> Running transaction check
---> Package nmap-ncat.x86_64 2:6.40-7.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================================================================
Installing:
nmap x86_64 2:6.40-7.el7 base 4.0 M
Installing for dependencies:
nmap-ncat x86_64 2:6.40-7.el7 base 201 k
Transaction Summary
=============================================================================================================================================================================================
Install 1 Package (+1 Dependent package)
Total download size: 4.2 M
Installed size: 17 M
Downloading packages:
(1/2): nmap-ncat-6.40-7.el7.x86_64.rpm | 201 kB 00:00:01
(2/2): nmap-6.40-7.el7.x86_64.rpm | 4.0 MB 00:00:14
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 300 kB/s | 4.2 MB 00:00:14
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : 2:nmap-ncat-6.40-7.el7.x86_64 1/2
Installing : 2:nmap-6.40-7.el7.x86_64 2/2
Verifying : 2:nmap-ncat-6.40-7.el7.x86_64 1/2
Verifying : 2:nmap-6.40-7.el7.x86_64 2/2
Installed:
nmap.x86_64 2:6.40-7.el7
Dependency Installed:
nmap-ncat.x86_64 2:6.40-7.el7
Complete!
[ ~]# nmap -n 192.168.1.100
Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-22 14:51 CET
Nmap scan report for 192.168.1.100
Host is up (0.000016s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds


현재 SFTP 서버에서 열려 있는 유일한 포트는 SSH 22임을 알 수 있습니다. 이제 TEST01 클라이언트에서 SFTP 서버(제 경우 IP: 192.168.1.100)에 액세스해 보겠습니다. 다음은 단계입니다.

['s password:
Connected to 192.168.1.100.
sftp> pwd
Remote working directory: /upload
sftp>

엄청난! 이제 외부에서 SFTP 서버에 액세스할 수 있습니다. 기본 디렉토리는 /upload 입니다. 즉, SFTP 서버 디렉터리에서 이전 구성이 /data/mysftpuser/upload인 경우에도 SFTP는 기본 경로를 /upload로만 표시합니다.
이제 SFTP 서버 디렉터리에서 테스트로 파일을 가져와 보겠습니다. 고객. 먼저 /data/mysftpuser/upload 아래에 테스트 파일을 생성해 보겠습니다. 다음은 단계입니다.

cd /data/mysftpuser/upload
touch testing_file.txt

그런 다음 테스트 사이트 TEST01로 돌아가서 생성된 파일을 가져와 다운로드할 수 있는지 확인합니다.

['s password:
Connected to 192.168.1.100.
sftp> pwd
Remote working directory: /upload
sftp> ls
testing_file.txt
sftp> get testing_file.txt
Fetching /upload/testing_file.txt to testing_file.txt
sftp> quit

훌륭한! SFTP 테스트에 성공했습니다. mysftpuser 사용자를 사용하여 SSH에 액세스해 보겠습니다. 이전과 같이 구성을 /sbin/nologin으로 설정했으므로 사용자는 SSH 서비스를 사용할 수 없습니다.

['s password:
This service allows sftp connections only.
Connection to 192.168.1.100 closed.

멋진! 이제 보안 SFTP 서버가 가동 및 실행됩니다.