웹사이트 검색

CentOS 7.2에서 PureFTPd, MariaDB 및 가상 사용자(할당량 및 대역폭 관리 포함)가 포함된 FTP 서버


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 센트OS 7.2
  • 센트OS 5.3

이 페이지에서

  1. 1 서문
  2. 2 MySQLphpMyAdmin 설치
  3. 3 MySQL/MariaDB 지원으로 PureFTPd 설치
  4. 4 PureFTPd용 데이터베이스 생성
  5. 5 PureFTPd 구성
  6. 6 데이터베이스 채우기 및 서버 테스트
  7. 7 데이터베이스 관리
  8. 8 익명 FTP
  9. 9 이 CentOS 7.2 서버를 가상 머신으로 다운로드
  10. 10개의 링크

이 문서에서는 실제 시스템 사용자 대신 MariaDB(MySQL 호환) 데이터베이스의 가상 사용자를 사용하는 PureFTPd 서버를 설치하는 방법을 설명합니다. 이것은 훨씬 더 성능이 좋으며 단일 시스템에서 수천 명의 FTP 사용자를 가질 수 있습니다. 그 외에도 이 설정으로 할당량 사용 및 업로드/다운로드 대역폭 제한을 보여드리겠습니다. 암호는 데이터베이스에 MD5 문자열로 암호화되어 저장됩니다.

MariaDB 데이터베이스 관리를 위해 이 하우투에도 설치될 phpMyAdmin과 같은 웹 기반 도구를 사용할 수 있습니다. phpMyAdmin은 편안한 그래픽 인터페이스로, 명령줄을 복잡하게 다룰 필요가 없습니다.

이 튜토리얼은 CentOS 7.2를 기반으로 합니다. 기본적인 최소 CentOS 7.2 시스템은 이미 설정되어 있어야 합니다.

이 하우투는 실용적인 가이드를 의미합니다. 그것은 이론적 배경을 다루지 않습니다. 그들은 웹의 다른 많은 문서에서 처리됩니다.

이 문서는 어떤 종류의 보증 없이 제공됩니다! 나는 이것이 그러한 시스템을 설정하는 유일한 방법이 아니라고 말하고 싶습니다. 이 목표를 달성하는 방법에는 여러 가지가 있지만 이것이 제가 취하는 방법입니다.

1 서문

이 자습서에서는 호스트 이름 server1.example.com을 IP 주소 192.168.1.100과 함께 사용합니다. 이러한 설정은 사용자에 따라 다를 수 있으므로 적절하게 교체해야 합니다.

2 MySQLphpMyAdmin 설치

먼저, 이 튜토리얼 과정에서 설치할 일부 패키지는 공식 CentOS 7.2 리포지토리에서 사용할 수 없으므로 CentOS 시스템에서 EPEL 리포지토리를 활성화합니다.

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

그런 다음 이 튜토리얼 과정에서 설치할 많은 패키지가 공식 CentOS 7 리포지토리에서 사용할 수 없으므로 CentOS 시스템에서 EPEL 리포지토리를 활성화합니다.

yum -y install epel-release
yum -y install yum-priorities

편집 /etc/yum.repos.d/epel.repo...

nano /etc/yum.repos.d/epel.repo

... 그리고 [epel] 섹션에 priority=10 행을 추가합니다.

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[...]

그런 다음 시스템에서 기존 패키지를 업데이트합니다.

yum update

이제 다음과 같이 Apache 웹 서버, PHP, MariaDB 및 phpMyAdmin을 설치할 수 있습니다.

yum -y install mariadb mariadb-server phpmyadmin httpd php

이제 phpMyAdmin을 구성합니다. phpMyAdmin이 localhost뿐만 아니라 연결을 허용하도록 Apache 구성을 변경합니다( 스탠자에 있는 모든 항목을 주석 처리하고 Require all registered 줄을 추가하여).

nano /etc/httpd/conf.d/phpMyAdmin.conf

파일이 다음과 같이 표시되도록 합니다.

