设为首页 收藏本站
查看: 724|回复: 0

[经验分享] CentOS下vsftp设置、匿名用户&本地用户设置、PORT、PASV模式设置

[复制链接]

尚未签到

发表于 2016-5-13 11:23:47 | 显示全部楼层 |阅读模式
1,安装:yum install vsftpd
2,设置vsftp开机自启动:chkconfig --level 35 vsftpd on
3,启动vsftpd守护进程:Service vsftpd start
4,开启iptables防火墙21端口-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT ,然后重启service iptables restart   
5,截止到现在:

  • a.Vsftpd配置文件:/etc/vsftpd/vsftpd.conf
  • b.系统用户ftp(默认无密码)已经可以作为vsftp的匿名用户来使用。
  • c.从/etc/passwd中的值ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin可以看出:根目录 /var/ftp/, 禁止控制台登陆,也就是该用户只能进行ftp访问。
  • d.anon_upload_enable=YES,anon_mkdir_write_enable=YES被注释掉,即默认匿名用户不可上传文件,也不可以在服务器上创建目录。
  • e.port_enable=YES,即默认情况下,FTP  PORT主动模式被启用
  • 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,即默认情况下,FTP  PASV被动模式被启用。但是由于防火墙设置的原因,默认情况下,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.”中我们就可以看出,这个ftp连接执行在PORT主动模式
  • k.使用Winscp、FileZilla连接时,会发现ftp用户能正常登录,但是list命令执行超时。这是因为默认情况下,这些客户端的FTP都运行在PASV被动模式下,而vsftp服务器由于没有对PASV端口范围及相应的iptables防火墙做设置,数据传输的连接被阻塞导致命令执行超时。当客户端强制启用PORT主动模式连接后,就能正常使用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”。

6,匿名用户上传下载

  • a.anonymous_enable=YES
  • b.anon_upload_enable=YES
  • c.anon_mkdir_write_enable=YES
  • d.目录权限设置:修改/var/ftp/pub的目录权限为744,并把目录的owner和group都改成ftp(ftp用户必须有可执行x权限,否则在执行ftp命令CWD pub时,会报错误:Response:550 Failed to change directory. Error:Failed to retrieve directory listing。匿名用户下载是使用的是nobody这个用户,所以权限相应的other这个位置要有R权限才能被下载。)
  • 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。也可以不关闭selinux,在selinux中设置ftp例外,参考:
  • i./etc/selinux/config文件中的SELINUX=enforcing,改成SELINUX=permissive,机器reboot(如果不想重启机器,也可以执行命令setenforce 0;setenforce 1 设置SELinux 成为enforcing模式;setenforce 0 设置SELinux 成为permissive模式。)
  • j.上传后的文件不能被直接下载,如果需要可以直接被下载,要设置匿名用户上传文件时的掩码anon_umask=073
  • k.匿名用户重命名,删除权限设置anon_other_write_enable=YES
  • l.no_anon_password=YES   #匿名用户登录时不询问口令

7,由于默认情况下,匿名ftp用户的PASV模式访问被防火墙阻塞,启用PASV模式访问

  • a.pasv_enable=YES,即默认情况下,FTP  PASV被动模式被启用。
  • b.pasv_min_port=30000 ,设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意(1024 – 65535端口)。默认值为0。把端口范围设在比较高的一段范围内,比如30000-31000。
  • c.pasv_max_port=31000
  • d.防火墙设置:-A INPUT -m state --state NEW -m tcp -p tcp --dport 30000:31000 -j ACCEPT   ######同时可以用参数-s 192.168.0.0/16来限制客户端IP范围,以这种方式增加安全性
  • e.netstat -ap | grep ftp 查看服务器端ftp数据传输时使用的端口: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(上传)

8,禁用匿名用户,启用系统本地用户

  • 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。也可以不关闭selinux,在selinux中设置ftp例外,参考:
  • 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 #设置用户的单独配置文件,用哪个帐户登陆就用哪个帐户命名,实现不同用户不同权限(1,文件格式、属性和主配置文件一致 2,文件名没有.conf后缀  3,这里的属性会覆盖主配置文件相应的属性 4,并不是所有属性放这里都会起作用)
  • k.建立目录/etc/vsftpd/userconf,并创建ftp用户名想对应的文件prj,在文件中用local_root属性指定prj用户登录后进入的目录。还可以设置属性:cmds_allowed,local_umask=022, local_max_rate限速等
  • 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服务器重启

9,禁用匿名用户,启用虚拟FTP用户

  • a.anonymous_enable=NO  禁止匿名用户登录
  • b.local_enable=YES 允许本地用户登录,虽然虚拟用户不是操作系统用户,但是最终还是关联到虚拟宿主用户身上,因此,这里属性还是要设置为yes
  • 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)时,虚拟用户与其宿主用户有相同的权限。 当此参数关闭(NO)时,虚拟用户与匿名用户有相同的权限。默认情况下此参数是关闭的(NO)。
  • g.用db_load生成虚拟用户数据库
  • h.修改pam.d下的vsftpd文件,修改用户认证方式
  • i.…

10,ssl加密的vsftp(vsftp with OpenSSL)参考:加密ssl vsftp、ftp隐式加密&显式加密
11,vsftp配置用户磁盘配额(磁盘限额参考:Virtualbox下为CentOS增加新硬盘、Linux添加新硬盘、vsftp配置用户磁盘配额(磁盘限额)

// 匿名用户设置
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

vsftpd日志:默认情况下,vsftp在/var/log/xferlog文件中记录Wu-ftpd格式的日志(它会记录上传和下载的动作)。通过设置dual_log_enable和log_ftp_protocol,可以启用vsftp自己的日志,默认日志文件/var/log/vsftpd.log,其中会记录所有的ftp命令日志看到的内容和FTP客户端FileZilla中显示的内容一致!所以调试错误的时候,貌似也没有开启的必要。ftp登录或者操作出问题的时候,主要看返回的错误代码是多少,然后找可能的原因。如553 Could not create file.

  • 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   //是否将日志信息写入系统日志/var/log/messages中

常见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”或文件中不存在该帐户,解决:解决: 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,问题解决

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-216500-1-1.html 上篇帖子: CentOS 5中ulimit值调整并永久生效的方法 下篇帖子: CentOS安装mysql*.rpm提示conflicts with file from package的解决办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表