OpenSSH网站上那只SSH刺河豚将FTP埋葬
有关sftp有人推荐www.ssh.com的实现,不过我更喜欢开源的产品,特别是Open系列的安全产品。
需求
首先我们明确我们的目标,我们是希望通过SFTP代替FTP,需求是这样的:
- 这些用户只能通过SFT访问服务器
- 用户要锁定在相应的目录下
我想通常的思路是这样的:
- 打开OpenSSH的SFTP
- 将这些用户设置在一个组中
- 让OpenSSH识别这个组,只允许这些用户使用SFTP
- 最后系统要自动的将用户chroot在用户目录下
配置
我开始都觉得是不是要求太高,不过OpenSSH可以解决以上所有问题。话说回来,如果不能解决怎么可以把FTP埋葬呢。
SSHD_CONFIG
sshd通常是打开了sftp的,不过我们应该使用
internal-sftp在sshd_conf中作如下配置:
1 # Subsystem sftp /usr/lib/openssh/sftp-server # 注释掉
2 Subsystem sftp internal-sftp
3
4 ##
5 Match group sftponly
6 ChrootDirectory /sftphome/%u
7 X11Forwarding no
8 AllowTcpForwarding no
9 ForceCommand internal-sftp
10
解释一下:当sshd匹配到sftponly组中的用户,就会强制使用sftp(ForceCommand的作用),并将用户限定在/sftphome/下相应用户的目录下(ChrootDirectory的作用)。
创建用户
我们需要创建相应的用户了:
#useradd -G sftponly -d /sftphome/sftpuser -s /usr/sbin/nologin sftpuser
#tail /etc/password
sftpuser:x:1000:1000::/sftphome/sftpuser:/usr/sbin/nologin
#passwd sftpuser
你可以在其他机器上用sftp登录试试了。你的连接将会被reset!去看看sshd的日志,你会发现pam.d的认证是通过了的,但是chroot失败了。按网络上的说法
#chown root /sftphome/sftpuser
#chmod 755 /sftphome/sftpuser
再试,可以登录。新的问题是不能在此目录下写入。对的嘛,755对于组用户是不能写啊。再试试775,刚才的问题就来又了,chroot失败。
以上内容网络上一google一大把。可以登录不能写这个问题真让人困惑!后来我想可能应该这样理解:既然要chroot,那个目录不属于root肯定是不行的(说错了,猛拍砖)。那我们就不能为用户提供完整的sftp服务了吗?我想可以这样
#mkdir /sftphome/sftpuser/space
#chown sftpuser.sftpuser /sftphome/sftpuser/space
由系统管理员为sftp用户提供一个目录,并设置其用户属性,用户在这个目录下用户是可写的。当然可以创建很多个。
这样算不算解决这个问题呢?暂且如此吧。如果您有好方法,一定告知哦。