CentOS下源码安装vsftpd-3.0.0,并设置指定用户访问指定目录(附带完整配置文件)

1.卸载系统已经存在的ftp服务器

由于是源码安装,因此不能经过rpm -qa的方式查看是否已经安装ftp服务器,能够经过find / | grep vsftp*方式查看系统中存在哪些与vsftpd相关的文件,找出来经过rm删除。php

如下删除代码为参考:html

rm /usr/local/sbin/vsftpd 
rm /usr/local/man/man5/vsftpd.conf.5
rm /usr/local/man/man8/vsftpd.8
rm /etc/xinetd.d/vsftpd
rm -rf /etc/vsftpd  

2.解压源码包

tar -zxvf vsftpd-3.0.0.tar.gz

编码解决:linux

vi opts.c

if (str_equal_text(&p_sess->ftp_arg_str,"UTF8 ON"))web

更改为if (str_equal_text(&p_sess->ftp_arg_str,"DISABLE UTF8 ON"))shell

注意:安装以前,先查看系统是否为64(用getconf LONG_BIT命令),须要更改vsf_findlibs.sh文件库中lib 路径,命令以下:tomcat

sed -i 's/lib\//lib64\//g' vsf_findlibs.sh

3.安装

完成以上步骤,到解压目录安全

3.1 查看系统版本,肯定合适版本的ftp压缩包

使用
cat /etc/issue
  或
cat /etc/redhat-release
(Linux查看版本当前操做系统发行版信息)

CentOS Linux release 7.1.1503 (Core)服务器

。。。所以肯定vsftpd-3.0.0.tar.gz,解压压缩包,命令为:
tar -zxvf vsftpd-3.0.0.tar.gz 

3.2 查看系统是32位仍是64位的

getconf LONG_BIT
显示结果为:64
。。。系统为64位的,须要替换vsf_findlibs.sh文件夹中的lib路径,命令以下:
# sed -i 's/lib\//lib64\//g' vsf_findlibs.sh
不然会报下面错误
“o hash.o tcpwrap.o ipaddrparse.o access.o features.o readwrite.o opts.o ssl.o sslslave.o ptracesandbox.o ftppolicy.o sysutil.o sysdeputil.o seccompsandbox.o -Wl,-s -fPIE -pie -Wl,-z,relro -Wl,-z,now `./vsf_findlibs.sh`
/usr/bin/ld: cannot find -lcap
collect2: ld 返回 1
make: *** [vsftpd] 错误 1”

3.3 编译与安装

到解压的目录(/home/cloudlogin/vsftpd-3.0.0/)去make,没有错误,再去make install
若是安装过程没报错误,就表示安装成功。  安装成功,须要将解压目录下的 vsftpd.conf 文件复制到 /etc/vsftpd 目录下
cp vsftpd.conf /etc/vsftpd
执行
cp Redhat/vsftpd.pam /etc/pam.d/
pam 文件复制到 /etc/pam.d 目录下,
这个 pam 文件要重命名:
mv /etc/pam.d/vsftpd.pam /etc/pam.d/vsftpd
 而后在/etc/vsftpd/目录下建立chroot_list_file文件,往里面添加一行ftp123(即下面建立的用户)

3.4 添加用户并指定目录

 添加用户ftp123,并指定用户家目录/data/ftp_dirsession

 useradd -d /data/ftp_dir/ ftp123 
再修改用户ftp123密码
passwd ftp123
 两次输入密码:ftp!@#456

3.5 修改目录权限

chmod 775 /data/ftp_dir/
ll

3.6 修改配置文件/etc/vsftpd/vsftpd.conf

去掉注释并修改(禁止匿名访问),anonymous_enable=NO
去掉注释(容许本地用户访问),local_enable=YES
去掉日志注释,xferlog_std_format=YES
去掉注释并修改(链接超时时间),data_connection_timeout=120
去掉欢迎注释(登录欢迎提示),ftpd_banner=Welcome to KJGG FTP service.
-------------这两句实现指定用户执行chroot-----------------------
去掉用户文件注释,chroot_list_file=/etc/vsftpd/chroot_list_file |
去掉注释,chroot_list_enable=YES                                |
-------------这两句实现指定用户执行chroot-----------------------
在最后一行添加以下内容,
    listen_port=21
    pasv_max_port=2100
    pasv_min_port=2100

