반응형

설명

Linux System의 사용자 계정 정보를 대신하여, ProFTPD의 ftpasswd 명령어를 사용하여 사용자 계정을 생성/변경/삭제 하는 방법에 대해서 알아 봅니다. 

 

 

사용자 계정 추가

ftpasswd 명령어 바로 뒤에 붙는 --passwd는 사용자 계정의 생성/편집/삭제 등에 사용하는 옵션입니다. 그외에 --group와 --hash가 있습니다. --group 옵션은 사용자 그룹의 생성/편집/삭제에 사용하며, --hash 옵션은 사용자 계정의 패스워드를 재발급할때 사용할수 있습니다.

 

아래와 같은 형식으로 ftpasswd 명령어로 사용자 계정을 생성할수 있습니다. 주의할 점은 ftpasswd 명령어는 사용하는 위치에서 ftpd.passwd 파일이 생성되므로, ftpd.passwd 파일이 있는 폴더에서 ftpasswd 명령어를 실행하거나, --file 옵션으로 ftpd.passwd의 위치를 명시하여 실행합니다. 아래 옵션중에서 --name과 --uid, --gid, --home 등은 임의로 지정하였으며, --shell은 쉘 환경을 제공하지 않도록 설정하였습니다. 보통 -shell 옵션은 "RequireValidShell off" 옵션과 함께 사용합니다.

### CentOS 7 ###


### Execute the command ###
[root@localhost ~]# ftpasswd --passwd --name=test1 --uid=10001 --gid=10001 --file=/etc/proftpd/ftpd.passwd \
--home=/data/test1 --shell=/bin/false

ftpasswd: using alternate file: /etc/proftpd/ftpd.passwd
ftpasswd: creating passwd entry for user test1

ftpasswd: /bin/false is not among the valid system shells.  Use of
ftpasswd: "RequireValidShell off" may be required, and the PAM
ftpasswd: module configuration may need to be adjusted.

Password: **********
Re-type password: **********

ftpasswd: entry created


### Description ###
--passwd                         : 사용자 계정의 생성/편집/삭제와 관련된 작업에서 사용되는 옵션
--name=test1                     : 사용자 계정의 이름 지정
--uid=10001                      : 사용자 유저 ID 설정
--gid=10001                      : 사용자 그룹 ID 설정
--file=/etc/proftpd/ftpd.passwd  : 사용자 계정 정보가 저장될 파일 설정
--home=/data/test1               : 사용자 홈 폴더 설정
--shell=/bin/false               : 사용자 쉘 환경 설정


### Reference ###
"--shell=/bin/false" 옵션은 환경설정 파일인 "/etc/proftpd.conf"에서 "RequireValidShell off" 항목과 함께 설정합니다.

 

 

사용자 계정 정보 변경

등록한 사용자 계정의 패스워드를 변경할때는 ftpasswd 명령어에 --change-password 옵션을 추가하여 실행합니다.

### CentOS 7 ###


### Execute the command ###
[root@localhost ~]# ftpasswd --passwd --change-password --name=test1 --file=/etc/proftpd/ftpd.passwd

ftpasswd: using alternate file: /etc/proftpd/ftpd.passwd
ftpasswd: updating passwd entry for user test1

ftpasswd: /bin/false is not among the valid system shells.  Use of
ftpasswd: "RequireValidShell off" may be required, and the PAM
ftpasswd: module configuration may need to be adjusted.

Password: **********
Re-type password: **********

ftpasswd: entry updated


### Description ###
--change-password                : 사용자 계정의 패스워드 변경
--name=test1                     : 사용자 계정의 이름 지정
--file=/etc/proftpd/ftpd.passwd  : 사용자 계정 정보가 저장될 파일 설정

 

사용자 계정의 홈 폴더의 위치를 변경할때는 ftpasswd 명령어에 --change-home 옵션을 붙여서 실행합니다. --home 옵션은 변경할 홈폴더 위치를 입력하는 것에 주의합니다.

