首页 > 代码库 > proftp sftp
proftp sftp
公司跟很多客户合作,需要提供ftp服务器供客户上传文件。
根据pci-dss的要求,ftp是不行的,因为是明文;用tls加密的话,客户又不干了,程序很麻烦。
1
2
3
4
5
/export
|-- upload 对应用户sftponly,可以操作所有子目录 |-- dacheng 对应用户50010100,只能在自己目录下操作 |-- fuhua 对应用户50101200,只能在自己目录下操作 |-- xxxxxx
没办法,只能用sftp了。两种做法:
①用openssh自带的sftp功能,这个不推荐啊。理由如下:
一是要建立一堆的系统帐号,就算shell设置成/sbin/nologin,也是一大威胁。
二是我们需要把用户限制在自己的目录下,不能看到其他用户的东西,这个好办,我们还需要建立一个在所有客户目录上的一个用户sftponly,他是可以往这些用户的目录中写反馈文件的。这样就麻烦了,用openssh-sftp的话,需要上级目录是root权限,下级目录是用户权限,而上级如果是能读所有下级目录的话,就必须把这个用户放进root组,严重违反了pci-dss的要求。而且这么设置后,还必须用mount的方法来限制用户越出目录,越弄越麻烦啊。
②用proftp,超级强悍啊。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
DenyAll
SFTPEngine on SFTPLog /var/log/sftp.log SFTPOptions IgnoreSFTPUploadPerms IgnoreSCPUploadPerms PessimisticKexinit RequireValidShell off # We are presumably using port 22 for standard Shell login, so move SFTP to another port Port 6666 SFTPHostKey /etc/ssh/ssh_host_rsa_key SFTPHostKey /etc/ssh/ssh_host_dsa_key SFTPCompression delayed MaxLoginAttempts 6 DefaultRoot ~ Umask 022 CreateHome on 700 dirmode 700 SFTPAuthMethods password AuthUserFile /usr/local/proftp/etc/sftp.passwd
AllowAll
AllowOverwrite on
order Allow,Deny AllowUser ALL
解释一下,首先的deny all,拒绝掉了21端口的所有请求,表明这个proftp就是纯的一台sftp server。
我们实际只建立了一个系统用户,所有的子帐号都是虚拟的,所以SFTP Options需要做一些指定。
proftp的权限可以限制到非常多的细节,所以下面做了很多具体权限的设置,大家可以根据需要裁剪。
本服务器已经搭建供10几家基金公司使用。
系统的实际用户只有一个:
1
sftponly:x:602:603::/export/upload:/sbin/nologin
可以用proftp提供的ftpasswd来产生sftp.passwd
sftp.passwd
1
2
50110000:xxxxxxxxxxxxx:602:603::/export/upload/yifangda:/bin/bash
50060000:xxxxxxxxxxxxx:602:603::/export/upload/penghua:/bin/bash
注意,这里的/bin/bash是可以胡填的,因为帐号602的sftponly实际根本没有权限。