博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux搭建vsftp服务器
阅读量:6827 次
发布时间:2019-06-26

本文共 8290 字,大约阅读时间需要 27 分钟。

hot3.png

1)安装问题

vsftp属于linux自带的service,因此在安装linux的时候就可以勾选安装,如果当时未安装,后来又需要,那么可以找出原始安装iso文件,提取/Packages路径下面的rpm进行安装,建议不要随便在网上找rpm,因为rpm可能会跟自己的linux不兼容,而报错,比如说是libcrypto.so.4找不到,如果是tar.gz安装make的时候可能会报找不到cap_init,总之就是依赖问题不好解决,因此最好还是去安装光盘里面找原配的rpm进行安装。如果服务端能访问外网,也建议用yum安装。yum能自动下载安装包之间的依赖包,省去由于依赖包产生的麻烦。

2)简单使用(使用/etc/vsftpd/vsftpd.conf的默认配置

启动ftp命令:[root@localhost]# service vsftpd start 

查看ftp状态命令[root@localhost]# service vsftpd status 

重启ftp命令[root@localhost]# service vsftpd restart 

关闭ftp命令[root@localhost]# service vsftpd stop

默认情况下,只需要把公共文件放在/var/ftp,匿名用户就可以免登录下载了。

3)简要说明下vsftp的相关信息

/usr/sbin/vsftpd ---- VSFTPD的主程序

/etc/rc.d/init.d/vsftpd ---- 启动脚本

/etc/vsftpd/vsftpd.conf ---- 主配置文件

/etc/pam.d/vsftpd ---- PAM认证文件

/etc/vsftpd.ftpusers ---- 禁止使用VSFTPD的用户列表文件

/etc/vsftpd.user_list ---- 禁止或允许使用VSFTPD的用户列表文件

/var/ftp ---- 匿名用户主目录

/var/ftp/pub ---- 匿名用户的下载目录

4)异常处理

有的文件可能会下载失败,这里以下载dd.conf失败作为例子,

215042_psYg_555061.png

失败的原因是权限不够,如下,

[root@localhost ftp]# ll总用量 130640-rw-r--r--. 1 liyang liyang       379  9月 28 15:40 2.txt-rw-------. 1 root   root        4567  9月 28 15:38 dd.conf-rw-------. 1 root   root         125  3月  4 2011 ftpusers-rw-r--r--. 1 liyang liyang  17473536  9月 28 15:19 help_20140313_v1.0.doc

解决方法是赋权限,之后再下载就正常了。

[root@localhost ftp]# chmod 777 dd.conf

5)通过/etc/vsftpd/vsftpd.conf配置ftp用户进行上传

5.1 ftp的用户账户是借用了linux系统用户的账户,根据这个规则,本人创建系统用户ftpadmin,密码为peidian1#,

[root@localhost ayu]# useradd -d /var/common -s /sbin/nologin ftpadmin[root@localhost ayu]# passwd ftpadmin更改用户 ftpadmin 的密码 。新的 密码:重新输入新的 密码:passwd: 所有的身份验证令牌已经成功更新。

这里简单注明下密码设置问题,linux的密码安全机制要求密码需要有一定的复杂度,这里就不深入研究。另外,/sbin/nologin这里是限制了ftpadmin这个用户没有系统登录的权限,只能用作ftp登录。最后,-d设置了ftpadmin用户的“家目录”/var/common,如果命令为useradd -s /sbin/nologin ftpadmin,那么“家目录”默认就是/home/ftpadmin

5.2)防火墙iptables)限制访问的问题

关闭iptables服务,执行service iptables stop,再查看是否关闭成功执行service iptables status

5.3)SELinux的问题

需要执行一行命令,[root@localhost]#setsebool -P ftp_home_dir on,然后查看 SELinux 的状态: sestatus -b | grep ftp,确保ftp_home_dir状态为on。重启ftp服务 [root@localhost]# service vsftpd restart,否则会发生500 OOPS child died或者是200 PORT command successful. Consider using PASV.553 Could not create file.问题都是SELinux引起的。

关闭SELinux,vi /etc/sysconfig/selinux,修改为SELINUX=disabled,重启即可,如果不希望重启那么可以执行setenforce 0,不过这种方式只是本次生效。