### CentOS 7 ###


### Execute the command ###
[root@localhost ~]# ftpasswd --passwd --change-home --name=test1 --uid=10001 --gid=10001 \
--file=/etc/proftpd/ftpd.passwd --home=/data/test10 --shell=/bin/false

ftpasswd: using alternate file: /etc/proftpd/ftpd.passwd
ftpasswd: updating passwd entry for user test1

ftpasswd: /bin/false is not among the valid system shells.  Use of
ftpasswd: "RequireValidShell off" may be required, and the PAM
ftpasswd: module configuration may need to be adjusted.

Password: **********
Re-type password: **********

ftpasswd: entry updated


### Description ###
--passwd                         : 사용자 계정의 생성/편집/삭제와 관련된 작업에서 사용되는 옵션
--change-password                : 사용자 계정의 패스워드 변경 옵션
--name=test1                     : 사용자 계정의 이름 지정
--uid=10001                      : 사용자 유저 ID 설정
--gid=10001                      : 사용자 그룹 ID 설정
--file=/etc/proftpd/ftpd.passwd  : 사용자 계정 정보가 저장될 파일 설정
--home=/data/test10              : 변경할 사용자 홈 폴더 지정 (test1 → test10)
--shell=/bin/false               : 사용자 쉘 환경 설정

 

 

사용자 계정 삭제

사용자 계정 삭제는 --delete-user 옵션을 추가하여 실행합니다. 사용자 계정이 삭제되는 과정에서 확인 과정없이 바로 삭제되므로 주의해서 사용합니다. 

### CentOS 7 ###


### Execute the command ###
[root@localhost ~]# ftpasswd --passwd --delete-user --name=test1 --file=/etc/proftpd/ftpd.passwd

ftpasswd: using alternate file: /etc/proftpd/ftpd.passwd
ftpasswd: updating passwd entry for user test1
ftpasswd: entry deleted


### Description ###
--passwd                         : 사용자 계정의 생성/편집/삭제와 관련된 작업에서 사용되는 옵션
--delete-user                    : 사용자 계정 삭제 옵션
--name=test1                     : 사용자 계정의 이름 지정
--file=/etc/proftpd/ftpd.passwd  : 사용자 계정 정보가 저장될 파일 설정

 

 

사용자 그룹 생성

그룹의 생성/편집/삭제 작업에 사용되는 옵션은 --group입니다. --name 옵션을 기준으로 그룹이 생성되므로 --name 옵션 값이 같고 --gid 값이 다른 경우, --gid 값이 덮어써지므로 주의가 필요합니다. 

### CentOS 7 ###


### Execute the command ###
[root@localhost proftpd]# ftpasswd --group --name=test --gid=10101 --file=/etc/proftpd/ftpd.group

ftpasswd: using alternate file: /etc/proftpd/ftpd.group
ftpasswd: updating group entry for group test
ftpasswd: entry updated


### Description ###
--group                         : 그룹의 생성/편집/삭제와 관련된 작업에서 사용되는 옵션
--name=test                     : 그룹 이름 설정
--gid=10101                     : 사용자 그룹 ID 설정
--file=/etc/proftpd/ftpd.group  : 그룹 정보가 저장될 파일 설정

 

그룹을 생성할때 사용자 계정을 추가하거나 생성된 그룹에 사용자 계정을 추가할때 --member 옵션을 사용합니다.

### CentOS 7 ###


### Execute the command ###
[root@localhost ~]# ftpasswd --group --name=test --gid=10101 --member=test1 --member=test2 \
--file=/etc/proftpd/ftpd.group

ftpasswd: using alternate file: /etc/proftpd/ftpd.group
ftpasswd: updating group entry for group test
ftpasswd: entry updated


