vsftpd小巧配置较简单,但是中文支持不好,决定安装proftpd服务器,网上的教程不全,很多都是从源码中安装,并且按照这些教程一路下来根本不行,google了很久,不断的尝试,终于解决了,fedora使用yum安装proftpd,并使用mysql数据库虚拟用户的ftp服务器。教程如下:
1.安装必备软件proftpd、httpd、mysql、mysql-server、phpmyadmin
[root@localhost ~]# yum install proftpd proftpd-mysql httpd mysql mysql-server phpmyadmin
2.启动mysql和httpd
[root@localhost ~]/etc/init.d/httpd start
[root@localhost ~]/etc/init.d/mysqld start
3.设置mysql初始root密码。
[root@localhost ~]# mysql -uroot -p
Enter password: 注:在这里请您输入MySQL的管理密码;
修改root密码,用于登录phpmyadmin
4.修改SElinux有关ftp的设置
运行命令
[root@localhost ~]# getsebool -a |grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
要将红色部分设置为on
修改ftp目录的用户和组设置比如我的ftp主目录设为/home/www/html
[root@localhost ~]# setsebool -P ftp_home_dir=1
[root@localhost ~]#setsebool -P allow_ftpd_full_access=1
[root@localhost ~]#setsebool -P ftpd_connect_db=1
[root@localhost ~]#setsebool -P allow_ftpd_anon_write=1
[root@localhost ~]#chown -R nobody:nobody /home/www/html
因为在配置表中用户和组都使用nobody,所以ftp默认文件夹要设为nobody用户和组的权限。
[root@localhost ~]#chmod 777 /home/www/html
[root@localhost ~]#chcon -R -t public_content_rw_t /home/www/html
查看属性
[root@localhost ~]# ls -Z /home/www/html
drwxrwxrwx. nobody nobody unconfined_u:object_r:httpd_sys_content_t:s0 lisi
drwxrwxrwx. nobody nobody unconfined_u:object_r:httpd_sys_content_t:s0 zhang san
5.设置防火墙,打开21端口。
找到防火墙,点击,出现,
将ftp选项选中,保存退出即可。
proftpd -nd6
调试proftpd
proftpd -t
netstat -an 查看网络端口开放情况
netstat -an |grep 21 查看21端口开放情况
查看21端口开放情况
6.修改pam设置
yum安装的proftpd其中的pam设置文件/etc/pam.d/proftpd,设置有误,需要重新设置,配置如下:
[root@localhost ~]vim /etc/pam.d/proftpd
#%PAM-1.0
auth required /lib64/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers Onerr=succeed
auth required /lib64/security/pam_pwdb.so shadow nullok
account required /lib64/security/pam_pwdb.so
session required /lib64/security/pam_pwdb.so
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers Onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
蓝色的为需要添加的部分,红色部分为原来自带的。
7.建立mysql数据库
[root@localhost ~]mysql>create database proftpd;
mysql>Grant
select,insert,update,delete,create,drop,index,alter,create
temporary
tables,lock tables on proftpd.* to proftpd@localhost Identified
by
"123456";
mysql>quit
说明:
create database proftpd; 这行是创建名为proftpd的数据库;
Grant 这行是为proftpd
数据库授权,让用户名为proftpd,密码为123456(这只是一个例子,密码自己定义),这个用来管理proftpd这个数据库;
quit 这行是退出mysql界面;
导入proftpd数据库;
下面是一个现成的数据库,你只需要导入就行了,比较简单;把下面的代码拷贝下来,然后另存为
proftpd.sql;然后通过下面的命令来导入;
[root@localhost ~]# mysql -uproftpd -p proftpd
下面是proftpd的数据库,您可以拷贝下来,另存为 proftpd.sql ,然后用上面的命令来导入;
-- 数据库: `proftpd`
--
-- --------------------------------------------------------
--
-- 表的结构 `ftpgroups`
--
CREATE TABLE `ftpgroups` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- 表的结构 `ftpusers`
--
CREATE TABLE `ftpusers` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- 导出表中的数据 `ftpusers`
--
INSERT INTO `ftpusers` VALUES ('test', 'test', 999, 999,
'/home/www/html/test', '/sbin/nologin',0,'','');
-- --------------------------------------------------------
--
-- 表的结构 `quotalimits`
--
CREATE TABLE `quotalimits` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- 表的结构 `quotatallies`
--
CREATE TABLE `quotatallies` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
8.ProFTPD的配置文件proftpd.conf
首先备份proftpd.conf配置文件,再进行修改。
[root@localhost etc]# mv proftpd.conf proftpd.conf.bak
使用下面的配置。
[root@localhost ~]cat /etc/proftpd.conf
ServerName "My Proftpd FTP SERVER"
ServerType standalone
ServerIdent off
DefaultServer on
UseReverseDNS off
IdentLookups off
CommandBufferSize 128
#最大命令长度,防止缓冲区溢出的攻击
Port 21
Umask 022
PassivePorts 60000 60030
DirFakeUser on FTP
DirFakeGroup on FTP
AllowForeignAddress off
MaxInstances 30
User nobody
Group nobody
MaxLoginAttempts 3
MaxClients 100
MaxClientsPerHost 5
UseReverseDNS off
AllowOverwrite on
AuthPAM on
AuthPAMConfig proftpd
#AuthOrder mod_auth_pam.c* mod_auth_file.c
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
#很多教程中缺少上面两行,导致无法使用mysql数据库。
RequireValidShell off
#sql认证部分#
DefaultRoot ~
#用户被限制在自己的主目录中
SQLAuthenticate users*
#只认证user,不认证组
SQLAuthTypes Plaintext
#数据库密码类型,使用明文。
#SQLConnectInfo [ connection-info] [ [username]] [ [password]] [ [policy]]
#这里的用户名用mysql的root登录帐号,不然无法连接数据库,很纳闷在phpmyadmin中创建新用户无论权限怎么设置,都无法连接,只要换成root就能连接。
SQLConnectInfo proftpd@localhost:3306 root mysqld
SQLMinUserGid 999
SQLMinUserUid 999
SQLDefaultGID 65533
SQLDefaultUiD 65533
#SQLUserInfo [ user-table user-name passwd uid gid home-dir shell]
#这是SQLUserInfo的使用说明,数据库中数据表必须配置正确。
SQLUserInfo ftpusers userid passwd uid gid homedir shell
CreateHome on
MaxClientsPerHost 3 "Nicht mehr als %m Verbindungen"
MaxClients 5 "Leider sind schon %m Clients"
AllowStoreRestart on
AllowRetrieveRestart on
LogFormat auth "%h %a %t \"%r\" %s"
#日志的格式
LogFormat xfer "%h %u %t \"%r\" %s %b"
LogFormat write "%h %a %t \"%r\" %s %b"
ExtendedLog /var/log/proftpd/auth.log auth auth
#登录日志
ExtendedLog /var/log/proftpd/download.log read xfer
#下载日志
ExtendedLog /var/log/proftpd/upload.log write write
#写操作日志,包括上传,删除,创建目录等。
SyslogLevel emerg
SystemLog /var/log/proftpd/proftpd.system.log
TransferLog /var/log/proftpd/proftpd.xferlog
#下面是用户登录统计,更新数据库信息,如:登录时间,次数,主机等。
# Update count every time user logs in
SQLLogFile /var/log/proftpd/proftpd.sql.log
SQLNamedQuery getcount SELECT "count from ftpuserswhere userid='%u'"
SQLNamedQuery getlastlogin SELECT "lastlogin from ftpuserswhere userid='%u'"
SQLNamedQuery updatelogininfo UPDATE "count=count+1,host='%h',lastlogin=current_timestamp() WHERE userid='%u'" ftpusers
SQLShowInfo PASS "230" "You've logged on %{getcount} times, last login at %{getlastlogin}"
SQLLog PASS updatelogininfo
#-------- load sql.mod for mysql authoritative --------#
#-------- load qudes.mod for Quota limit --------#
#打开磁盘限额引擎
QuotaEngine on
# 设置磁盘限额
QuotaDirectoryTally on
# 设置磁盘容量显示时的单位
QuotaDisplayUnits Mb
# 允许显示磁盘限额信息,ftp登录后可执行quote site quota命令查看当前磁盘使用情况
QuotaShowQuotas on
# 设置磁盘限额日志文件
QuotaLog "/var/log/proftpd.quota.log"
# 指定磁盘限额模块使用的数据库信息
SQLNamedQuery get-quota-limit SELECT "name, quota_type,per_session, limit_type,bytes_in_avail,bytes_out_avail,bytes_xfer_avail,files_in_avail,files_out_avail,files_xfer_avail FROM quotalimitsWHERE name = '%{0}' AND quota_type = '%{1}'"
SQLNamedQuery get-quota-tally SELECT "name,quota_type,bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROMquotatalliesWHERE name = '%{0}' AND quota_type = '%{1}'"
#注:红色部分-quotalimits和quotaallies为你的数据库中对用户的限制表名称,一定要正确切记!
SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2},files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4},files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" quotatallies
SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" quotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
#--------- load qudes.mod for Quota limit --------#
配置完后应该测试一下,使用命令:
[root@localhost ~]proftpd -n -d9
如果有错误,就不能继续,出现错误提示,这时将要修改proftpd.conf
查看proftpd进程
[root@localhost ~]/etc/init.d/proftpd start
启动proftpd
[root@localhost ~]/etc/init.d/proftpd stop
停止proftpd
[root@localhost ~]/etc/init.d/proftpd restart
重启proftpd
查看proftpd进程
[root@localhost ~]pgrep proftpd
如果没有反馈则未运行成功。
proftpd四个可能用到的配置
UseUTF8 Off
DefaultTransferMode binary
解决中文目录名乱码问题
UseReverseDNS off
IdentLookups off
解决proftpd登录慢的问题
该过程在本人机器上通过。
文章难免有疏漏,不当之处请酌情处理。
祝使用愉快!!!
作者邮箱:easyboot(at)126.com