CentOS下安装FTP

操作系统环境CentOS5.6
使用FTP软件vsftpd
#目的:创建Ftp用户,指定用户只能访问某一文件夹的权限

1.安装vsftpd
一般在CentOS上都自动安装了vsftd,若没有安装则可以使用以下步骤进行安装:
yum -y install vsftpd
touch /var/log/vsftpd.log # 创建vsftp的日志文件
在CentOS中,这样就可以完成了一个简单的匿名FTP的搭建。你可以通过访问ftp://ip来进行,不过这个FTP没有任何权限。

2.基于虚拟用户的FTP架设
虚拟用户为FTP账号,实际以系统的账号作为宿主账户
1)我们在/etc/vsftpd/vsftpd.conf中做如下CentOS FTP服务配置:
#设定不允许匿名访问
anonymous_enable=NO
#设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问。
local_enable=YES
#使用户不能离开主目录
chroot_list_enable=YES
#设定vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来
xferlog_file=/var/log/vsftpd.log
#设定支持ASCII模式的上传和下载功能。
ascii_upload_enable=YES
ascii_download_enable=YES
#PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证
pam_service_name=vsftpd   

3.虚拟用户设置
默认vsftpd.conf中不包含以下这些设定项目,需要自己手动添加CentOS FTP服务配置。
#设定启用虚拟用户功能。
guest_enable=YES
#指定虚拟用户的宿主用户。-CentOS中已经有内置的ftp用户了(此处很重要)
# cat /etc/passwd查看系统用户Ftp账号信息:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 没有shell执行权限
guest_username=ftp
#设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。
#存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名)
user_config_dir=/etc/vsftpd/vuser_conf
2)创建chroot list,将用户ftp加入其中:
touch /etc/vsftpd/chroot_list
echo ftp >> /etc/vsftpd/chroot_list
3)进行认证:
首先,安装Berkeley DB工具,很多人找不到db_load的问题就是没有安装这个包。
yum install db4 db4-utils
然后,创建用户密码文本/etc/vsftpd/vuser_passwd.txt ,注意奇行是用户名,偶行是密码
ftpuser1
123456
ftpuser2
123456
#生成虚拟用户认证的db文件
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
#编辑认证文件/etc/pam.d/vsftpd,全部注释掉原来语句
再增加以下两句
auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required pam_userdb.so db=/etc/vsftpd/vuser_passwd
#创建虚拟用户个性CentOS FTP服务文件
mkdir /etc/vsftpd/vuser_conf/
vi /etc/vsftpd/vuser_conf/ftpuser1
内容如下:
local_root=/opt/var/ftp    虚拟用户的根目录(根据实际修改)
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

4.启用PASV模式访问
由于默认情况下,匿名ftp用户的PASV模式访问被防火墙阻塞
1)、vi /etc/vsftpd/vsftpd.conf

pasv_enable=YES,即默认情况下,FTP  PASV被动模式被启用。
pasv_min_port=30000 ,设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意(1024 – 65535端口)。
                   默认值为0。把端口范围设在比较高的一段范围内,比如30000-31000。
pasv_max_port=31000
2)、加载内核 ip_conntrack_ftp 和 ip_nat_ftp(终端执行)
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
3)、vi /etc/sysconfig/iptables  在*filter下加入下
######同时可以用参数-s 192.168.0.0/16来限制客户端IP范围,以这种方式增加安全性。
防火墙设置:-A INPUT -m state --state NEW -m tcp -p tcp --dport 30000:31000 -j ACCEPT 
iptables-restore < /etc/sysconfig/iptables
netstat -ap | grep ftp 查看服务器端ftp数据传输时使用的端口:
 
5.启动vsftp服务器
#创建虚拟用户,在ftp用户下,ftp系统用户路径/opt/var/ftp
mkdir /opt/var/ftp/ftpuser1
chmod 777 /opt/var/ftp/ftpuser1
service vsftpd start