### Description ###
--group                         : 그룹의 생성/편집/삭제와 관련된 작업에서 사용되는 옵션
--name=test                     : 그룹 이름 설정
--gid=10101                     : 사용자 그룹 ID 설정
--member=test1                  : 그룹 생성과 함께 추가할 사용자 계정
--member=test2                  : 그룹 생성과 함께 추가할 사용자 계정
--file=/etc/proftpd/ftpd.group  : 그룹 정보가 저장될 파일 설정

 

 

사용자 그룹에 사용자 계정 추가 및 삭제

test 라는 그룹에 test3 이라는 새로운 사용자 계정을 추가합니다. 새로운 사용자 계정을 추가할때 주의할 점은 반드시 기존 사용자 계정 정보와 함께 선언해주어야만 합니다. 기존 사용자 계정을 빼고 새로운 사용자 계정만 선언하면, 그룹에 포함되어 있던 기존 사용자는 삭제됩니다.

### CentOS 7 ###


### Execute the command ###
[root@localhost ~]# ftpasswd --group --name=test --gid=10101 --member=test1 --member=test2 --member=test3 \
--file=/etc/proftpd/ftpd.group

ftpasswd: using alternate file: /etc/proftpd/ftpd.group
ftpasswd: updating group entry for group test
ftpasswd: entry updated


### Description ###
--group                         : 그룹의 생성/편집/삭제와 관련된 작업에서 사용되는 옵션
--name=test                     : 그룹 이름 설정
--gid=10101                     : 사용자 그룹 ID 설정
--member=test1                  : 그룹에 포함된 기존 사용자 계정
--member=test2                  : 그룹에 포함된 기존 사용자 계정
--member=test3                  : 그룹에 포함할 새 사용자 계정
--file=/etc/proftpd/ftpd.group  : 그룹 정보가 저장될 파일 설정

 

그룹에서 삭제할 사용자 계정을 빼고 기존 사용자 계정만 선언한 ftpasswd 명령문을 실행합니다.

### CentOS 7 ###


### Execute the command ###
[root@localhost ~]# ftpasswd --group --name=test --gid=10101 --member=test1 --member=test2 \
--file=/etc/proftpd/ftpd.group

ftpasswd: using alternate file: /etc/proftpd/ftpd.group
ftpasswd: updating group entry for group test
ftpasswd: entry updated


### Description ###
--group                         : 그룹의 생성/편집/삭제와 관련된 작업에서 사용되는 옵션
--name=test                     : 그룹 이름 설정
--gid=10101                     : 사용자 그룹 ID 설정
--member=test1                  : 그룹에 포함된 기존 사용자 계정
--member=test2                  : 그룹에 포함된 기존 사용자 계정
--member=test3                  : 그룹에서 삭제할 사용자 계정
--file=/etc/proftpd/ftpd.group  : 그룹 정보가 저장될 파일 설정

 

 

사용자 그룹 삭제

그룹을 삭제할때는 "--delete-group" 옵션을 사용합니다.

### CentOS 7 ###


### Execute the command ###
[root@localhost ~]# ftpasswd --group --delete-group --name=test --file=/etc/proftpd/ftpd.group

ftpasswd: using alternate file: /etc/proftpd/ftpd.group
ftpasswd: creating group entry for group test
ftpasswd: entry deleted


### Description ###
--group                         : 그룹의 생성/편집/삭제와 관련된 작업에서 사용되는 옵션
--delete-group                  : 그룹 삭제 옵션
--name=test                     : 삭제할 그룹 이름을 지정
--file=/etc/proftpd/ftpd.group  : 그룹 정보가 저장될 파일 설정
반응형

'FTP > ProFTPD' 카테고리의 다른 글

[ProFTPD] CentOS 7에서 ProFTPD로 SFTP 서비스  (0) 2021.11.24
반응형

설명

ProFTPD에서 "SFTP 모듈" + "ftpasswd로 생성한 사용자 계정"으로 SFTP 서비스를 구현하는데 필요한 설정을 살펴보겠습니다. 접속환경은 Putty를 기반으로하는 FileZilla나 WinSCP와 같은 프로그램으로 제한합니다.

 

 

