반응형

아래와 같이 서브스크립션을 비활성화 해주면, 업데이트 및 패키지 설치가 가능해집니다.

 

sed -i "s/enabled=1/enabled=0/g" /etc/yum/pluginconf.d/subscription-manager.conf

 

반응형
반응형

설명

CentOS에서 패키지를 업데이트할 때, 간혹 GPG Key가 없다는 메세지와 함께 업데이트가 중단되는 경우가 있습니다. 이유야 여러가지가 있겠지만, 보통 해당 /etc/yum.repo 폴더에 xxx.repo와 같은 파일만 설정하거나, 실수로 GPG Key가 삭제된 경우에 많이 발생합니다. 이와 같은 경우 해결방법에 대해서 알아보겠습니다.

 

Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7"

 

 

해결방법1

--nogpgcheck 옵션을 사용하면 패키지를 설치할때 관련 GPG Key를 확인하지 않고 건너뛸수 있으므로, 당장 repo 설정을 변경하기에 부담스러운 경우 간편하게 사용할수 있습니다.

 

[root@localhost ~]# yum install --nogpgcheck [Package]

 

 

 

해결방법2

보다 근본적인 방법은 GPG Key를 복원하는 것입니다. 보통 GPG Key는 해당 Repository의 Release 패키지를 설치하면 자동으로 생성되므로 --nogpgcheck 옵션을 사용하여 관련된 Release 패키지를 설치합니다. 아래는 EPEL과 관련된 Release 패키지를 설치하는 예시입니다.

 

[root@localhost ~]# yum install --nogpgcheck epel-release

 

 

 

반응형
반응형

설명

CentOS 7 환경에서 mail 명령어를 사용하는 간단한 메일 보내기 쉘 프로그램을 작성해 봅니다.

 

 

패키지 설치

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

 

 

 

메일 발송 쉘 프로그램 작성

아래와 같이 간단한 쉘 프로그램으로 메일 발송이 가능합니다.

 

### /root/mail_tester.sh ###
#!/bin/bash
smtp_server="smtp=smtp://192.168.80.171:25"
from_email=sss@testlab.localhost
to_email=aaa@testlab.localhost
cc_email=bbb@testlab.localhost
bcc_email=ccc@testlab.localhost
subject="mail test"
content="mail test"
echo "$content" | /bin/mail -S $smtp_server -s "$subject" -r $from_email $to_email $cc_email $bcc_email

 

### Description ###
smtp_server  : 메일 서버(MTA)와 포트
from_email   : 보내는 사람의 메일 주소
to_email     : 받는 사람의 메일 주소
cc_email     : 참조 메일 주소
bcc_email    : 숨은 참조 메일 주소
subject      : 메일 제목
content      : 메일 내용

 

 

 

 

간단한 웹 모니터링 스트립트

아래와 같이 간단한 웹 모니터링 스크립트를 만들어 보았습니다. for문으로 무한루프가 되도록 설정하고 10초 단위로 특정 웹 사이트의 파일을 읽도록 설정합니다. 파일이 문제없이 읽혀지면 패스하고, 파일을 읽을 수 없을 때는 지정한 서버를 통해서 메일을 전송하도록 설정한 스크립트입니다.

 

### Simple web monitoring script ###

### /root/simple_web_monitoring_script.sh ###
#!/bin/bash

smtp_server="smtp=smtp://192.168.80.171:25"
from_email=sss@testlab.localhost
to_email=aaa@testlab.localhost
cc_email=bbb@testlab.localhost
bcc_email=ccc@testlab.localhost
subject="mail test"
content="mail test"

for (( ; ; ))
do
    curl_result=`curl -s http://192.168.80.191/abc/check.txt`
    if [[ $curl_result == "ok" ]]
    then
        date
        echo -e "Status is OK\n"
        sleep 10
    else
        date
        echo -e "Check failed\n"
        echo "$content" | /bin/mail -S $smtp_server -s "$subject" -r $from_email $to_email $cc_email $bcc_email
        sleep 10
    fi
done

 

### Description ###
192.168.80.171    : 메일 전송 서버(MTA)
192.168.80.191    : 웹 서버
반응형
반응형

