Sftp服务器搭建和限制用户目录

来源:互联网 发布:sql数据可视化 编辑:程序博客网 时间:2024/05/29 10:59

概述:公司对外客户上传账户清单,以前每个月都是用FTP上传,出于安全考虑改用sftp上传但又要限制用户根目录,为此在网上查了很多资料,在此记录下自己心得。

目录:

  • 什么sftp服务器

  • 怎么搭建sftp服务器

  • 怎么限制用户目录

  • 常见错误

 

什么sftp服务器

sftpSecure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp ftp 有着几乎一样的语法和功能。SFTP  SSH的一部份,是一种传输档案至 Blogger 伺服器的安全方式。本身没有守护进程,是包含在ssh中,端口也是22.

怎么搭建sftp服务器

   在主流linux系统版本当中,默认都有安装opensslopenssh,都有ssh命令,也就是说默认安装好了SFTP服务器和sftp命令。

   没有的安装,安装方法很简单,在centos/redhat等,直接安装:

[root@rd168 ~]# yum -y install openssl

[root@rd168 ~]# yum -y install openssh-server

[root@rd168 ~]# yum -y install openssh-clients

 

   有安装但版本太低sftp服务用户只能访问特定的文件目录,版本需要4.8以上:

以下源为码升级方法,是以centos5.11为例。

0. 先查看当前安装的版本

  ssh -V 命令查看ssh版本  openssl version 命令查看openssl版本

[root@rd168 ~]# ssh  -V

OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

[root@rd168 ~]# openssl version

OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

1.官网下载新版的源码包

     openssh: http://www.openssh.com/portable.html 这里官网上找到的下载有两种一种是直接下载OpenBSD(附带openssh, 显然不是我等需要的), 另外一种就是这种portable版的

     openssl:  http://www.openssl.org/source/

2. 安装openssl

 一定要先安装openssl, 一定记得加上--shared选项否则openssh编译的时候会找不到新安装的openssllibrary, 会报错: openssl headerlibrary版本不匹配

 [root@rd168 ~]#tar -zxvf openssl-1.0.1j.tar.gz

[root@rd168 ~]# cd  cd openssl-1.0.1j

[root@rd168 openssl-1.0.1j]#  ./config --prefix=/usr –shared

 [root@rd168 openssl-1.0.1j]#  make
[root@rd168 openssl-1.0.1j]#  make test
(这一步很重要哦!是进行 SSL 加密协议的完整测试,如果出现错误就要一定先找出哪里的原因,否则一味继续可能导致最终 SSH 不能使用,后果很严重哦!)
[root@rd168 openssl-1.0.1j]#  make install

 完毕后查看openssl版本安装是否正确

[root@rd168 openssl-1.0.1j]#  openssl version

OpenSSL 1.0.1j 15 Oct 2014

3. 安装openssh

[root@rd168 ]# cd ../openssh-5.3p1

[root@rd168 ]# tar zxvf openssh-5.3p1.tar.gz

[root@rd168 ]# cd ../openssh-5.3p1

 [root@rd168 openssh-5.3p1]# ./configure --prefix=/usr --with-pam --with-zlib --with-md5-passwords --with-tcp-wrappers (使用这个选项源码安装才支持libwrap.so.0库,才可以使用/hosts.allowhost.deny哦!)

 [root@rd168 openssh-5.3p1]#     make
 [root@rd168 openssh-5.3p1]#    make install

完毕后查看openssh版本安装是否正确

[root@rd168 openssl-1.0.1j]#  ssh  -V

OpenSSH_5.3p1, OpenSSL 1.0.1j 15 Oct 2014

这种安装会把sshd的配置文件放在/usr/etc/sshd_config

4.生成/etc/init.d/sshd服务管理脚本

进入ssh解压目录

 [root@rd168 openssh-5.3p1]#  #cd /contrib/redhat

 [root@rd168 redhat]#  cp sshd.init /etc/init.d/sshd

 [root@rd168 redhat]#  chmod +x /etc/init.d/sshd

 [root@rd168 redhat] #  chkconfig –add sshd