SELinux 비활성화

SELinux는 사용하지 않으므로 비활성화 하겠습니다. "setenforce 0"는 퍼미시브 모드로 경고 메세지만 표시되도록 하며, 완전한 비활성화는 "sed -i xxx"를 실행후 OS가 재시작되면 적용됩니다. 

### Inactive the SELinux ###
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@localhost ~]# reboot

 

 

Firewall 설정

Firewall이 동작중이라면 Firewall에 SFTP 서비스의 등록이 필요하므로, 아래와 같이 SFTP에 사용할 포트를 포함한 SFTP 서비스를 등록합니다. (SFTP 서비스 포트는 2022를 사용합니다)

### Add ProFTPD Service to the firewall ###
[root@localhost ~]# firewall-cmd --permanent --zone=public --new-service=sftp
[root@localhost ~]# firewall-cmd --permanent --service=sftp --add-port=2022/tcp
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=sftp
[root@localhost ~]# firewall-cmd --reload

### Check ProFTPD Service on the firewall ###
[root@localhost ~]# firewall-cmd --list-service
cockpit dhcpv6-client sftp ssh

### Check ProFTPD Service Port on the firewall ###
[root@localhost ~]# firewall-cmd --info-service=sftp
sftp
  ports: 2022/tcp
  protocols:
  source-ports:
  modules:
  destination:
  includes:
  helpers:

 

 

설치

최소 설치한 CentOS 7에는 ProFTPD 설치 패키지가 포함되어 있지 않으므로 EPEL 레포지토리를 설치한 후, ProFTPD 관련 패키지를 설치합니다. "proftpd-utils" 패키지는 확장 모듈 및 명령어를 사용하기 위해서 필요하므로 같이 설치합니다.

### Install the EPEL Repository ###
[root@localhost ~]# yum -y install epel-release

### Install the Proftpd packages ###
[root@localhost ~]# yum -y install proftpd proftpd-utils

 

 

환경파일 설정

앞서 설명한 것과 같이 ProFTPD의 기본 인증방법인 PAM을 대신하여 ftpasswd 명령어로 생성한 계정으로 인증을 대체하기 위해서 관련 내용을 추가하여 환경 파일을 설정합니다.

### /etc/proftpd.conf ###

ServerName                      "FTP server"
ServerIdent                     on "FTP Server ready."
ServerAdmin                     root@localhost

DefaultServer                   on
DefaultRoot                     ~ !adm

#AuthPAM                        off
#AuthPAMConfig                  proftpd
AuthUserFile                    /etc/proftpd/ftpd.passwd
AuthGroupFile                   /etc/proftpd/ftpd.group
AuthOrder                       mod_auth_file.c

IdentLookups                    off
UseReverseDNS                   off
UseSendfile                     off

User                            nobody
Group                           nobody

RootLogin                       off
RequireValidShell               off

MaxInstances                    100

LogFormat                       default "%h %l %u %t \"%r\" %s %b"
LogFormat                       auth    "%v [%P] %h %t \"%r\" %s"

LoadModule mod_ctrls_admin.c
LoadModule mod_sftp.c
LoadModule mod_sftp_pam.c
LoadModule mod_vroot.c

ModuleControlsACLs              insmod,rmmod allow user root
ModuleControlsACLs              lsmod allow user *

ControlsEngine                  on
ControlsACLs                    all allow user root
ControlsSocketACL               allow user *
ControlsLog                     /var/log/proftpd/controls.log

TimesGMT                        off
TimeoutIdle                     600
TimeoutLogin                    300
TimeoutNoTransfer               600
TimeoutStalled                  600

<IfModule mod_ctrls_admin.c>
  AdminControlsEngine           on
  AdminControlsACLs             all allow user root
</IfModule>