3.7 修改防火墙,并重启

vi /etc/sysconfig/iptables/
添加以下内容:
-A OUTPUT -p tcp --sport 20 -j ACCEPT
-A OUTPUT -p tcp --sport 21 -j ACCEPT
-A OUTPUT -p tcp --sport 2100 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2100 -j ACCEPT

再重启app

/usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf
 

4.验证

方式一:使用工具FileZilla(适用于ftp服务器有公网地址)
4.1.1 打开FileZilla,用填入链接信息
主机:用公网地址117.27.128.183
用户名:ftp123
密码:ftp!@#456
端口:21
(注:若是没有filezilla工具,请到https://filezilla-project.org/download.php?type=client下载)
4.1.2 测试是否只能在操做上面指定的目录(/data/ftp_dir/)
     而且是否能进行上传和下载
 
方式二:使用客户端软件ftp(适用于ftp服务器无公网地址)
4.2.1 安装
yum install ftp

4.2.2 登录

ftp ip地址

  出现以上提示表示登录成功了

4.2.3 上传文件
ftp> put
(local-file) index.html
(remote-file) index.html
local: index.html remote: index.html
227 Entering Passive Mode (172,16,4,166,8,52).
150 Ok to send data.
226 Transfer complete.
2381 bytes sent in 0.00856 secs (278.25 Kbytes/sec)

下面看一个完整操做

 

5.安装常见问题

5.1  530 Login incorrect

解决思路:修改vsftpd.conf配置文件,添加pam_service_name=vsftpd配置,注意这里的配置文件值为:vsftpd,对应的是/etc/pam.d/vsftpd文件,因此复制到pam.d目录的vsftpd.pam须要进行更名;重启ftp验证。

若是还不能解决,能够考虑编辑vi /etc/pam.d/vsftpd,将文件中的因此lib替换为lib64,再重启ftp便可。

5.2    500 illegal port command

解决思路:出现这个问题时,能够考虑vsftpd链接模式问题,vsftpd存在两种链接模式,一个是主动链接,一个是被动链接。首先将ftp客户端的链接方式改成被动链接模式再进行ftp的链接。

若是还不行,能够考虑是否是服务器端口问题,好比服务器限制了只能访问几个端口,这是须要在配置文件中进行以下配置:

pasv_enable=YES //表示启动被动模式

pasv_min_port=9090 //被动模式最小端口

pasv_max_port=9091 //被动模式最大端口

pasv_address=172.16.4.160 //被动模式链接IP

注意pasv_address这个配置,这个配置默认为none,不进行设置,则客户端在链接的时候会先链接当前服务器内网IP地址,以后才链接外网IP地址,因此进行配置的时候,要指定地址,这样再链接的时候才会直接链接外网地址。

5.3     500 OOPS: cannot change directory:/home/xxxx

解决思路:遇到这个问题能够考虑是不是服务器的selinux防火墙开启了,能够经过一下命令进行防火墙关闭:setsebool -P ftpd_disable_trans 1,须要重启ftpservice vsftpd restart

还能够经过命令:sestatus -b | grep ftp查看ftp的状态,最主要查看ftp_home_dir的值是on 仍是off,若是是off,经过命令setsebool -P  ftp_home_dir  on设置为on

5.4   530 Permission denied

 解决思路:遇到这个问题能够考虑是否配置userlist_enable选项,查看/etc/vsftpd.user_list或者/etc/vsftpd/vsftpd.user_list是否限制了当前用户,将该用户从文件中删除或者设置userlist_deny=NO

5.5   500 OOPS: vsftpd: refusing to run with writable root inside chroot()

解决思路:这是由于从2.3.5以后,vsftpd加强了安全检查,若是用户被限定在了其主目录下,则该用户的主目录不能再具备写权限了!若是检查发现还有写权限,就会报该错误。

 要修复这个错误,能够在vsftpd的配置文件/etc/vsftpd/vsftpd.conf添加一行“ allow_writeable_chroot=YES

5.6   500 Illegal PORT command.

状态:   正在链接 218.65.241.60:12021...
状态:   链接创建,等待欢迎消息...
状态:   不安全的服务器,不支持 FTP over TLS。
状态:   已登陆
状态:   读取目录列表...
命令:   PWD
响应:   257 "/lutong/tomcat_admin_9090/webapps/boss_sync_user_data"
命令:   TYPE I
响应:   200 Switching to Binary mode.
命令:   PORT 172,16,4,200,201,1
响应:   500 Illegal PORT command.
命令:   PASV
响应:   227 Entering Passive Mode (90,114,3,18,8,52).
命令:   LIST
错误:   没法创建数据链接: ETIMEDOUT - 链接尝试超时
错误:   50 秒后无活动,链接超时

用FileZilla工具链接时,发现,报如上错误,这是由于没有指定被动模式,在/etc/vsftpd/vsftpd.conf最后添加以下几行,

#是否容许被动模式
pasv_enable=YES
#下面两行设置被动模式链接时的端口范围,建议配置大一点的,安全性高 
pasv_max_port=60000
pasv_min_port=60010
pasv_address=ftp服务器ip #vsftp服务器指定IP地址

而后在/etc/sysconfig/iptables添加开放端端口

 

-A INPUT -m state --state NEW -m tcp -p tcp --dport 60000:60010 -j ACCEPT

 

  便可

5.7   421 Timeout.

  修改/etc/vsftpd/vsftpd.comf的data_connection_timeout的值更大便可

 

 

6.配置文件

/etc/vsftpd/vsftpd.conf

#禁止匿名访问
anonymous_enable=NO
#开放本地用户的写权限
write_enable=YES
#设置本地用户的文件生成掩码为022,默认值为077
local_umask=022
#当切换到目录时,显示该目录下的.message隐含文件的内容
#这是因为默认状况下有message_file=.message的 设置
dirmessage_enable=YES
#激活上传和下载日志
xferlog_enable=YES
#启用FTP数据端口的链接请求
connect_from_port_20=YES
#xferlog日志文件
xferlog_file=/var/log/xferlog
#使用标准的ftpd xferlog日志格式
xferlog_std_format=YES
#设置空闲的数据链接的的中断时间
data_connection_timeout=120
#设置链接服务器后的欢迎信息
ftpd_banner=Welcome to KJGG FTP service.

#下面四句配置保证只有/etc/vsftpd/user_list 的用户能够登录
local_enable=YES #容许本地用户登陆
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
userlist_enable=YES
#下面两句配置保证只有/etc/vsftpd/chroot_list的用户切换目录
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list_file
#设置PAM认证服务的配置文件名称,该文件存放 在/etc/pam.d/目录下
#pam_service_name=vsftpd
#tcp_wrappers=YES
#开启监听
listen=YES
#命令通道端口,默认21
listen_port=21

#是否容许被动模式
pasv_enable=YES
#下面两行设置被动模式链接时的端口范围,建议配置大一点的,安全性高 
pasv_max_port=60000
pasv_min_port=60010
#vsftp服务器指定IP地址
pasv_address=ftp服务器ip 

#这是由于从2.3.5以后,vsftpd加强了安全检查,若是用户被限定在了其主目录下,则该用户的主目录不能再具备写权限了!
#若是检查发现还有写权限,就会报该错误。要修复这个错误,须要添加下面一行
allow_writeable_chroot=YES
View Code

/etc/vsftpd/chroot_list_file

ftp123

/etc/vsftpd/chroot_list_file

ftp123

/etc/pam.d/vsftpd

#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/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
View Code

 

7.其余

配置开机自启动
在/etc/rc.local添加
/usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf &
便可
相关文章
相关标签/搜索