本文讲述了在CentOS 7.0下安装和配置ProFTPD方法。ProFTPD是一个针对Unix或者类Unix系统的FTP 守护进程。ProFTPD是在GUN通用公共许可协议(基本确立了ProFTPD作为自由软件的身份)下开发,发布的,这意味着只需要在ProFTPD包中包含完整的源代码或者在网站上发布预编译的二进制文件,就可以以任何方式出售,授权。任何人在任何时间点都可以修改该软件,只要修改后的软件也遵守GNU PublicLicense即可。
1.准备工作
本教程是基于CentOS 7.0的,在继续本教程之前,你应该先安装CentOS 7.0。系统应该有一个静态IP地址。在本教程中使用192.168.0.100作为静态IP地址,用server1.example.com作为主机名。
2.安装 ProFTPD
2.1 安装配置:
使用如下命令安装有效的EPEL(Extra Packages for Enterprise Linux EPEL,企业版Linux附加软件包):
rpm -ivh http://dl.Fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm
我们首先使用如下命令安装ProFTPD 和OpenSSL:
yum install -y proftpd openssl proftpd-utils
使用如下命令开启ProFTPD服务:
systemctl start proftpd.service
systemctl enable proftpd.service
在CentOS 7.0中我们需要使用如下命令为ftp服务额外配置一下防火墙(Firewall-cmd):
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload
我们可以使用如下命令查看ProFTPD的安装版本:
proftpd -v
[root@server1 ~]# proftpd -v
ProFTPD Version 1.3.5
[root@server1 ~]#
2.2 创建ProFTPD用户
我会为ProFTPD创建一个组:ftpgroup 并且创建一个用户:srijan。我将用户srijan的主目录设置为/ftpshare:
groupadd ftpgroup
接下来我将用户srijan添加到ftpgroup中:
useradd -G ftpgroup srijan -s /sbin/nologin -d /ftpshare
passwd srijan
[root@server1 ~]# passwd srijan
Changing password for user srijan.
New password: <--ftppassword
Retype new password: <--ftppassword
passwd: all authentication tokens updated successfully.
[root@server1 ~]#
接下来,我们需要防止该目录被删除或者重命名,从而保护所有用户的数据,所以我们使用如下命令来改变该目录的访问权限:
chmod -R 1777 /ftpshare/
现在我们已经为连接ProFTPD做好了准备
现在我们可以使用用户名srijan和密码登录ftp://192.168.0.100了。
3.使ProFTPD中的TLS(安全传输层协议:Transport Layer Security)有效
为了使ProFTPD中的TLS有效,我们需要使用如下命令打开/etc/proftpd/proftpd.conf并更改该文件,在编辑该文件之前最好备份原始文件:
cp /etc/proftpd.conf /etc/proftpd.conf.bak
nano /etc/proftpd.conf
文件内容如下所示:
[...]
DefaultRoot ~ !adm
PassivePorts 6000 6100
[...]
#<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>
[...]
我为ftp的被动模式添加了6000和6100两个端口号,类似的我会使用如下命令允许被动模式通过CentOS的防火墙服务:
firewall-cmd --add-port=6000-6100/tcp --permanent
firewall-cmd --reload
我们可以使用如下命令查看端口状态:
firewall-cmd --list-ports
[root@server1 ~]# firewall-cmd --list-ports
6000-6100/tcp
[root@server1 ~]#
另外我们需要通知SELINUX(Security-Enhanced Linux)允许对这些文件进行读写操作。
setsebool -P allow_ftpd_full_access=1
为了使用TLS,我们必须创建一个SSL证书。我们可以使用如下命令在/etc/pki/tls/certs中创建它:
openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/pki/tls/certs/proftpd.pem -out /etc/pki/tls/certs/proftpd.pem
[root@server1 certs]# openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/pki/tls/certs/proftpd.pem -out /etc/pki/tls/certs/proftpd.pem
Generating a 1024 bit RSA private key
...................................++++++
.........++++++
writing new private key to '/etc/pki/tls/certs/proftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:<--DE
State or Province Name (full name) []:<--Hamburg
Locality Name (eg, city) [Default City]:<--Luneberg
Organization Name (eg, company) [Default Company Ltd]:<--ISPConfig
Organizational Unit Name (eg, section) []:<--Development
Common Name (eg, your name or your server's hostname) []:<--server1.example.com
Email Address []:<--info@example.com
[root@server1 certs]#
上面红色字段标记的值由你给出,我只是给了一个例子而已。
为了安全起见我会用如下命令将该证书的访问权限修改为只读模式:
chmod 0440 /etc/pki/tls/certs/proftpd.pem
最后重启ProFTPD服务:
systemctl restart proftpd.service
我们可以通过Filezilla连接到ProFTPD服务器了,在连接服务器之前你必须在客户端中安装了Filezilla。打开Filezilla并且做如下设置:
详细信息:
Host = 192.168.0.100
Protocol = FTP
User = srijan
Port = 只要你没有自定义草果21个端口,这块可以使空白的
Password = ftppassword (之前设置的密码)
注意:以上步骤中我们对连接进行了加密,所以我们将显式的使用TLS加密的FTP。如果你没有配置TLS,那么可以简单地使用FTP了。
如上图所示,要求信任证书,点击OK。
它将通过TLS连接到FTP的共享目录。
4.在ProFTPD中通过匿名访问ftp
我们只需要在ProFTPD配置文件中添加一些条目,就可以创建一个匿名的ftp帐号。
nano /etc/proftpd.conf
在配置文件的最后添加这些条目,
[...]
###Anonymous share#####
<Anonymous ~ftp>
User ftp
Group ftp
UserAlias anonymous ftp
DirFakeUser on ftp
DirFakeGroup on ftp
MaxClients 10
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
</Anonymous>
添加完后我们需要重启服务:
systemctl restart proftpd.service
如下图所示通过Filezilla连接服务器:
注意:以上步骤中我们对连接进行了加密,所以我们将显式的使用TLS加密的FTP。如果你没有配置TLS,那么可以简单地使用FTP了
点击Connect:
如上图所示,要求信任证书,点击OK。
注:以上图片上传到红联Linux系统教程频道中。
至此,我们已经成功使用匿名账户连接到服务器了。
恭喜!我们已经成功在CentOS中配置ProFTPD服务器环境了。
5.链接
CentOS : http://www.centos.org/
ProFTPD : http://www.proftpd.org/