# phpMyAdmin - Web based MySQL browser written in php
#
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
AddDefaultCharset UTF-8 # <IfModule mod_authz_core.c> # # Apache 2.4 # <RequireAny> # Require ip 127.0.0.1 # Require ip ::1 # </RequireAny> # </IfModule> # <IfModule !mod_authz_core.c> # # Apache 2.2 # Order Deny,Allow # # Deny from All # Allow from 127.0.0.1 Options Indexes AllowOverride None Require all granted # Allow from ::1 # </IfModule> </Directory> <Directory /usr/share/phpMyAdmin/setup/> <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> Require ip 127.0.0.1 Require ip ::1 </RequireAny> </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory> # These directories do not require access over HTTP - taken from the original # phpMyAdmin upstream tarball # <Directory /usr/share/phpMyAdmin/libraries/> Order Deny,Allow Deny from All Allow from None </Directory> <Directory /usr/share/phpMyAdmin/setup/lib/> Order Deny,Allow Deny from All Allow from None </Directory> <Directory /usr/share/phpMyAdmin/setup/frames/> Order Deny,Allow Deny from All Allow from None </Directory> # This configuration prevents mod_security at phpMyAdmin directories from # filtering SQL etc. This may break your mod_security implementation. # #<IfModule mod_security.c> # <Directory /usr/share/phpMyAdmin/> # SecRuleInheritance Off # </Directory> #</IfModule>

그런 다음 MySQL 및 Apache에 대한 시스템 시작 링크를 만들고(시스템이 부팅될 때마다 둘 다 자동으로 시작되도록) 두 서비스를 모두 시작합니다.

서버에 CentOS Firewall \firewalld\가 설치되어 있으면 http 및 https 포트를 엽니다.

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

그런 다음 MariaDB와 Aapche를 시작합니다.

systemctl enable mariadb.service
systemctl start mariadb.service
systemctl enable httpd.service
systemctl start httpd.service

MySQL 사용자 루트에 대한 암호를 만듭니다(yourmariadbpassword를 사용하려는 암호로 바꿉니다).

mysql_secure_installation

[[이메일 보호됨] ~]#

3 MySQL/MariaDB 지원으로 PureFTPd 설치

CentOS PureFTPd 패키지는 MySQL, PostgreSQL, LDAP 등과 같은 다양한 백엔드를 지원합니다. 따라서 일반 PureFTPd 패키지를 설치하기만 하면 됩니다.

yum -y install pure-ftpd

그런 다음 모든 가상 사용자가 매핑될 ftp 그룹(ftpgroup) 및 사용자(ftpuser)를 만듭니다. 그룹 및 사용자 ID 2001을 시스템에서 사용 가능한 번호로 바꿉니다.

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

다음과 같이 방화벽 cmd에서 ftp 서비스를 허용해야 합니다.

firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload

4 PureFTPd용 데이터베이스 생성

이제 pureftpd라는 데이터베이스와 PureFTPd 데몬이 나중에 pureftpd 데이터베이스에 연결하는 데 사용할 pureftpd라는 MariaDB 사용자를 만듭니다.

mysql -u root -p
CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;

문자열 ftpdpass를 MySQL 사용자 pureftpd에 사용하려는 비밀번호로 바꾸십시오. 여전히 MySQL 셸에서 필요한 데이터베이스 테이블을 만듭니다(예, 테이블이 하나만 있습니다!).

USE pureftpd;
CREATE TABLE ftpd (
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) ENGINE=MyISAM;
quit;

알다시피, 종료와 함께; 명령 우리는 MySQL 셸을 떠났고 Linux 셸로 돌아왔습니다.

BTW, (FTP 서버 시스템의 호스트 이름이 server1.example.com이라고 가정) http://server1.example.com/phpMyAdmin/에서 phpMyAdmin에 액세스할 수 있습니다(server1.example 대신 IP 주소를 사용할 수도 있음). .com)을 열고 사용자 pureftpd로 로그인합니다. 그런 다음 데이터베이스를 볼 수 있습니다. 나중에 phpMyAdmin을 사용하여 PureFTPd 서버를 관리할 수 있습니다.

5 PureFTPd 구성

