搭建一个sftp服务器,
可断点续传文件, 同时要求安全性高:
1. 开启selinux, 使用chroot
2. 同时运行两个sshd服务, 暂时称作sshd-a, sshd-b, 并提供user-a来使用sftp.
那么:
2.1. sshd-a的端口, 不会限制ip访问. user-a只能连接到sshd-a服务上, 除user-a之外的账户,
不能连到sshd-a服务上.
2.2. sshd-b的端口(默认是22), 会限制ip访问, 除user-a之外的账户,
能且只能连到sshd-b服务上.
下面的链接已经包含了所有的操作和说明, 本文档只是整理而已
一. 新建group和user
1. 新建一个group(sftponly), 属于该group的用户, 都将被限制只能访问sftp:
groupadd sftponly
2. 创建一个账户(sftponlyuser),
用于sftp操作.
useradd -M -g sftponly sftponlyuser
上面的命令, 新建了一个sftponlyuser, 隶属于sftponly用户组.
默认的该账户的home目录是/home/sftponlyuser, 但 "-M" 选项, 使该命令并未创建该目录.
究其原因, 是因为chroot-ed的目录, 属主必须是root, 且不能被其他账户write.当然, 该目录下用来上传文件的子目录(比如upload),
属主必须是sftponlyuser
mkdir -p
/home/sftponlyuser/upload
chown sftponlyuser:
/home/sftponlyuser/upload
restorecon -R -v
/home/sftponlyuser
3.
给sftponlyuser设置密码
passwd sftponlyser
二. 在一个linux服务器上, 同时运行两个sshd服务. 以 centos6.x x86_64
为例:
1. 复制sshd: cp /usr/sbin/sshd /usr/sbin/sshd2
2. 复制sshd的配置文件: cp /etc/ssh/sshd_config /etc/ssh/ssh2d_config,
并在/etc/ssh/ssh2d_config中,
添加如下配置:
#新的sshd服务(ssh2d),
监听33端口
Port 33
#使用pam,
默认亦如此
UsePAM yes
#override
default of no subsystems
#开启sshd的内部sftp服务
#Subsystem
sftp
/usr/libexec/openssh/sftp-server
Subsystem
sftp
internal-sftp
#限制sftponly组的账户, 都只能访问sftp子系统.
且chroot-ed了.
Match
Group sftponly
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory %h
3. cp /etc/sysconfig/sshd /etc/sysconfig/ssh2d,
并修改/etc/sysconfig/ssh2d的内容如下:
#
Configuration file for the sshd service.
# The
server keys are automatically generated if they
ommited
# to
change the automatic creation uncomment the approprite
line.
#
AUTOCREATE_SERVER_KEYS=RSAONLY
#
AUTOCREATE_SERVER_KEYS=NO
AUTOCREATE_SERVER_KEYS=YES
# Do not
change this option unless you have hardware random
#
generator and you REALLY know what you are doing/
export
SSH_USE_STRONG_RNG=0
# export
SSH_USE_STRONG_RNG=1
#指向新的配置文件
OPTIONS="-f
/etc/ssh/ssh2d_config"
4. cp /etc/init.d/sshd /etc/init.d/ssh2d , 并根据上面的内容,
仔细修改/etc/init.d/ssh2d. 5. 复制一个pam的配置文件
cp /etc/pam.d/sshd /etc/pam.d/ssh2d
注意: 现在的sshd, 都会以当前的可执行文件的文件名, 来选取pam的配置文件.
我们可使用下面的命令来验证这一点:
#-f表示亦追踪子进程的系统调用
strace -fp {ssh2d_pid} -e trace=open
可以在输出中, 看到打开的文件是/etc/pam.d/ssh2d, 而不再是/etc/pam.d/sshd
5. 添加我们刚做的第二个sshd服务(ssh2d), 并设置成自启动:
chkconfig --add ssh2d
chkconfig ssh2d on
三. 限制账户只能在连接到指定的sshd服务上
1. 修改/etc/pam.d/sshd, 在最前添加下面的行:
auth required pam_listfile.so item=user sense=deny
file=/etc/sshd/sshd.deny onerr=succeed
并新建/etc/sshd/sshd.deny文件, 同时加入下面的内容,
如此阻止sftponlyuser登录到第一个sshd服务上
sftponlyuser
2. 修改/etc/pam.d/ssh2d, 在最前添加下面的行:
auth required pam_listfile.so item=user sense=allow
file=/etc/ssh/ssh2d.allow onerr=fail
并新建/etc/sshd/ssh2d.allow文件,
同时加入下面的内容, 如此只允许sftponlyuser登录到ssh2d服务上
sftponlyuser
3. 重启 sshd 和 ssh2d 服务:
/sbin/service sshd
restart
/sbin/service ssh2d
restart