설명

CentOS 8에서 lynx 패키지는 PowerTools라는 비활성화된 레포지토리에 존재하므로, 임시로 해당 레포지토리를 활성화하여 설치 방법에 대해서 알아 봅니다.

 

 

 

패키지 설치방법

임시로 PowerTools 레포지토리를 활성화하여 lynx 패키지를 설치합니다.

 

### CentOS 8 ###

### Install the Lynx package ###
[root@localhost ~]# dnf --enablerepo=powertools -y install lynx

 

반응형
반응형

설명

우분투 서버는 터미널 환경에서 대부분의 작업이 가능하지만, 때때로 GUI 환경에서의 작업 효율성이 더 높을 때가 있으므로 우분투 서버의 설치 과정에서 설치할수 없는 GUI 환경인 데스크탑 패키지 설치에 대해서 알아봅니다.

 

 

 

패키지 설치

GUI 환경을 제공하는 패키지인 Ubuntu Desktop을 설치합니다. 패키지 설치가 완료되면 OS를 재시작합니다. OS가 재시작과 함께 GUI 환경의 로그인 화면을 만날수 있습니다. 

 

### Desktop Package Installation ###
root@localhost:~# apt -y install ubuntu-desktop
root@localhost:~# reboot

 

반응형
반응형

설명

CentOS 7에서 CHROOT가 적용된 DNS 서비스를 이중화로 구성합니다. DNS에 질의는 제한된 네트워크에서만 가능하도록 제한합니다.

 

 

 

BIND 버전 및 서버 구성

OS: CentOS 7

BIND Version: 9.11.4-26

마스터: 192.168.80.176

슬레이브1: 192.168.80.177

슬레이브2: 192.168.80.178

 

 

 

Hostname 설정

각 서버의 호스트네임을 설정한후 재접속합니다.

 

### Setting Hostname ###

### Master ###
[root@localhost ~]# hostnamectl set-hostname master

### Slave1 ###
[root@localhost ~]# hostnamectl set-hostname slave1

### Slave2 ###
[root@localhost ~]# hostnamectl set-hostname slave2

 

 

 

SELinux 비활성화

편의상 SELinux를 사용하지 않으므로 비활성화합니다.

 

### Inactive the SELinux ###

### Master ###
[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@master ~]# reboot

### Slave1 ###
[root@slave1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@slave1 ~]# reboot

### Slave2 ###
[root@slave2 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@slave2 ~]# reboot

 

 

 

Firewall 설정

파이어월에 DNS 서비스를 등록합니다.

 

### Register dns service in the firewall ###

### Master ###
[root@master ~]# firewall-cmd --permanent --add-service=dns
[root@master ~]# firewall-cmd --reload

### Slave1 ###
[root@slave1 ~]# firewall-cmd --permanent --add-service=dns
[root@slave1 ~]# firewall-cmd --reload

### Slave2 ###
[root@slave2 ~]# firewall-cmd --permanent --add-service=dns
[root@slave2 ~]# firewall-cmd --reload

 

파이어월 서비스 리스트를 확인하여 방금 추가한 DNS 서비스가 등록되었는지 확인할수 있습니다.

 

### Check the service list registered in the firewall ###

### Master/Slave1/Slave2 ###
[root@master ~]# firewall-cmd --list-services
cockpit dhcpv6-client dns nfs proftpd ssh

[root@master ~]# firewall-cmd --info-service=dns
dns
  ports: 53/tcp 53/udp
  protocols:
  source-ports:
  modules:
  destination:
  includes:
  helpers:

 

 

 

BIND 패키지 설치

DNS 서비스에 필요한 패키지를 설치합니다.

 

### Install the BIND package ###

### Master/Slave1/Slave2 ###
[root@master ~]# yum -y install bind bind-chroot bind-utils

 

DNS 서비스의 자동시작을 활성화하고, DNS 서비스를 시작합니다.

 

### Activate and start the DNS Service ###

### Master/Slave1/Slave2 ###
[root@master ~]# systemctl enable named-chroot
[root@master ~]# systemctl start named-chroot

 

 

 

