Linux搭建FTP服务器,FtpGetCurrentDirectory和FtpSetCurrentDirectory问题

一、在VMware的RHEL6.9中搭建 ftp 服务器的基本步骤

1. 安装FTP服务器
    rpm -qa | grep vsftpd         #查看是否已安装vsftpd
    yum -y install vsftpd          #如果没有安装执行该命令安装
    使用yum安装前需预先建立安装源,参见https://blog.csdn.net/ikaoni/article/details/103595047

2. 修改vsftpd服务配置文件(匿名用户有关配置)
    vi  /etc/vsftpd/vsftpd.conf    #编辑vsftpd配置文件,包含以下内容
    anonymous_enable=YES
    anon_umask=022
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES

3. 设置匿名用户主目录的权限
    chown -Rf ftp /var/ftp/pub      #将默认ftp目录的所有者改为ftp
    ll -d /var/ftp/pub                      #查看目录权限
    drwxr-xr-x. 3 ftp root 4096 10月 14 13:31 /var/ftp/pub    #说明设置是正确的

4. 设置防火墙
    RHEL6中的设置(iptables):
    方法一:关闭防火墙(不推荐):service iptables stop    #常用的有start, stop, status
    方法二:不关闭iptables,设置规则:
    (1)主动模式:
    iptables -I INPUT -p tcp --dport 21 -j ACCEPT  #开放命令端口21
    iptables -I INPUT -p tcp --dport 20 -j ACCEPT  #开放数据端口20
    (2)被动模式:
    iptables -I INPUT -p tcp --dport 21 -j ACCEPT  #开放命令端口21  
    iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    vi /etc/sysconfig/iptables-config       #编辑iptables配置文件,修改下面一行
    IPTABLES_MODULES="ip_conntrack_ftp"      #原来=后面是空串
    为安全起见,还可以进一步配置数据端口,即去掉第二行(-m state --state这行),做如下修改:
    vi /etc/vsftpd/vsftpd.conf    #编辑vsftpd服务的配置文件
    pasv_enable=YES            #启用被动模式(注释掉也是被动模式)
    pasv_min_port=3000        #数据端口号最小值
    pasv_max_port=4000       #数据端口号最大值
    iptables -I INPUT -p tcp --dport 3000:4000 -j ACCEPT  #开放数据端口3000--4000
    注意修改后保存和重启服务:
    service iptables save         #保存iptables规则(重启不丢失)
    service iptables restart       #重新启动iptables防火墙。
    service vsftpd restart          #重新启动vsftpd服务
    由于OUTPUT默认是ACCEPT,不用再设置出口方向的规则了。在配置文件中,主动模式被动模式可以同时使用。具体采用哪一个决定于客户端,像FlashFXP、Xftp这些软件都可以在连接选项中选择主动模式还是被动模式。
    RHEL7中的设置(firewall):
    运行firewall-config命令打开firewall的GUI配置界面,默认当前区域是pub,在运行时和永久配置中勾选其中ftp项。

5. 设置SELinux
    方法一:关闭SELinux(不推荐):setenforcing 0    #设置运行模式为permissive,这是临时起作用。
    如果要永久有效(重启不丢失),需要编辑selinux配置文件:vi /etc/selinux/config,修改SELINUX=enforcing一行为:SELINUX=permissive
    方法二:不关闭SELinux,设置策略:
    getsebool -a | grep ftp                   #查看现有ftp策略条目,其中一条如下
    allow_ftpd_full_access --> off        #当前该条目设置是off
    setsebool -P allow_ftpd_full_access=on       #将该项改为on,-P表示永久生效(重启不丢失)

6. 启动 ftp 服务
    RHEL6中的命令:
    service  vsftpd  start                 #启动 ftp 服务
    service  vsftpd  status              #查看 ftp 服务状态,是否启动成功
    service  vsftpd  stop                 #必要时停止服务
    service  vsftpd  restart              #必要时重启服务
    chkconfig  vsftpd  on                #设置 vsftpd 服务开机启动
    chkconfig  --list  vsftpd              #检查 vsftpd 在哪些级别启动
    RHEL7中的命令:
    systemctl  start  vsftpd
    systemctl  status  vsftpd
    systemctl  stop  vsftpd
    systemctl  restart vsftpd
    systemctl  enable  vsftpd.service
    systemctl  list-units  --type=service

二、C程序匿名访问ftp服务器出现的问题

1. 无法设置和获取服务器当前路径
    bSuccess=FtpSetCurrentDirectory (hFtpSession, DIRECTORY); //设置服务器当前路径,返回FALSE,应为TRUE
    FtpGetCurrentDirectory(hFtpSession, buffer, &bufsize); //获取服务器当前路径,返回buffer为空串,应为 "/"
    解决方法:
    hIntSession=InternetOpen (szAppName, INTERNET_OPEN_TYPE_PRECONFIG,
                                                 NULL, NULL, INTERNET_FLAG_ASYNC) ;
    把最后一个参数INTERNET_FLAG_ASYNC改成 0 就可以了。大神説这个参数是异步标志,可能和FTP Server有关。

2. 无法获取服务器文件列表
    hFind=FtpFindFirstFile (hFtpSession, TEMPLATE, &finddata, 0, 0) ;  //返回hFind为NULL,不正确
    解决方法:
    getenforcing        #查看当前SELinux运行模式
    setenforcing  0    #将当前运行模式设置为Permissive
    如果要永久设定为Permissive模式,还需要修改SELinux配置文件:
    vi  /etc/sysconfig/selinux    #编辑SELinux配置文件
    SELINUX=permissive        #将这行原来的enforcing改为permissive
    如果使用enforcing模式,需要设置策略,以后补充。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值