openssh升级sftp_OpenSSH的SFTP服务器设置 | 菜包子

OpenSSH版本6.1p1,操作系统Fedora 18。

1 基本设置

很简单,用文本编辑器打开/etc/ssh/sshd_config,寻找下面这一行文字:Subsystem sftp /usr/libexec/openssh/sftp-server

如果这行文字存在且没有被注释掉,那么SFTP已经开启。所有可使用ssh的用户都可使用SFTP。

但是这种方式有一个缺陷,就是用户在SFTP软件里面可以cd /从而看到系统所有文件。

2 进阶设置

2.1 把用户的SFTP操作记录到日志文件中用文本编辑器打开/etc/ssh/sshd_config,把Subsystem那一行修改为下面样子:Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO

用文本编辑器打开/etc/rsyslogd.conf,增加下面一行:# Log sftp-server in a separate file

:programname, isequal, "sftp-server" /var/log/sftp.log

重启sshd服务和rsyslog服务:# systemctl restart sshd.service

# systemctl restart rsyslog.service

可在/var/log/sftp.log中查看用户登录及文件操作信息。

设置logrotate,避免日志文件过大。方法是创建/etc/logrotate.d/sftp文件,输入下面内容,保存:/var/log/sftp.log

{

postrotate

/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

endscript

}

2.2 把SFTP用户限定到特定目录中

前面我们知道,用户使用客户端成功连接SFTP服务器后,在客户端里可以切换到/目录,并查看所有有权查看的内容。如果想把用户限定在特定目录里,可以遵循以下步骤:ssh账户就是系统账户,把用户限制到某特定目录是通过ssh的chroot功能实现的。如果我们想让用户可以ssh登录到shell界面,必须在chroot目录下提供支持交互登陆所必须的一些文件。换句话说,我们做不到既能限制用户的SFTP访问目录,还能ssh正常登录并使用系统所有命令。因此必须创建一个只用于SFTP访问的用户sftp:# useradd -m -s /sbin/nologin sftp

把现有用户加入sftp的用户组中,以便访问其上传的文件。以用户john为例:# usermod -aG sftp john

修改sftp家目录权限,让sftp用户组的所有用户都可访问其中文件:# chmod 770 /home/sftp/

修改sshd配置文件/etc/ssh/sshd_config,找到Subsystem一行,改为下面的样子(注意里面把2.1节的“/usr/libexec/openssh/sftp-server”换成了“internal-sftp”,这是为了避免chroot后找不到sftp-server这个文件,无法正常使用SFTP服务器的情况。不过实际测试下来,在Fedora 18环境下,这一行不修改也可以正常使用):Subsystem sftp internal-sftp -l INFO

然后添加下面内容:Match User sftp

X11Forwarding no

AllowTcpForwarding no

ForceCommand internal-sftp -l INFO

ChrootDirectory /home

由于chroot的目录及其父目录所有者必须是root,且对root外其他用户不可写,简单起见我们把它设置为/home(上面ChrootDirectory设置项)。

重启sshd服务,使设置生效:# systemctl restart sshd.service

需要注意的是,设置了ChrootDirectory之后,系统无法记录SFTP的访问信息。具体到上面例子,使用sftp这个用户登录及操作文件的信息将不会被记录在服务器日志中。解决方法如下:在chroot目录下创建dev目录:# mkdir /home/dev

用文本编辑器打开/etc/rsyslog.conf,添加下面内容:# Create an additional socket for some of the sshd chrooted users.

$AddUnixListenSocket /home/dev/log

# Log internal-sftp in a separate file

:programname, isequal, "internal-sftp" /var/log/sftp.log

注意如果系统开启了SELinux,$AddUnixListenSocket这一行设置无法生效。暂不想深入研究SELinux,在这里我们简单地禁用它。编辑/etc/selinux/config文件,把“SELINUX=”一行改为下面内容,然后重启系统:SELINUX=disabled

今后再使用sftp这个用户访问SFTP服务器,/var/log/sftp.log就会有相关记录(设置logrotate见2.1 把用户的SFTP操作记录到日志文件中 )。

3 主要参考文档

(737)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值