###############################FTP 
  
 ########服务器端 
  
 120.27.111.111 
  
 yum install vsftpd -y 
  
 chkconfig --level 35 vsftpd on 
  
 /etc/vsftpd/vsftpd.conf 
  
     local_enable=YES     
  
     anonymous_enable=NO 
  
     chroot_list_enable=YES 
  
     chroot_list_file=/etc/vsftpd/chroot_list 
  
 ##加入用户 
  
 /etc/vsftpd/chroot_list 
  
 yyftpuser 
  

 useradd yyftpuser-s /sbin/nologin -g vsftpd -d /FTP/fesco 
  
 passwd yyftpuser 
  

 #########客户端 
  
 @Echo Off 
  
 Echo open 120.27.111.111>ftp.up 
  
 Echo yyftpuser>>ftp.up 
  
 Echo yyftpuser@123>>ftp.up 
  
 Echo cd DB>>ftp.up 
  
 Echo binary>>ftp.up 
  
 Echo prompt >>ftp.up 
  
 Echo lcd "E:\datafiles\dmp0\">>ftp.up 
  
 Echo mput "E:\datafiles\dmp0\*.txt">>ftp.up 
  
 Echo bye>>ftp.up 
  
 FTP -s:ftp.up 
  
 del ftp.up /q 
  
 用bat文件执行的时候在某些网络(阿里云)中会如下,未能解决则选择了SFTP 
  






http://www.freefilesync.org/download.php这个工具可以做到同步但需要SFTP 
  
 
 ###############################SFTP 
 
 从技术角度来分析,几个要求: 
 

  1、从安全方面看,sftp会更安全一点 

 

  2、线上服务器提供在线服务,对用户需要控制,只能让用户在自己的home目录下活动 

 

  3、用户只能使用sftp,不能ssh到机器进行操作 

 
 
 
 

  提供sftp服务,可以用系统自带的internal-sftp,也可以使用vsftpd,这里需求不多,直接选用internal-sftp。 

 
 
 
 

  限制用户只能在自己的home目录下活动,这里需要使用到chroot,openssh4.8p1以后都支持chroot,我现在用的是CentOS 6.3,自带的openssh已经是5.3p1,足够了。 

 
 
 
 

  可以输入: 

 

 

  来查看openssh的版本,如果低于4.8p1,需要自行升级安装,不在这里具体介绍了。 

 
 
 
 

  假设,有一个名为sftp的组,这个组中的用户只能使用sftp,不能使用ssh,且sftp登录后只能在自己的home目录下活动 

 
 
 
 

  1、创建sftp组 

 

 
 
 
 
sftp
 
my 
 sftp
 
my 
 sftp
 
 
 
 
my 
 sftp目录,然后指定 
 my 
 sftp的home为/data/sftp/ 
 my 
 sftp
 
 
 
 
my 
 sftp
 
my 
 sftp  
 my 
 sftp


 转自:http://blog.sina.com.cn/s/blog_4fd50c3901018a0l.html 
 
 
 

  4、配置sshd_config 

 

  编辑 /etc/ssh/sshd_config 

 
 
 
 

 

  找到如下这行,并注释掉 

 
   
   
 sftp   
   
 /usr/libexec/openssh/sftp-server  
 
 
 
 
 

  在 
 文件尾添加如下几行 

 
   
   
  sftp   
   
 internal-sftp   
 
 

 

 
  
 internal-sftp   
 
 

 

 
 
 
 

  解释一下添加的几行的意思 

 
 
 
 
   
   
  sftp   
   
 internal-sftp   
 
 

  这行指定使用sftp服务使用系统自带的internal-sftp 

 
 
 
 

 

  这行用来匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割 

 
 
 
 

  当然,也可以匹配用户 

 
my 
 sftp
 

  这样就可以匹配用户了,多个用户名之间也是用逗号分割,但我们这里按组匹配更灵活和方便 

 
 
 
 

 

  用chroot将用户的根目录指定到/data/sftp/%u,%u代表用户名,这样用户就只能在/data/sftp/%u下活动,chroot的含义,可以参考这里:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/ 

 
 
 
 
  
 internal-sftp   
 
 

  指定sftp命令 

 
 
 
 

 

 

  这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉 

 
 
 
 

  5、设定Chroot目录权限 

 
my 
 sftp
 
my 
 sftp
 
 
 
 

  错误的目录权限设定会导致在log中出现”fatal: bad ownership or modes for chrootdirectory XXXXXX”的内容 

 
 
 
 

  目录的权限设定有两个要点: 

 

  1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root 

 

  2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限 

 
 
 
 

  所以遵循以上两个原则 

 
my 
 sftp的所有者设置为了root,所有组设置为sftp 

 
my 
 sftp的权限设置为755,所有者root有写入权限,而所有组sftp无写入权限 

 
 
 
 

  6、建立SFTP用户登入后可写入的目录 

 
my 
 sftp已经可以登录,但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供 
 my 
 sftp上传文件。这个目录所有者为 
 my 
 sftp,所有组为sftp,所有者有写入权限,而所有组无写入权限 

 
 
 
 
my 
 sftp/upload   
 
 
my 
 sftp:sftp /data/sftp/ 
 my 
 sftp/upload   
 
 
my 
 sftp/upload



7、重启sshd服务






my sftp已经可以通过sftp客户端登录并可以上传文件到upload目录。


SElinux


修改/etc/selinux/config文件中的SELINUX="" 为 disabled,然后重启。或者


# setenforce 0



一开始,我以为是权限问题导致的无法上传文件,即使给777权限给文件夹也不行.然后干脆关闭了SElinux,终于可以上传了。