最后,启动 SSH 服务使修改生效:
 [root@rd168 redhat] # /etc/init.d/sshd restart

怎么限制用户目录

1.新增用户,限制用户只能通过sftp访问


[root@rd168 home]# useradd -m  -s /sbin/nologin delcom03

2.限制用户通过sftp登录进来时只能进入主目录或某一个目录

如果是用yumrpm包安装的修改/etc/ssh/sshd_config文件,我这是个源码安装的且为—perfix=/usr,所以要修改/usr/etc/ssh/sshd_config.

[root@rd168 home]# vim /usr/etc/ssh/sshd_config


#Subsystem      sftp    /usr/libexec/sftp-server

Subsystem       sftp    internal-sftp

 

# Example of overriding settings on a per-user basis

#Match User anoncvs

#       X11Forwarding no

#       AllowTcpForwarding no

#       ForceCommand cvs server

 

        Match User delcom03

        X11Forwarding no

        ChrootDirectory /home/delcom03

#       AllowTcpForwarding no

        ForceCommand  internal-sftp

3.测试访问


[root@test  home]# sftp -oport=22 delcom03@192.168.1.67

Connecting to 192.168.1.67

The authenticity of host '192.168.1.67 (192.168.1.67)' can't be established.

RSA key fingerprint is 97:e1:59:e6:89:4f:a0:72:dd:5d:ba:0b:15:75:b6:a8.

Are you sure you want to continue connecting (yes/no)?

Warning: Permanently added '192.168.1.67' (RSA) to the list of known hosts.

delcom03@192.168.1.67's password:

Read from remote host 192.168.1.67: Connection reset by peer

Couldn't read packet: Connection reset by peer

4.发现连接不上,查看日志


[root@test  home]# tail /var/log/messages

Dec 11 08:58:41 localhost sshd[4907]: fatal: bad ownership or modes for chroot directory "/home/delcom03"

Dec 11 08:58:41 localhost sshd[4905]: pam_unix(sshd:session): session closed for user delcom03

解决方法:

目录权限设置要遵循2点:

ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root

ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,权限最大设置只能是755

如果不能遵循以上2点,即使是该目录仅属于某个用户,也可能会影响到所有的SFTP用户。

[root@rd168  home]# ll

drwxr--- --- 3  delcom03  delcom03 4096 Dec 10 16:42 delcom03

[root@rd168  home]# chown root delcom03

[root@rd168  home]# chmod 755 delcom03

[root@rd168  home]# ll

drwxr-xr-x 3  root   delcom03 4096 Dec 10 16:42 delcom03   

这里可以看出delcom03账户sftp登录后没有删除和写权限,下面就来解决。

[root@rd168  home]# mkdir sftp &&chown delcom03 sftp

[root@rd168  home]# ll delcom03/

drwxr-xr-x 3  delcom03  root  4096 Dec 10 18:58 sftp  上传文件到sftp目录,就有写权限了

 

 

然后在测试通过

[root@test  home]# sftp -oport=22 delcom03@192.168.1.67

Connecting to 192.168.1.67

delcom03@192.168.1.67's password:

sftp>

sftp> cd  /

sftp> pwd

Remote working directory: /

sftp> ls

sftp

sftp> ls /

/sftp

sftp> cd sftp

sftp> pwd

Remote working directory: /sftp

sftp> lls

test.txt

sftp> put  test.txt

Uploading  test.txt  to /sftp/test.txt

Test.txt                       100%  31KB  31.4KB/s   00:00   

可以看到用户delcom03可以上传文件到根/sftp目录,且已经限制用户在家目录,同时该用户也不能登录该机器。


本文是 巧妙绝情 一个字一个图打出来,参考了好多资料,感谢他们的分享,基于open source分享精神,转载请注明出出。
支持我,请点击 巧妙绝情 谢谢


常见错误

Couldn't read packet: Connection reset by peer

主要是权限问题,上面连接测试时有提到。

原创粉丝点击