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

摘自:https://blog.csdn.net/pdw2009/article/details/51189748

在centos6.5中使用sshd自带sftp服务配置 sftp。

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

目录:

什么sftp服务器

怎么搭建sftp服务器

怎么限制用户目录

常见错误

 

什么sftp服务器

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

怎么搭建sftp服务器

   在主流linux系统版本当中,默认都有安装openssl和openssh包,都有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编译的时候会找不到新安装的openssl的library, 会报错: openssl的 header和library版本不匹配

 [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.allow和host.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登录进来时只能进入主目录或某一个目录,

如果是用yum和rpm包安装的修改/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目录,且已经限制用户在家目录,同时该用户也不能登录该机器。

 

客户端使用sftp上文件如报:Permission denied

这样解决:

nano /etc/selinux/config
SELINUX=disabled
#reboot system
重启
http://blog.chinaunix.net/uid-26683523-id-3078694.html
————————————————
版权声明:本文为CSDN博主「pdw2009」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/pdw2009/article/details/51189748

posted @ 2020-03-11 17:59  LiuYanYGZ  阅读(663)  评论(0编辑  收藏  举报