<IfModule mod_sftp.c>
  SFTPEngine                    on
  SFTPLog                       /var/log/proftpd/sftp.log
  Port                          2022
  SFTPHostKey                   /etc/proftpd/ssh/ssh_host_rsa_key
  SFTPHostKey                   /etc/proftpd/ssh/ssh_host_dsa_key
  SFTPHostKey                   /etc/proftpd/ssh/ssh_host_ecdsa_key
  SFTPCompression               delayed
  MaxLoginAttempts              1000
  DefaultRoot                   ~
  SFTPAuthMethods               publickey
  SFTPAuthorizedUserKeys        file:/etc/proftpd/key/%u/authorized_keys
</IfModule>

<IfModule mod_vroot.c>
  VRootEngine                   on
</IfModule>

<IfDefine TLS>
  TLSEngine                     on
  TLSRequired                   on
  TLSRSACertificateFile         /etc/pki/tls/certs/proftpd.pem
  TLSRSACertificateKeyFile      /etc/pki/tls/certs/proftpd.pem
  TLSCipherSuite                ALL:!ADH:!DES
  TLSOptions                    NoCertRequest
  TLSVerifyClient               off
  #TLSRenegotiate               ctrl 3600 data 512000 required off timeout 300
  TLSLog                        /var/log/proftpd/tls.log

  <IfModule mod_tls_shmcache.c>
    TLSSessionCache             shm:/file=/var/run/proftpd/sesscache
  </IfModule>

</IfDefine>

<IfDefine DYNAMIC_BAN_LISTS>
  LoadModule                    mod_ban.c
  BanEngine                     on
  BanLog                        /var/log/proftpd/ban.log
  BanTable                      /var/run/proftpd/ban.tab
  BanOnEvent                    MaxLoginAttempts 5/00:10:00 01:00:00
  BanMessage                    "Host %a has been banned"
  BanControlsACLs               all allow user ftpadm
</IfDefine>

<IfDefine QOS>
  LoadModule                    mod_qos.c
  QoSOptions                    dataqos throughput ctrlqos lowdelay
</IfDefine>

<Global>
  Umask                         022
  AllowOverwrite                yes

  <Limit ALL SITE_CHMOD>
    AllowAll
  </Limit>

</Global>

 

 

SSH Host Key 생성

ProFTPD의 SFTP 모듈을 사용하므로, SSH Host Key를 별도 생성합니다.

### Create folder for SSH Host Key ###
[root@localhost ~]# mkdir -p /etc/proftpd/ssh

### Create SSH Host Key ###
[root@localhost ~]# ssh-keygen -m PEM -f /etc/proftpd/ssh/ssh_host_dsa_key -N '' -t dsa
[root@localhost ~]# ssh-keygen -m PEM -f /etc/proftpd/ssh/ssh_host_rsa_key -N '' -t rsa -b 3072
[root@localhost ~]# ssh-keygen -m PEM -f /etc/proftpd/ssh/ssh_host_ecdsa_key -N '' -t ecdsa -b 521

 

 

사용자 계정 및 그룹 생성

사용자 계정은 ftpasswd 명령어에 --passwd 옵션을 붙여서 생성하며, 사용자 그룹은 ftpasswd 명령어에 --group 옵션을 붙여서 생성합니다.

### Create a ProFTPD User named test1 ###
[root@localhost ~]# ftpasswd --passwd --name=test1 --uid=10001 --gid=10001 --file=/etc/proftpd/ftpd.passwd \
--home=/data/www/test1 --shell=/bin/false

ftpasswd: using alternate file: /etc/proftpd/ftpd.passwd
ftpasswd: creating passwd entry for user test1

ftpasswd: /bin/false is not among the valid system shells.  Use of
ftpasswd: "RequireValidShell off" may be required, and the PAM
ftpasswd: module configuration may need to be adjusted.

Password: **********
Re-type password: **********

ftpasswd: entry created

 

### Create a ProFTPD Group for test1 ###
[root@localhost ~]# ftpasswd --group --name=test1 --gid=10001 --file=/etc/proftpd/ftpd.group

 

 