配置完SELinux后就可以进行上传操作了。用户名:ftpadmin,密码:peidian1#,上传的路径为/var/common

5.4)上传文件字符集编码的问题(文件名带中文上传后乱码问题)

Windows的字符集编码是GBK/GB18030,而Linux使用utf8编码,因此在上传带有中文字符文件名的文件时,就会发生文件名乱码的问题。建议不要为此去修改linux的字符集编码,因为“全盘颠覆”的话的会得不偿失。解决方案是用ftp客户端工具,客户端工具代理上传下载规定编码为UTF8就不会出现乱码的问题。

给出FlashFXP下载地址:

232230_9XqP_555061.png

232334_Md5V_555061.png

点击“连接”按钮即可连上,可以在log信息栏看到字符集编码默认为UTF8,不需要另外设置,如下,

232702_oE5a_555061.png

5.5)ftp用户(如ftpadmin)上传文件到匿名下载目录的问题

这里需要特别注意,如果仅仅把匿名访问目录设置为/var/common,那么会出现匿名访问时被强制要求输入用户名/密码的情况,经过本人的不断尝试总结出一种方法来(暂时无法解释原因),但可以实现权限用户ftp上传到匿名访问目录的效果。

1.用root用户创建一个目录/var/ftpcommon

2.执行chown ftpadmin:ftpadmin /var/ftpcommon,也就是将路径/var/ftpcommon的所有者由root转给ftpadmin

3.配置匿名访问目录和权限用户访问目录为/var/ftpcommon,附上本人配置好的/etc/vsftpd/vsftpd.conf,其实也就是在默认配置增加了

anon_root=/var/ftpcommonlocal_root=/var/ftpcommonchroot_local_user=YES

,完整配置如下,

# Example config file /etc/vsftpd/vsftpd.conf## The default compiled in settings are fairly paranoid. This sample file# loosens things up a bit, to make the ftp daemon more usable.# Please see vsftpd.conf.5 for all compiled in defaults.## READ THIS: This example file is NOT an exhaustive list of vsftpd options.# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's# capabilities.## Allow anonymous FTP? (Beware - allowed by default if you comment this out).anonymous_enable=YES## Uncomment this to allow local users to log in.local_enable=YES## Uncomment this to enable any form of FTP write command.write_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## Uncomment this to allow the anonymous FTP user to upload files. This only# has an effect if the above global write enable is activated. Also, you will# obviously need to create a directory writable by the FTP user.#anon_upload_enable=YES## Uncomment this if you want the anonymous FTP user to be able to create# new directories.#anon_mkdir_write_enable=YES## Activate directory messages - messages given to remote users when they# go into a certain directory.dirmessage_enable=YES## Activate logging of uploads/downloads.xferlog_enable=YES## Make sure PORT transfer connections originate from port 20 (ftp-data).connect_from_port_20=YES## If you want, you can arrange for uploaded anonymous files to be owned by# a different user. Note! Using "root" for uploaded files is not# recommended!#chown_uploads=YES#chown_username=whoever## You may override where the log file goes if you like. The default is shown# below.#xferlog_file=/var/log/vsftpd.log## If you want, you can have your log file in standard ftpd xferlog format.# Note that the default log file location is /var/log/xferlog in this case.xferlog_std_format=YES## You may change the default value for timing out an idle session.#idle_session_timeout=600## You may change the default value for timing out a data connection.#data_connection_timeout=120## It is recommended that you define on your system a unique user which the# ftp server can use as a totally isolated and unprivileged user.#nopriv_user=ftpsecure## Enable this and the server will recognise asynchronous ABOR requests. Not# recommended for security (the code is non-trivial). Not enabling it,# however, may confuse older FTP clients.#async_abor_enable=YES## By default the server will pretend to allow ASCII mode but in fact ignore# the request. Turn on the below options to have the server actually do ASCII# mangling on files when in ASCII mode.# Beware that on some FTP servers, ASCII support allows a denial of service# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd# predicted this attack and has always been safe, reporting the size of the# raw file.# ASCII mangling is a horrible feature of the protocol.#ascii_upload_enable=YES#ascii_download_enable=YES## You may fully customise the login banner string:#ftpd_banner=Welcome to blah FTP service.## You may specify a file of disallowed anonymous e-mail addresses. Apparently# useful for combatting certain DoS attacks.#deny_email_enable=YES# (default follows)#banned_email_file=/etc/vsftpd/banned_emails## You may specify an explicit list of local users to chroot() to their home# directory. If chroot_local_user is YES, then this list becomes a list of# users to NOT chroot().#chroot_local_user=YES#chroot_list_enable=YES# (default follows)#chroot_list_file=/etc/vsftpd/chroot_listanon_root=/var/ftpcommonlocal_root=/var/ftpcommonchroot_local_user=YES## You may activate the "-R" option to the builtin ls. This is disabled by# default to avoid remote users being able to cause excessive I/O on large# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume# the presence of the "-R" option, so there is a strong case for enabling it.#ls_recurse_enable=YES## When "listen" directive is enabled, vsftpd runs in standalone mode and# listens on IPv4 sockets. This directive cannot be used in conjunction# with the listen_ipv6 directive.listen=YES## This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6# sockets, you must run two copies of vsftpd with two configuration files.# Make sure, that one of the listen options is commented !!#listen_ipv6=YESpam_service_name=vsftpduserlist_enable=YEStcp_wrappers=YES