可能会有如下错误
TroubleShootings:
1.553 Could not create file
一般都是SELinux的问题,设置SELinux的一个值,重启服务器即可。
setsebool -P ftpd_disable_trans 1
service vsftpd restart
2.500 OOPS: bad bool value in config file for: write_enable
注意你的CentOS FTP服务文件中保证每一行最后没有任何空格,一般出错就是在多余的空格上。

6.常见ftp错误代码:
Connect 连接被拒绝: 可能原因是vsftpd服务没被启动
530 Permission denied: 可能原因是userlist_enable=YES并且/etc/vsftpd/user_list中包含要登录的ftp用户名   即user_list禁止了该用户的登录、或者可能是没有指定userlist_file=/etc/vsftpd/user_list
530 Login incorrect: 可能原因是登录的ftp用户名被包含在禁止登录列表/etc/vsftpdftpusers中 | 同时要确保用户名、密码是正确的 | 也可能是配置文件中少了一行pam_service_name=vsftpd |  检查/etc/pam.d/vsftpd 文件里面lib的路径 | 编辑/etc/pam.d/vsftp文件,注释掉auth required pam_shells.so(这个语句的意思是只有包含shell的用户才能登录)
530 Non-anonymous sessions must use encryption.:服务器的强制,非匿名用户必须使用加密连接
500 OOPS: cannot open user list file:可能原因是不存在文件“/etc/vsftpd/user_list”或文件中不存在该帐户,解决:解决: echo username >> /etc/vsftpd/user_list
500 OOPS: cannot open chroot() user list file | 500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list:可能原因是不存在文件“/etc/vsftpd/chroot_list”
500 OOPS: missing value in config file: 可能原因是配置文件“=”等号前值有问题,或只有一个空格
500 OOPS: bad bool value in config file: 可能原因是配置文件=”等号后值有问题
500 OOPS: unrecognised variable in config file: 可能原因是参数前有空格
500 OOPS: chdir, 500 OOPS: child died, 500 OOPS: chroot:可能原因是用户主目录没有权限或没有主目录,或者还是selinux影响的
500 OOPS: vsftpd: both local and anonymous access disabled!匿名用户和本地用户登录都被禁用
GnuTLS error -12: A TLS fatal alert has been received.:received.:Filezilla最新版本认为vsftpd默认的加密算法"DES-CBC3-SHA"不够安全而拒绝连接导致的。有两种办法解决该问题,一是降级你的Filezilla客户端版本到3.5.3以下,二是更改服务器端vsftpd的配置。增加属性:ssl_ciphers=HIGH
ECONNREFUSED - Connection refused by server: 当启用隐式ssl连接,用filezilla、winscp客户端连接时报错,因为vsftpd此时服务器端的端口还是21,但是客户端确以990来连接。修改客户端连接时使用的参数或者服务器的通过参数listen_port设置端口为990,问题解决

7.客户端连接问题设置(PASV模式未开启)
1).windows cmd下使用命令 ftp serverip,然后在弹出的提示画面中输入用户名“ftp”就能正常登录到ftp服务器。执行命令ls,从服务器端返回的如下信息:“200 PORT command successful. Consider using PASV.150 Here comes the directory listing.”中我们就可以看出,这个ftp连接执行在PORT主动模式下


2).使用Winscp、FileZilla连接时,会发现ftp用户能正常登录,但是list命令执行超时。这是因为默认情况下,这些客户端的FTP都运行在PASV被动模式下,而vsftp服务器由于没有对PASV端口范围及相应的iptables防火墙做设置,数据传输的连接被阻塞导致命令执行超时。当客户端强制启用PORT主动模式连接后,就能正常使用ftp功能。

3).FileZilla强制启用FTP PORT主动访问方式:Edit->Setting->Connection->Ftp->Transfer Mode->Select “Active” and uncheck “Allow fall back to other transfer mode on failure”


4).Winscp强制启用FTP PORT主动访问方式:在Winscp的login登录界面中,选择ftp,然后勾上“Advanced options”,选中左边导航中的Connection栏目,然后在弹出画面上不选中“Passive Mode”。


 

你可能感兴趣的:(Linux,系统架构)