
FTP,即File Transfer Protocol,文件传输协议。它是目前Internet上最流行的数据传送方法之一。利用FTP协议,我们可以在FTP服务器和FTP客户端之间进行双向数据传输,既可以把数据从FTP服务器上下载到本地客户端,又可以从客户端上传数据到远程FTP服务器。
1安装vsftpd服务器
vsftpd是目前Linux最好的FTP服务器工具之一,其中的vs就是“Very Secure”(很安全)的缩写,可见它的最大优点就是安全,除此之外,它还具有体积小,可定制强,效率高的优点。
如果选择完全安装RedHat Linux 90,则系统会默认安装vsftpd服务器。我们可以在终端命令窗口输入以下命令进行验证:
[root@ahpeng root] rpm -qa | grep vsftpd
如果结果显示为“vsftpd-113-8”,则说明系统已经安装vsftpd服务器。如果安装RedHat Linux 90时没有选择vsftpd服务器,则可以在图形环境下单击“主菜单→系统设置→添加删除应用程序”菜单项,在出现的“软件包管理”对话框里确保选中“FTP服务器”选项,然后单击“更新”按钮,按照屏幕提示插入第3张安装光盘即可开始安装。
另外,你也可以直接插入第3张安装光盘,定位到/RedHat/RPMS下的vsftpd-113-8i386rpm安装包,然后在终端命令窗口运行以下命令即可开始安装进程:
[root@ahpeng RPMS] rpm -ivh vsftpd-113-8i386rpm
2启动/重新启动/停止vsftpd服务
从Red Hat Linux90开始,vsftpd默认只采用standalone方式启动vsftpd服务,方法是在终端命令窗口运行以下命令:
[root@ahpeng root] /etc/rcd/initd/vsftpd start
重新启动vsftpd服务:
[root@ahpeng root] /etc/rcd/initd/ vsftpd restart
关闭vsftpd服务:
[root@ahpeng root] /etc/rcd/initd/ vsftpd stop
确认vsftpd服务已经启动后,我们可以在任意一台Windows主机的DOS命令窗口里输入“ftp FTPAddres”(用实际的FTP服务器IP地址或者域名代替FTPAddres),注意用户名、密码都是ftp(ftp是匿名用户的映射用户账号),如下所述:
Microsoft Windows XP [版本 512600]
(C) 版权所有 1985-2001 Microsoft Corp
F:\Peter>;ftp FTPAddress
Connected to FTPAddress
220 (vsFTPd 113) //vsftpd的响应请求
User (FTPAddress:(none)): ftp //输入用户账号ftp
331 Please specify thepassword
Password: //输入密码ftp
230 Login successful Havefun
ftp>;
3vsftpd的配置
在Red HatLinux 90里的vsftpd共有3个配置文件,它们分别是:
vsftpdftpusers:位于/etc目录下。它指定了哪些用户账户不能访问FTP服务器,例如root等。
vsftpduser_list:位于/etc目录下。该文件里的用户账户在默认情况下也不能访问FTP服务器,仅当vsftpd conf配置文件里启用userlist_enable=NO选项时才允许访问。
vsftpdconf:位于/etc/vsftpd目录下。它是一个文本文件,我们可以用Kate、Vi等文本编辑工具对它进行修改,以此来自定义用户登录控制、用户权限控制、超时设置、服务器功能选项、服务器性能选项、服务器响应消息等FTP服务器的配置。
(1)用户登录控制
anonymous_enable=YES,允许匿名用户登录。
no_anon_password=YES,匿名用户登录时不需要输入密码。
local_enable=YES,允许本地用户登录。
deny_email_enable=YES,可以创建一个文件保存某些匿名电子邮件的黑名单,以防止这些人使用Dos攻击。
banned_email_file=/etc/vsftpdbanned_emails,当启用deny_email_enable功能时,所需的电子邮件黑名单保存路径(默认为/etc/vsftpdbanned_emails)。
(2)用户权限控制
write_enable=YES,开启全局上传权限。
local_umask=022,本地用户的上传文件的umask设为022(系统默认是077,一般都可以改为022)。
anon_upload_enable=YES,允许匿名用户具有上传权限,很明显,必须启用write_enable=YES,才可以使用此项。同时我们还必须建立一个允许ftp用户可以读写的目录(前面说过,ftp是匿名用户的映射用户账号)。
anon_mkdir_write_enable=YES,允许匿名用户有创建目录的权利。
chown_uploads=YES,启用此项,匿名上传文件的属主用户将改为别的用户账户,注意,这里建议不要指定root账号为匿名上传文件的属主用户!
chown_username=whoever,当启用chown_uploads=YES时,所指定的属主用户账号,此处的whoever自然要用合适的用户账号来代替。
chroot_list_enable=YES,可以用一个列表限定哪些本地用户只能在自己目录下活动,如果chroot_local_user=YES,那么这个列表里指定的用户是不受限制的。
chroot_list_file=/etc/vsftpdchroot_list,如果chroot_local_user=YES,则指定该列表(chroot_local_user)的保存路径(默认是/etc/vsftpdchroot_list)。
nopriv_user=ftpsecure,指定一个安全用户账号,让FTP服务器用作完全隔离和没有特权的独立用户。这是vsftpd系统推荐选项。
async_abor_enable=YES,强烈建议不要启用该选项,否则将可能导致出错!
ascii_upload_enable=YES;ascii_download_enable=YES,默认情况下服务器会假装接受ASCⅡ模式请求但实际上是忽略这样的请求,启用上述的两个选项可以让服务器真正实现ASCⅡ模式的传输。
注意:启用ascii_download_enable选项会让恶意远程用户们在ASCⅡ模式下用“SIZE/big/file”这样的指令大量消耗FTP服务器的I/O资源。
这些ASCⅡ模式的设置选项分成上传和下载两个,这样我们就可以允许ASCⅡ模式的上传(可以防止上传脚本等恶意文件而导致崩溃),而不会遭受拒绝服务攻击的危险。
(3)用户连接和超时选项
idle_session_timeout=600,可以设定默认的空闲超时时间,用户超过这段时间不动作将被服务器踢出。
data_connection_timeout=120,设定默认的数据连接超时时间。
(4)服务器日志和欢迎信息
dirmessage_enable=YES,允许为目录配置显示信息,显示每个目录下面的message_file文件的内容。
ftpd_banner=Welcome to blah FTP service,可以自定义FTP用户登录到服务器所看到的欢迎信息。
xferlog_enable=YES,启用记录上传/下载活动日志功能。
xferlog_file=/var/log/vsftpdlog,可以自定义日志文件的保存路径和文件名,默认是/var/log/vsftpdlog。
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。
工作方式
主动模式:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始 监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
被动模式:当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
先安装vsftpd
[root@localhost ~]# yum install vsftpd -y[root@localhost ~]# systemctl start vsftpd #启动vsftpd[root@localhost ~]# systemctl status vsftpd #查看vsftpd状态
vsftpdservice - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpdservice; disabled; vendor preset: disabled)
Active: active (running) since 五 2018-02-02 08:22:39 CST; 1min 50s ago
Process: 12558 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpdconf (code=exited, status=0/SUCCESS)
Main PID: 12559 (vsftpd)
CGroup: /systemslice/vsftpdservice
└─12559 /usr/sbin/vsftpd /etc/vsftpd/vsftpdconf
vsftp三种认证模式
annoymous 匿名用户 #无虚输入密码即可访问
local user 真实用户 #服务器上存在的用户
guest user 虚拟用户 #映射到ftp服务器的用户
vsftpd的默认配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpdconf
# Allow anonymous FTP (Beware - allowed by default if you comment this out)anonymous_enable=YES #允许匿名用户登陆## Uncomment this to allow local users to log in# When SELinux is enforcing check for SE bool ftp_home_dirlocal_enable=YES #允许本地用户登陆## Uncomment this to enable any form of FTP write commandwrite_enable=YES #允许本地用户读写## Default umask for local users is 077 You may wish to change this to 022,# if your users expect that (022 is used by most other ftpd's)local_umask=022 #本地用户创建文件的umask值
dirmessage_enable=YES #当用户进入某个目录时,会显示该目录需要注意的内容是 messagexferlog_enable=YES #启动维护记录服务器上传和下载情况的日志文件connect_from_port_20=YES #FTP PORT主动模式进行数据传输时使用20端口xferlog_std_format=YES #传输日志文件将以标准 xferlog 的格式书写listen_ipv6=YES #监听ipv6pam_service_name=vsftpd #pam认证模块的名字userlist_enable=YES #拒绝登陆ftp的名单tcp_wrappers=YES #限制IP访问vsftpd
匿名用户认证
我们刚才已经开启了vsftpd 我们已经可以登陆ftp站点 #需关闭防火墙或设置规则 并关闭selinux
我们已经登陆到ftp站点了
试着创建一个文件夹 出现550报错 是因为我们是以匿名用户登陆到FTP站点 并没有给匿名用户创建目录的权限
在vsftpd配置文件中添加
anon_upload_enbale #允许匿名用户上传anon_mkdir_write_enable=yes #允许匿名用户创建目录anon_other_write_enable=yes #允许匿名用户修改目录名称或删除目录
再赋予匿名用户登陆的文件夹最高权限
chmod 777 /var/ftp/pub
已经可以创建并修改文件夹
还有一种方法 是将匿名用户登陆到的目录系统用户改成ftp 就不用修改目录权限
[root@localhost ~]#chown -Rf ftp /var/ftp/pub
本地用户模式
修改vsftp配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpdconf
加入一行
local_root=/etc/ftp
创建 一个用户
[root@localhost ~]#useradd 51cto[root@localhost ~]# passwd 51cto更改用户 51cto 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
创建这个目录
[root@localhost ~]#mkdir /etc/ftp
重启一下vsftpd
用我们刚创建的用户登陆
登陆成功
诶? 既然说本地用户模式是 服务器上真是存在的用户 那我们的管理员root 也是真实存在的 那是否可以登陆呢?
无法登陆 这是为什么呢?
这是因为vsftpd有一个禁止用户登陆的名单
在上面的匿名用户说过 vsftpd默认是开启禁止用户名单的 我们的root用户在名单之中 自然就无法登陆了 禁止root用户登陆也对服务器提升了安全性 防止通过ftp爆破root密码
虚拟用户
虚拟用户是这三种认证模式中最安全的一种 也稍微复杂一些
虚拟用户是用PAM认证模块中配置 FTP认证的数据库文件来进行加密
关于PAM认证可以看>
首先我们在/etc/目录下 创立一个用户数据库文件
奇数行为账户偶数行为密码
为了安全我们用db_load命令 用哈希算法将明文信息转换成密文数据库文件并降低文件的权限 避免其他人看到数据库文件
[root@localhost etc]#db_load -T -t hash -f /etc/ftp/ftptxt ftpdb[root@localhost etc]#rm ftptxt[root@localhost etc]#chmod 600 ftpdb
我们用默认的pam文件 注释其他行
新加两行
db_load 后面跟的是数据库的路径不用写数据库的后缀
创建存放虚拟用户配置文件的目录
[root@localhost etc]#mdir -p /etc/ftp
配置虚拟用户权限
[root@localhost ftp]#vim user1
[root@localhost ftp]#vim user2
创建两个用户登陆的目录
[root@localhost ftp]#mkdir -p /home/user1 [root@localhost ftp]#mkdir -p /home/user2赋予最高权限
[root@localhost ftp]#chmod 777 /home/
修改vsftpd配置文件
重启一下vsftpd
测试一下权限
你可以从下面两个地方获得最新的vsftpd的RPM包 Redhat's rpm collection 或者 rpmfindnet为了你的方便, 你也可以使用wget从本站下载vsftpd的rpm包到你的本地电脑
复制代码代码如下:
wget >
1、首先,连接相应linux主机,进入到linux命令行状态下,等待输入shell指令。
2、其次,在linux命令行中输入:service vsftpd start。
3、键盘按“回车键”运行shell指令,此时会看到ftp服务被成功启动了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)