CentOS下vsftp设置、匿名用户&本地用户设置、PORT、PASV模式设置

1, [b]安装:[/b]yum install vsftpd
2, [b]设置vsftp开机自启动:[/b]chkconfig --level 35 vsftpd on
3, [b]启动vsftpd守护进程:[/b]Service vsftpd start
4, [b]开启iptables防火墙21端口[/b]-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT ,然后重启service iptables restart
5, [b]截止到现在:[/b]
[list]
[*]a. [b]Vsftpd配置文件[/b]:/etc/vsftpd/vsftpd.conf
[*]b. [color=red]系统用户ftp(默认无密码)[/color]已经可以作为vsftp的匿名用户来使用。
[*]c. 从/etc/passwd中的值ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin可以看出:根目录 /var/ftp/, [color=red]禁止控制台登陆,也就是该用户只能进行ftp[/color]访问。
[*]d. anon_upload_enable=YES,anon_mkdir_write_enable=YES被注释掉,即默认匿名用户不可上传文件,也不可以在服务器上创建目录。
[*]e. port_enable=YES,即[color=red]默认情况下,FTP PORT主动模式被启用[/color]
[*]f. connect_from_port_20=YES,即默认情况下,FTP PORT主动模式进行数据传输时使用20端口(ftp-data)。YES使用,NO不使用。
[*]g. ftp_data_port=port number,设定ftp数据传输端口(ftp-data)值。默认值为20。此参数用于PORT FTP模式。
[*]h. pasv_enable=YES,即[color=red]默认情况下,FTP PASV被动模式被启用[/color]。但是由于[color=red]防火墙设置[/color]的原因,默认情况下,FTP PASV被动模式使用FTP会失败。
[*]i. listen=YES,即默认情况下,vsftpd以单例模式监听IPv4 socket端口。该命令不能和listen_ipv6同时使用。因此如果要同时启用对IPv4和IPv6的支持的话,必须同时运行2份vsftpd,每份vsftpd包含自己的配置文件(一个监听IPv4,一个监听IPv6)
[*]j. windows cmd下使用命令 ftp serverip,然后在弹出的提示画面中输入用户名“ftp”就能正常登录到ftp服务器。执行命令ls,从服务器端返回的如下信息:“200 PORT command successful. Consider using PASV.150 Here comes the directory listing.”中我们就可以看出,[color=red]这个ftp连接执行在PORT主动模式[/color]下
[*]k. 使用Winscp、FileZilla连接时,会发现ftp用户能正常登录,但是list命令执行超时。这是因为[color=red]默认情况下,这些客户端的FTP都运行在PASV被动模式[/color]下,而vsftp服务器由于没有对PASV端口范围及相应的iptables防火墙做设置,数据传输的连接被阻塞导致命令执行超时。当[color=red]客户端强制启用PORT主动模式[/color]连接后,就能正常使用ftp功能。
[*]l. FileZilla强制启用FTP PORT主动访问方式:Edit->Setting->Connection->Ftp->Transfer Mode->Select “Active” and uncheck “Allow fall back to other transfer mode on failure”
[*]m. Winscp强制启用FTP PORT主动访问方式:在Winscp的login登录界面中,选择ftp,然后勾上“Advanced options”,选中左边导航中的Connection栏目,然后在弹出画面上不选中“Passive Mode”。
[/list]
[b]6, 匿名用户上传下载[/b]
[list]
[*]a. anonymous_enable=YES
[*]b. anon_upload_enable=YES
[*]c. anon_mkdir_write_enable=YES
[*]d. [color=red]目录权限设置:[/color]修改/var/ftp/pub的目录权限为744,并把目录的owner和group都改成ftp([color=red]ftp用户必须有可执行x权限[/color],否则在执行ftp命令CWD pub时,会报错误:Response: 550 Failed to change directory. Error: Failed to retrieve directory listing。[color=red]匿名用户下载是使用的是nobody这个用户,所以权限相应的other这个位置要有R权限才能被下载[/color]。)
[*]e. chown ftp.ftp /var/ftp/pub
[*]f. chmod 744 /var/ftp/pub
[*]g. /var/ftp使用默认的权限755以及默认的owner、group:root
[*]h. 如下关闭selinux,否则上传文件时报错误553 Could not create file. Error: Critical file transfer error。[color=red]也可以不关闭selinux,在selinux中设置ftp例外,参考:[/color]
[*]i. /etc/selinux/config文件中的SELINUX=enforcing,改成SELINUX=permissive,机器reboot(如果不想重启机器,也可以执行命令setenforce 0;setenforce 1 设置SELinux 成为enforcing模式;setenforce 0 设置SELinux 成为permissive模式。)
[*]j. 上传后的文件不能被直接下载,如果需要可以直接被下载,要设置匿名用户上传文件时的[color=red]掩码anon_umask=073[/color]
[*]k. 匿名用户重命名,删除权限设置anon_other_write_enable=YES
[*]l. no_anon_password=YES   #匿名用户登录时不询问口令
[/list]
7, 由于默认情况下,匿名ftp用户的PASV模式访问被防火墙阻塞,[b]启用PASV模式访问[/b]
[list]
[*]a. pasv_enable=YES,即默认情况下,FTP PASV被动模式被启用。
[*]b. pasv_min_port=30000 ,设定在PASV模式下,建立数据传输所可以使用[color=red]port范围的下界和上界,0 表示任意(1024 – 65535端口)。默认值为0[/color]。把端口范围设在比较高的一段范围内,比如30000-31000。
[*]c. pasv_max_port=31000
[*]d. [color=red]防火墙设置:[/color]-A INPUT -m state --state NEW -m tcp -p tcp --dport 30000:31000 -j ACCEPT ######同时可以用参数-s 192.168.0.0/16来限制客户端IP范围,[color=red]以这种方式增加安全性[/color]。
[*]e. [color=blue]netstat -ap | grep ftp [/color]查看[color=red]服务器端ftp数据传输时使用的端口[/color]:
tcp 1455572 0 192.168.0.1:30661 192.168.0.2:63731 ESTABLISHED 1746/vsftpd(下载)
tcp 0 57032 192.168.0.1:30886 192.168.0.2:63750 ESTABLISHED 1785/vsftpd(上传)
[/list]
[b]8,禁用匿名用户,启用系统本地用户[/b]
[list]
[*]a. anonymous_enable=NO 禁止匿名用户登录 local_enable=YES 允许本地用户登录
[*]b. write_enable=YES #本地用户可以上传(全局控制) 删除,重命名
[*]c. local_umask=022 #本地用户上传文件的umask,上传文件默认权限644(666-022),上传文件夹默认权限755(777-022)
[*]d. 关闭selinux,否则上传文件时报错误553 Could not create file. Error: Critical file transfer error。[color=red]也可以不关闭selinux,在selinux中设置ftp例外,参考:[/color]
[*]e. userlist_enable=yes 启用/etc/vsftpd/user_list列表
[*]f. userlist_deny=no 只允许/etc/vsftpd/user_list列表中的用户登录(ftpusers限制仍然起作用)
[*]g. chroot_list_enable=NO,chroot_local_user=YES,所有的用户均不能切换到其他目录。
[*]h. useradd –d /ftp –s /bin/false prj 添加本地系统的ftp用户prj,并设置用户home目录,禁止shell登录,设置密码passwd prj。默认创建的/ftp目录owner是prj,权限700。
[*]i. 把用户prj加到user_list列表文件中
[*]j. user_config_dir=/etc/vsftpd/userconf #设置用户的单独配置文件,[color=red]用哪个帐户登陆就用哪个帐户命名,实现不同用户不同权限[/color](1,文件格式、属性和主配置文件一致 2,文件名没有.conf后缀 3,这里的属性会覆盖主配置文件相应的属性 4,并不是所有属性放这里都会起作用)
[*]k. 建立目录/etc/vsftpd/userconf,并创建ftp用户名想对应的文件prj,在文件中用local_root属性指定prj用户登录后进入的目录。还可以设置属性:cmds_allowed,local_umask=022, [color=red]local_max_rate限速等[/color]
[*]l. 编辑/etc/pam.d/vsftp文件,注释掉auth required pam_shells.so(这个语句的意思是只有包含shell的用户才能登录)
[*]m. ftpd_banner定制ftp登录时的欢迎信息
[*]n. max_clients=100 #FTP的最大连接数
[*]o. max_per_ip=5   #每IP的最大连接数
[*]p. vsftpd服务器重启
[/list]
[b]9,禁用匿名用户,启用虚拟FTP用户[/b]
[list]
[*]a. anonymous_enable=NO 禁止匿名用户登录
[*]b. local_enable=YES 允许本地用户登录,虽然虚拟用户不是操作系统用户,但是最终还是[color=red]关联到虚拟宿主用户身上,因此,这里属性还是要设置为yes[/color]
[*]c. pam_service_name=vsftpd #设置PAM使用的名称,默认值为/etc/pam.d/vsftpd。
[*]d. guest_enable=YES 启用虚拟用户登录
[*]e. guest_username=ftp #这里设置虚拟用户的宿主用户。默认值为ftp。
[*]f. virtual_use_local_privs=YES/NO #当该参数激活(YES)时,[color=red]虚拟用户与其宿主用户有相同的权限[/color]。 当此参数关闭(NO)时,[color=red]虚拟用户与匿名用户有相同的权限[/color]。默认情况下此参数是关闭的(NO)。
[*]g. 用db_load生成虚拟用户数据库
[*]h. 修改pam.d下的vsftpd文件,修改用户认证方式
[*]i. …
[/list]
[b]10,ssl加密的vsftp(vsftp with OpenSSL)[/b]参考:[url=http://desert3.iteye.com/blog/1687355]加密ssl vsftp、ftp隐式加密&显式加密[/url]
[b]11,vsftp配置用户磁盘配额(磁盘限额[/b]参考:[url=http://desert3.iteye.com/blog/1687483]Virtualbox下为CentOS增加新硬盘、Linux添加新硬盘、vsftp配置用户磁盘配额(磁盘限额)[/url]

// 匿名用户设置
anonymous_enable=YES
no_anon_password=YES
anon_root=/var/ftp
anon_umask=073
anon_max_rate=
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable

chown_uploads
chown_username

// 本地用户设置
anonymous_enable=NO
write_enable=YES
userlist_enable=yes
userlist_deny=no
chroot_list_enable=NO
chroot_local_user=YES
user_config_dir=/etc/vsftpd/userconf

// 本地用户设置 - 各用户独立设置属性
local_root
local_umask=022
local_max_rate

[b]vsftpd日志:[/b]默认情况下,vsftp在/var/log/xferlog文件中记录Wu-ftpd格式的日志(它会记录上传和下载的动作)。通过设置dual_log_enable和log_ftp_protocol,可以[color=red]启用vsftp自己的日[/color]志,默认日志文件/var/log/vsftpd.log,其中会记录[color=red]所有的ftp命令日志[/color],[color=blue]看到的内容和FTP客户端FileZilla中显示的内容一致!所以调试错误的时候,貌似也没有开启的必要。[/color]ftp登录或者操作出问题的时候,主要看返回的错误代码是多少,然后找可能的原因。如553 Could not create file.
[list]
[*]xferlog_enable=yes/no //是否启用 xferlog 日志格式
[*]xferlog_std_format=yes/no //是否采用标准格式记录日志
[*]xferlog_file=/path/to/logfile //xferlog 日志文件所在位置,默认为/var/log/xferlog
[*]dual_log_enable=yes/no //是否采用VSFTPd自己的日志记录方式
[*]log_ftp_protocol=yes/no //是否记录所有的ftp命令日志
[*]syslog_enable=yes/no //是否[color=red]将日志信息写入系统日志[/color]/var/log/messages中
[/list]
常见ftp错误代码:
[list]
[*]Connect 连接被拒绝: 可能原因是vsftpd服务没被启动
[*]530 Permission denied: 可能原因是userlist_enable=YES并且/etc/vsftpd/user_list中包含要登录的ftp用户名 [color=red]即user_list禁止了该用户的登录、或者可能是没有指定userlist_file=/etc/vsftpd/user_list[/color]
[*]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”或文件中不存在该帐户,解决:解决: cho 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,问题解决
[/list]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值