/etc/pure-ftpd/pure-ftpd.conf를 편집하고 ChrootEveryone, MySQLConfigFile 및 CreateHomeDir 행이 활성화되고 다음과 같이 표시되는지 확인합니다.

nano /etc/pure-ftpd/pure-ftpd.conf
[...]
ChrootEveryone              yes
[...]
MySQLConfigFile               /etc/pure-ftpd/pureftpd-mysql.conf
[...]
CreateHomeDir               yes
[...]

ChrootEveryone 설정은 PureFTPd가 자신의 홈 디렉토리에 있는 모든 가상 사용자를 chroot로 만들어 홈 디렉토리 외부의 디렉토리와 파일을 탐색할 수 없게 합니다. CreateHomeDir 행은 사용자가 로그인하고 홈 디렉토리가 아직 존재하지 않을 때 PureFTPd가 사용자 홈 디렉토리를 생성하도록 합니다.

그런 다음 /etc/pure-ftpd/pureftpd-mysql.conf를 편집합니다. 다음과 같아야 합니다.

cp /etc/pure-ftpd/pureftpd-mysql.conf /etc/pure-ftpd/pureftpd-mysql.conf_orig
cat /dev/null > /etc/pure-ftpd/pureftpd-mysql.conf
nano /etc/pure-ftpd/pureftpd-mysql.conf
MYSQLSocket      /var/lib/mysql/mysql.sock
#MYSQLServer     localhost
#MYSQLPort       3306
MYSQLUser       pureftpd
MYSQLPassword   ftpdpass
MYSQLDatabase   pureftpd
#MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt      md5
MYSQLGetPW      SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetUID     SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetGID     SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetDir     SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTASZ   SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTAFS   SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")

MYSQLPassword 라인에서 ftpdpass 문자열을 MySQL 사용자 pureftpd의 실제 암호로 바꾸었는지 확인하십시오! 우리는 MYSQLCrypt 방식으로 md5를 사용합니다. 즉, 일반 텍스트 암호를 사용하는 것보다 훨씬 더 안전한 데이터베이스에 MD5 문자열로 사용자 암호를 저장한다는 의미입니다!

이제 PureFTPd에 대한 시스템 시작 링크를 만들고 시작합니다.

systemctl enable pure-ftpd.service
systemctl start pure-ftpd.service

6 데이터베이스 채우기 및 서버 테스트

데이터베이스를 채우려면 MySQL 셸을 사용할 수 있습니다.

mysql -u root -p
USE pureftpd;

이제 상태 1(ftp 계정이 활성 상태임을 의미), 암호 비밀(MySQL의 MD5 기능을 사용하여 암호화되어 저장됨), UID 및 GID 2001(사용자의 사용자 ID 및 그룹 ID 사용/ 2단계 끝에서 생성한 그룹!), 홈 디렉터리 /home/www.example.com, 업로드 및 다운로드 대역폭 100KB/초. (초당 킬로바이트), 할당량 50MB:

INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100', '', '*', '50', '0');
quit;

이제 워크 스테이션에서 FTP 클라이언트 프로그램(Windows 시스템에 있는 경우 FileZilla 또는 Linux 데스크탑에 있는 gFTP)을 열고 연결을 시도하십시오. 호스트 이름으로 server1.example.com(또는 시스템의 IP 주소)을 사용하고 사용자 이름은 exampleuser이고 비밀번호는 secret입니다.

연결할 수 있다면 축하합니다! 그렇지 않은 경우 문제가 발생한 것입니다.

이제 실행하면

ls -l /home

디렉토리 /home/www.example.com(exampleusers 홈 디렉토리)이 자동으로 생성되고 ftpuser 및 ftpgroup(2단계 끝에서 생성한 사용자/그룹)이 소유하고 있음을 확인할 수 있습니다.

[ ~]#

7 데이터베이스 관리