사용자 계정의 Private와 Public Key 생성

사용자 계정의 Private와 Public Key를 생성합니다. Private Key를 생성할 때, 분실을 상정하여 패스워드를 입력합니다. 입력한 패스워드는 추후 로그인 과정에서 사용됩니다.

### Create a Key Directory ###
[root@localhost ~]# mkdir -p /etc/proftpd/key/test1

### Create Private and Public Keys ###
[root@localhost ~]# ssh-keygen -f /etc/proftpd/key/test1/test1
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): **********
Enter same passphrase again: **********
Your identification has been saved in /etc/proftpd/key/test1/test1.
Your public key has been saved in /etc/proftpd/key/test1/test1.pub.
The key fingerprint is:
SHA256:DDJzC9gzEFkhNt5yuMCn5EDPBas9JlG8rKs1ovudKuA root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| .B*+o           |
|oo=Xo            |
|o+*=% o          |
|+.** O +         |
| =o+  . S        |
|..o .            |
|+ +              |
|oE o .           |
|=+o.o            |
+----[SHA256]-----+

### Create a Authorized Key with Public Key ###
[root@localhost ~]# ssh-keygen -e -f /etc/proftpd/key/test1/test1.pub > /etc/proftpd/key/test1/authorized_keys

### Change the Authorized Key Permision ###
[root@localhost ~]# chmod 600 /etc/proftpd/key/test1/authorized_keys

 

FileZilla나 WinSCP와 같은 프로그램에서 ProFTPD SFTP로 접속하려면 별도의 ppk 파일이 필요하므로, 기존 Private Key를 ppk 형식의 파일로 변환해서 저장합니다. 변환 과정에서 패스워드 입력란에 앞서 Private Key를 생성할때 입력한 패스워드를 입력해 주세요.


### Install putty package ###
[root@localhost ~]# yum -y install putty

### Create a Private Key for Putty Format ###
[root@localhost ~]# puttygen /etc/proftpd/key/test1/test1 -o /etc/proftpd/key/test1/test1.ppk
Enter passphrase to load key: **********

 

 

홈 폴더 생성

사용자 계정의 홈 폴더를 생성하고 소유권을 설정합니다.

### Create a Home Folder for test1 ###
[root@localhost ~]# mkdir -p /data/www/test1

### Change ownership of test1 Home Folder ###
[root@localhost ~]# chown 10001.10001 /data/www/test1

 

 

서비스 재시작

설정이 완료되었다면 테스트 전에 ProFTPD 서비스를 재시작합니다.

### Enable ProFTPD Service ###
[root@localhost ~]# systemctl enable proftpd

### Start ProFTPD Service ###
[root@localhost ~]# systemctl start proftpd

 

접속 테스트

접속 테스트는 FileZilla로 진행합니다. 접속 테스트에서 로그인 유형을 "키 파일" 형식으로 진행하므로, WinSCP와 같은 어플리케이션을 사용하여 앞서 생성해둔 ppk 파일을 사전에 다운로드해 둡니다. ppk 파일의 준비가 끝났다면, 아래와 같이 FileZilla를 실행한후, 접속할 호스트 및 포트 로그인 유형, 사용자, 키 파일 등을 설정한후 연결을 클릭합니다.

 

사전에 등록한 SSH Host Key가 등록되어 있지 않다는 메시지가 출력되면 "항상 이 호스트를 신뢰하고 이 키를 캐쉬에 등록"을 선택후 확인을 클릭합니다.  

 

ppk 파일에 포함된 패스워드를 입력하는 부분입니다. Private Key를 발급할때 또는 Private Key를 ppk 형식으로 변환할때 사용한 패스워드를 입력하고 확인을 클릭합니다.

 

접속에 성공한 화면입니다.

 

반응형

'FTP > ProFTPD' 카테고리의 다른 글

[ProFTPD] ftpasswd로 사용자 생성/편집/삭제  (0) 2021.12.02

+ Recent posts