对配置的说明:

# 禁止匿名用户anonymous登录

anonymous_enable=YES

# 允许本地用户登录

local_enable=YES
# 让登录的用户有写权限(上传,删除)
write_enable=YES

更改匿名用户和登录用户(这里主要用于ftpadmin)默认目录,

anon_root=/var/ftpcommon

local_root=/var/ftpcommon

chroot_local_user=YES

anon_root表示匿名用户登录到ftp时的默认目录,local_root表示使用本地用户登录到ftp时的默认目录,chroot_local_user表示限制登录用户登录后只能访问自己的“家目录”,而这里所有用户的家目录都被统一设置为/var/ftpcommon这里有一篇帖子助于了解关于chroot_local_user:

5.6)用cmd命令行访问ftp有助于排错,ftp访问失败时,windows客户端错误提示信息远远不如cmd命令提示全面

准确,常用cmd访问ftp命令如下,

1.登录命令,输入"ftp 210.10.3.61"或者输入"ftp"回车,再输入"open 210.10.3.61"

2.匿名登录,输入"anonymous",要求输入密码时直接敲回车;权限用户登录,输入用户名/密码

3.查看文件列表,输入"dir",查看本地文件列表请输入"!dir"

4.上传,输入"put 文件名";下载,输入"get 文件名"

5.切换路径输入"cd 路径名" 

除了本博客提到的这些,vsftp还有可配置匿名用户上传但不能删除的,还可配置虚拟ftp用户,然后能用mount挂载的方式,这些有待进一步研究,使用cmd命令行去进行ftp的get和put操作也是有意思的,这些也需要记录,但是目前时间有限。

(mount挂载??)

添加chroot_list:

比较全:

iptables??

pasv?

转载于:https://my.oschina.net/u/555061/blog/511526

你可能感兴趣的文章
杂物论第一 中华文明的根基
查看>>
生产环境中的一个proxy案例文件
查看>>
MySQL存储引擎
查看>>
Confluence 6 查看你的许可证细节
查看>>
WordCount
查看>>
应该成为女程序员的榜样了吧
查看>>
Java自动化测试工具Parasoft Jtest案例分享
查看>>
【原创翻译】《GO语言编程入门》
查看>>
LeetCode:Valid Parentheses - 合理的括号搭配
查看>>
C#程序处理命令行参数
查看>>
Weex SDK集成指南
查看>>
Android 电量显示Widgets插件实现
查看>>
我的友情链接
查看>>
RMAN Duplicate database from Active database with ASM
查看>>
深入理解javascript原型和闭包(17)——补this
查看>>
50种方法优化SQL Server数据库查询
查看>>
android读写assets目录下面的资源文件(文件夹)
查看>>
linux date 格式化时间和日期
查看>>
Java 复用类
查看>>
[CS] 来电处理流程
查看>>