환경파일 설정

DNS 서비스를 구성하는 환경파일을 설정합니다. 환경파일에서 많은 옵션이 있지만, 이중화 구성에 맞춰서 필요한 부분만 추가 또는 변경하겠습니다. "listen-on port 53"와 "listen-on-v6 port 53"는 각각 Master/Slave1/Slave2의 IP로 설정합니다. 쿼리 질의는 "office-nets"로 제한하며, 그외 네트워크에서 도메인 해석 질의는 거부합니다. 이중화 구성에서 가장 중요한 옵션인 "allow-transfer"를 "none"으로 설정하고, 개별 존에서 "allow-transfer"를 허용하도록 설정하겠습니다. "allow-update"는 "none"이 기본값이지만, 존 정보(레코드)를 업데이트할수 있으므로 명시적으로 "none"으로 설정하며, "allow-transfer"와 같이 필요한 존에 대해서만 개별 설정합니다.

 

### /etc/named.conf ###

### Master ###
acl office-nets {
        192.168.80.0/24;
};

options {
        listen-on port 53      { 192.168.80.176; };
        listen-on-v6 port 53   { fe80::4f4b:783b:ba20:31ae; };
        ...
        allow-query            { office-nets; };
        allow-transfer         { none; };
        allow-update           { none; };
        ...
};

logging {
		...
};

