首页 > 代码库 > Sftp服务器搭建和限制用户目录
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
[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 root
[root@rd168 home]# chmod 755 delcom
[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目录,且已经限制用户在家目录,同时该用户也不能登录该机器。
常见错误
Couldn‘t read packet: Connection reset by peer
主要是权限问题,上面连接测试时有提到。
本文出自 “巧妙绝情-李靖” 博客,请务必保留此出处http://qiaomiao.blog.51cto.com/484197/1588733
Sftp服务器搭建和限制用户目录