대부분의 사람들에게는 MySQL에 대한 그래픽 프런트 엔드가 있으면 더 쉽습니다. 따라서 phpMyAdmin(이 예에서는 http://server1.example.com/phpMyAdmin/ 아래)을 사용하여 pureftpd 데이터베이스를 관리할 수도 있습니다.

새 사용자를 만들 때마다 ftpd 테이블에 항목을 만들어야 하므로 여기에서 이 테이블의 열에 대해 설명하겠습니다.

FTPD 테이블:

8 익명 FTP

익명의 ftp 계정(비밀번호 없이 누구나 로그인할 수 있는 ftp 계정)을 만들려면 사용자와 ftp라는 그룹이 필요합니다. 둘 다 pure-ftpd 패키지를 설치할 때 자동으로 생성되었으므로 수동으로 생성할 필요가 없습니다. 그러나 ftps homedir은 기본적으로 /var/ftp이지만 /home/ftp에 익명의 ftp 디렉토리를 만들고 싶습니다(일반 사용자의 ftp 디렉토리는 /home에도 있습니다(예: /home/www.example.com). 그러나 물론 원하는 경우 익명 FTP에 /var/ftp 디렉토리를 사용할 수 있습니다.

/home/ftp를 사용하려면 /etc/passwd를 열고 ftp 사용자 homedir을 /var/ftp에서 /home/ftp로 변경합니다(/var/ftp를 사용하려면 이 작업을 수행하지 마십시오).

nano /etc/passwd
[...]
#ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
ftp:x:14:50:FTP User:/home/ftp:/sbin/nologin
[...]

그런 다음 /var/ftp를 /home으로 이동합니다(/var/ftp를 사용하려면 이렇게 하지 마십시오).

mv /var/ftp /home

그런 다음 익명 사용자가 파일을 업로드할 수 있는 /home/ftp/incoming 디렉토리를 만듭니다. /home/ftp/incoming 디렉토리에 311의 권한을 부여하여 사용자가 업로드할 수 있지만 해당 디렉토리에 있는 파일을 보거나 다운로드할 수 없도록 합니다. /home/ftp 디렉토리에는 파일을 보고 다운로드할 수 있는 555 권한이 있습니다.

chown ftp:nobody /home/ftp
cd /home/ftp
mkdir incoming
chown ftp:nobody incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/

익명 사용자는 로그인할 수 있으며 /home/ftp에서 파일을 다운로드할 수 있지만 업로드는 /home/ftp/incoming으로 제한됩니다(파일이 /home/ftp/incoming에 업로드되면 거기에서 읽거나 다운로드할 수 없습니다. 서버 관리자는 다른 사람이 사용할 수 있도록 먼저 /home/ftp로 이동해야 합니다.

이제 익명 FTP를 위해 PureFTPd를 구성해야 합니다. /etc/pure-ftpd/pure-ftpd.conf를 열고 다음 설정이 있는지 확인하십시오.

nano /etc/pure-ftpd/pure-ftpd.conf
[...]
NoAnonymous                 no
[...]
AntiWarez                   no
[...]
AnonymousBandwidth            8
[...]
AnonymousCantUpload         no
[...]

(AnonymousBandwidth 설정은 선택 사항입니다. 익명 사용자의 업로드 및 다운로드 대역폭을 제한할 수 있습니다. 8은 8KB/초를 의미합니다. 원하는 값을 사용하거나 대역폭을 제한하지 않으려면 줄을 주석 처리하십시오.

마지막으로 PureFTPd를 다시 시작합니다.

systemctl restart pure-ftpd.service

9 이 CentOS 7.2 서버를 가상 머신으로 다운로드

이 설정은 howtoforge 가입자를 위해 ova/ovf 형식(VMWare 및 Virtualbox와 호환 가능)의 가상 머신 다운로드로 사용할 수 있습니다.

VM에 대한 로그인 세부 정보

  • 루트 비밀번호: howtoforge\n
  • "administrator" 사용자의 비밀번호: howtoforge\n

처음 로그인할 때 두 비밀번호를 모두 변경하세요.

  • VM의 IP 주소는 192.168.1.100입니다.

10 링크

  • PureFTPd: http://www.pureftpd.org/
  • MySQL: http://www.mysql.com/
  • phpMyAdmin: http://www.phpmyadmin.net/
  • 센트OS: http://centos.org/