zone "." IN {
		...
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

 

### /etc/named.conf ###

### Slave1 ###
acl office-nets {
        192.168.80.0/24;
};

options {
        listen-on port 53      { 192.168.80.177; };
        listen-on-v6 port 53   { fe80::e88e:f526:fd9e:3215; };
        ...
        allow-query            { office-nets; };
        allow-transfer         { none; };
        allow-update           { none; };
        ...
};

logging {
		...
};

zone "." IN {
		...
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

 

### /etc/named.conf ###

### Slave2 ###
acl office-nets {
        192.168.80.0/24;
};

options {
        listen-on port 53      { 192.168.80.178; };
        listen-on-v6 port 53   { fe80::d834:f330:e901:82ef; };
        ...
        allow-query            { office-nets; };
        allow-transfer         { none; };
        allow-update           { none; };
        ...
};

logging {
		...
};

zone "." IN {
		...
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

 

 

 

Master DNS 서버에서 이중화할 ZONE 설정

Master DNS에서 서비스 및 전송할 존을 설정합니다. 테스트용도로 아래와 같이 포워드 존과 리버스 존 하나씩 설정하겠습니다. 이 두개의 존 정보는 존 트랜트퍼 기능을 사용하여 Slave1과 Slave2로 전송하기 위해서, Slave1과 Slave2의 IP를 설정합니다. 이 두개의 존은 다이나믹 존으로 사용하지 않으므로 "allow-update"를 "none"으로 설정합니다.

 

### /etc/named.rfc1912.zones ###

### Master ###

### Customer's Forward Zone ###
zone "testlab.localhost" IN {
        type master;
        file "master/testlab.localhost.zone";
        allow-transfer { 192.168.80.177; 192.168.80.178; };
        allow-update { none; };
};

### Customer's Reverse Zone ###
zone "80.168.192.in-addr.arpa" IN {
        type master;
        file "master/80.168.192.in-addr.arpa.zone";
        allow-transfer { 192.168.80.177; 192.168.80.178; };
        allow-update { none; };
};

 

포워드 존과 리버스 존 파일을 저장할 master 폴더를 생성합니다.

 

### Make the master folder and change the ownership ###

[root@master ~]# mkdir /var/named/master
[root@master ~]# chown root.named /var/named/master

 

생성한 master 폴더에 포워드 존 파일을 생성하며, DNS 서버에 맞춰서 네임서버도 생성합니다.

 

### /var/named/master/testlab.localhost.zone ###

### Master ###
$TTL 1D
@       IN      SOA     testlab.localhost.      root.testlab.localhost. (
                                        2021120701      ; serial
                                        1D              ; refresh
                                        1H              ; retry
                                        1W              ; expire
                                        3H )            ; minimum
        IN      NS      ns1.testlab.localhost.
        IN      NS      ns2.testlab.localhost.
        IN      NS      ns3.testlab.localhost.

ns1     IN      A       192.168.80.176
ns2     IN      A       192.168.80.177
ns3     IN      A       192.168.80.178

www     IN      A       192.168.80.191
ftp     IN      A       192.168.80.191

 

정방향 영역에 맞춰서 역방향 영역의 존 파일도 함께 생성합니다. 정방향 영역의 레코드에 대응하는 역방향 영역의 레코드인 PTR은 사용하지 않는다면 만들지 않아도 무방합니다. 

 

### /var/named/master/80.168.192.in-addr.arpa.zone ###

### Master ###
$TTL 1D
@       IN      SOA     testlab.localhost.      root.testlab.localhost. (
                                        2021120701      ; serial
                                        1D              ; refresh
                                        1H              ; retry
                                        1W              ; expire
                                        3H )            ; minimum
        IN      NS      ns.testlab.localhost.

191     IN      PTR     www
191     IN      PTR     ftp

 

존 영역 파일의 생성이 끝났다면, master 폴더 및 폴더에 포함된 파일의 소유권을 모두 변경합니다. (폴더 및 존 파일의 소유가 root.root인 경우 도메인 네임 해석이 거부될수도 있으므로, 반드시 소유권을 root.named로 변경합니다)

 

### Change the permission of the added zone ###

### Master ###
[root@master ~]# chown root.named /var/named/master/*

 

 

 

Slave1/Slave2 DNS 서버에서 이중화할 ZONE 설정

실제 존 파일은 Master에서 전송되므로, Slave1/Slave2에서는 Master에서 선언한 존을 아래와 같이 Slave에 맞춰서 설정합니다. (존 파일은 allow-transfer 옵션에 의해서 자동 생성됩니다)

 

### /etc/named.rfc1912.zones ###

### Slave1/Slave2 ###

### Customer's Forward Zone ###
zone "testlab.localhost" IN {
        type slave;
        file "slaves/testlab.localhost.zone";
        masters { 192.168.80.176; };
};

### Customer's Reverse Zone ###
zone "80.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/80.168.192.in-addr.arpa.zone";
        masters { 192.168.80.176; };
};

 

Slave로 전송되는 존 파일은 성능향샹을 위해서 바이너리로 포멧되므로, 해당 존 파일은 열어보거나 편집할수 없습니다. 만약 일반 텍스트로 존 파일의 전송을 원한다면 아래와 같이 "masterfile-format text" 옵션을 추가한후 "named-chroot" 데몬을 재시작합니다.

 

### /etc/named.rfc1912.zones ###

### Slave1/Slave2 ###

### Customer's Forward Zone ###
zone "testlab.localhost" IN {
        type slave;
        file "slaves/testlab.localhost.zone";
        masterfile-format text;
        masters { 192.168.80.176; };
};

### Customer's Reverse Zone ###
zone "80.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/80.168.192.in-addr.arpa.zone";
        masterfile-format text;
        masters { 192.168.80.176; };
};

 

 

 

존 데이터 동기화

각 Slave에서 DNS를 시작하면 특별한 문제가 없는한 Master에서 바로 존 파일을 전송받으며, 아래와 같이 해당 존 파일이 생성됩니다.

 

### Zone data synchronization between master and slave1/slave2  ###

### Slave1 ###
[root@slave1 ~]# systemctl restart named-chroot
[root@slave1 ~]# ls -l /var/named/slaves
-rw-r--r-- 1 named named 314 Dec  7 17:36 80.168.192.in-addr.arpa.zone
-rw-r--r-- 1 named named 337 Dec  7 17:31 testlab.localhost.zone

### Slave2 ###
[root@slave2 ~]# systemctl restart named-chroot
[root@slave1 ~]# ls -l /var/named/slaves
-rw-r--r-- 1 named named 314 Dec  7 17:36 80.168.192.in-addr.arpa.zone
-rw-r--r-- 1 named named 337 Dec  7 17:31 testlab.localhost.zone

 

반응형
반응형

설명

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