FTP:file transfer protocol 文件传输协议。使用端口为20(数据通道,传输文件或目录列表)和21(命令通道,传输用户命令),FTP服务器能够从网上提供文件的传输服务,远程客户端可以上传和下载文件。
linux中常见FTP服务器有:proftpd、vsftp、wu-ftpd。
FTP工作模式有两种:主动模式PROT和被动模式PASV。
主动模式:客户端随机开放1个大于1024的端口N向服务器21端口发起链接,然后开发N+1端口进行监听,并向服务器发出PORT N+1命令,通知服务器自己是主动模式。
服务器接收到命令后,会用本地FTP数据端口20向客户端指定的N+1端口传输数据。
被动模式:客户端随机开发1个大于1024的端口N向服务器21端口发起链接,然后开发N+1端口进行监听,并向服务器发出PASV N+1命令,通知服务器自己是被动模式。
服务器接收到命令后,会开发给1个大于1024的端口M进行监听,然后使用PROT M命令通知客户端,数据端口是M。客户端使用N+1口段和服务器M端口进行传输数据。
首先我们下载我们所需的proftpd源代码文件。[root@www ~]# wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.6.tar.gz
[root@www ~]# tar -zxvf proftpd-1.3.6.tar.gz #报错。
proftpd-1.3.6/
proftpd-1.3.6/.autom4te.cfg
proftpd-1.3.6/.gitattributes
proftpd-1.3.6/.github/
proftpd-1.3.6/.github/CONTRIBUTING.md
proftpd-1.3.6/.github/ISSUE_TEMPLATE.md
proftpd-1.3.6/.gitignore
proftpd-1.3.6/.travis.yml
proftpd-1.3.6/COPYING
proftpd-1.3.6/CREDITS
proftpd-1.3.6/ChangeLog
gzip: stdin: unexpected end of file
tar: 归档文件中异常的 EOF
tar: 归档文件中异常的 EOF
tar: Error is not recoverable: exiting now
[root@www ~]# ls -l proftpd-1.3.6.tar.gz
-rw-r--r--. 1 root root 242200 10月 17 17:04 proftpd-1.3.6.tar.gz #压缩文件错误。
[root@www ~]# ls -l /tmp/proftpd-1.3.6.tar.gz
-rw-r--r--. 1 root root 20251898 10月 17 18:37 /tmp/proftpd-1.3.6.tar.gz #正确的。
[root@www ~]#
[root@www ~]# tar -zxvf /tmp/proftpd-1.3.6.tar.gz -C /usr/local/src/
[root@www ~]# cd /usr/local/src/proftpd-1.3.6
开始编译安装前,首先生成Makefile文件。
参数介绍[root@www proftpd-1.3.6]#./configure --help 查看可用的参数,也可以在 阅读详细的参数。
[root@www proftpd-1.3.6]#./configure --prefix=/usr/local/proftpd --sysconfdir=/etc --localstatedir=/var/log/proftpd --enable-shadow --enable-autoshadow --with-modules=mod_ratio:mod_readme:mod_wrap
默认安装会安装mod_auth,模块包含的指令http://www.proftpd.org/docs/modules/mod_auth.html
需要安装mod_core,模块包含的指令http://www.proftpd.org/docs/modules/mod_core.html
我这里所用的参数有,比较简单哦~:
--prefix 安装目录放在/usr/local/proftpd下
--sysconfdir 配置文件放在/etc下
--localstatedir 日志文件放在/var/log/proftpd下
--enable-shadow
--enable-autoshadow 这两项是可以使用/etc/shadow获取密码
--with-modules=mod_ratio:mod_readme:mod_wrap需要使用的模块
另外:
install_user=用户名 install_group=组名 ./configure --prefix=/home/tj/proftpd/devel/build/ ... 使用用户和组名进行安装,不影响运行。
生成了makefile文件就可以make编译安装了。[root@www proftpd-1.3.6]# make
报错啦:mod_wrap.c:34:18: 错误:tcpd.h:没有那个文件或目录,需要安装tcp_wrappers和tcp_wrappers-devel。gcc -DHAVE_CONFIG_H -DLINUX -I.. -I../include -O2 -Wall -c mod_wrap.c
mod_wrap.c:34:18: 错误:tcpd.h:没有那个文件或目录
...
...
make[1]: *** [mod_wrap.o] 错误 1
make[1]: Leaving directory `/usr/local/src/proftpd-1.3.3/modules'
make: *** [modules] 错误 2
[root@www proftpd-1.3.3]# make clean
cd src/ && make clean
make[1]: Entering directory `/usr/local/src/proftpd-1.3.3/src'
rm -f *.o
make[1]: Leaving directory `/usr/local/src/proftpd-1.3.3/src'
[root@www proftpd-1.3.6]# yum install tcp_wrappers-7.6-57.el6.x86_64.rpm tcp_wrappers-devel-7.6-57.el6.x86_64.rpm -y安装完成后所需依赖包后。
[root@www proftpd-1.3.6]# make clean
[root@www proftpd-1.3.6]# make
[root@www proftpd-1.3.6]# make install
#全局设置
设置项1 参数
设置项2 参数
#某个目录的设置
#关于匿名用户的设置
最简单的配置,也是默认的配置[root@www ~]# grep -Ev "^#|^$" /etc/proftpd.conf
ServerName "ProFTPD Default Installation" #服务器的名称
ServerType standalone #服务类型存在两种 standalone 和 inetd/xinetd模式。对于不经常用的ftp服务器来说选择xinetd较好。
DefaultServer on #是否开启?
Port 21 #监听端口
UseIPv6 off #是否开启ipv6
Umask 022 #上传文件的默认权限
MaxInstances 30 #最大实例即pid数量
TimeoutStalled 300 #客户端空闲时间
User nobody #启动服务的用户
Group nobody #启动服务的组
DefaultRoot ~
RootLogin off #是否允许root登录ftp,为安全建议off
AllowOverwrite off
DisplayLogin welcome.msg #欢迎信息
DisplayChdir .message
DenyAll
User ftp
Group ftp
# We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp
# Limit the maximum number of anonymous logins
MaxClients 10
# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayChdir .message
# Limit WRITE everywhere in the anonymous chroot
DenyAll
注:
1.ServerType服务类型存在两种 standalone 和 inetd/xinetd模式。inetd/xinetd会统一管理服务,由inetd/xinetd来监听21端口,若有客户进来则由inetd/xinetd来启动proftpd服务和管理连接,对于不经常用的ftp服务器/流量小的服务器来说选择xinetd较好。可以编辑xinetd.conf文件
service ftp
{
disable = no
flags= REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/proftpd
server_args = -c /etc/proftpd.conf
}
2.DefaultRoot 限制用户访问目录,此指令会出现在配置文件上下文中(不能存在virtualhost global上下文中)、、中。
DefaultRoot ~ 所有用户的根目录都chroot到家目录,标准语法DefaultRoot 目录 组或所有
DefaultRoot ~ !user_ftp 不是user_ftp组的用户chroot到家目录
DefaultRoot /path/to/dir group1,group2 两个组下的用户chroot到/path/to/dir下。 这里若使用符号链接作为根目录,一定要注意尽量不要使用绝对路径作为根目录。当chroot后会失效的
3.匿名登录且安全上传
User ftp
Group ftp
AnonRequirePassword off
UserAlias anonymous ftp
MaxClients 10
DisplayLogin welcome.msg
DisplayChdir .message
AllowALL
DenyAll
4.指令有三种参数:ftp命令、ftp命令组、关键字ALL(所有哦)
ftp命令组有:ALL 所有的FTP命令(除LOGIN)
DIRS 包括CDUP, CWD, LIST, MDTM, MLSD, MLST, NLST, PWD, RNFR, STAT, XCUP, XCWD, XPWD
LOGIN 包括client logins
READ 包括RETR SIZE
WRITE 包括APPE, DELE, MKD, RMD, RNTO, STOR, STOU, XMKD, XRMD
优先级是 单个命令 > 命令组 > ALL
a.限制单个命令(格式SITE_COMMOND):如CHMOD命令(SITE_CHMOD)
DenyAll
b.如何限制某个用户禁止访问或限制某个ip禁止登陆ftp服务器,使用
Deny from 192.16.8.146.***
可以查看mod_ifsession模块和mod_wrap2也可以实现。
c.的继承,当在中时目录的子目录也会继承的限制哦。除非被更近的所替代。#上传
#第一个limit 在这个目录下进制使用所有命令
DenyAll
#第二个limit 在这个目录下可以使用的命令
AllowAll
#可以使用的上传命令
AllowAll
d.基本常用的权限限制有以下:CMD:Change Working Directory 改变目录
MKD:MaKe Directory 建立目录的权限
RNFR: ReName FRom 更改目录名的权限
DELE:DELEte 删除文件的权限
RMD:ReMove Directory 删除目录的权限
RETR:RETRieve 从服务端下载到客户端的权限
STOR:STORe 从客户端上传到服务端的权限
READ:可读的权限,不包括列目录的权限,相当于 RETR,STAT等
WRITE:写文件或者目录的权限,包括 MKD和RMD
DIRS:是否允许列目录,相当于LIST,NLST等权限,还是比较实用的
ALL:所有权限
LOGIN:是否允许登陆的权限
e.可应用的范围有:AllowUser 针对某个用户允许的Limit
DenyUser 针对某个用户禁止的Limit
AllowGroup 针对某个用户组允许的Limit
DenyGroup 针对某个用户组禁止的Limit
AllowAll 针对所有用户组允许的Limit
DenyAll 针对所有用户禁止的Limit
5.虚拟FTP服务器设置
为什么要有虚拟服务器,在单一主机提供多个站点或地址。 #基于ip
ServerName“我的虚拟FTP服务器”
#基于名称
...
VirtualHost>
6.只允许匿名登录虚拟服务器
ServerName "My virtual FTP server"
DenyAll
User private
Group private
AllowAll
...