您的位置:首页 > 运维架构 > Linux

一分钟在Linux环境下创建一台SFTP服务器(含账户创建)

2017-12-19 21:36 369 查看
FTP是比较常见的一种服务了,很多公司都会有可能使用到FTP服务器,本文将以最简洁的办法使用系统自带的ssh软件在1分钟内搭建一台使用方便的FTP服务器。

SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP为SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。执行以下脚本在一分钟之内即可完成SFTP服务器的搭建。

#!/bin/bash
#===============================================================================
#          FILE: SftpCreate.sh
#         USAGE: ./SftpCreate.sh
#   DESCRIPTION: Create a Sftp Server
#       OPTIONS: None
#  REQUIREMENTS: Nene
#        AUTHOR: Geeklp (IVAN DU), geeklp@qq.com
#  ORGANIZATION: GEEKLP
#       CREATED: 2017年12月19日 10时29分12秒
#      REVISION: V1.1
#===============================================================================
set -o nounset                              # Treat unset variables as an error
Users=('chinapay' 'ctbx' 'haoyilian' 'hbgyl' 'huaxia' 'jczh' 'kjb' 'lykj' 'lzkj' 'msyh' 'nyjt' 'pingan' 'xldz' 'yigw' 'yytwallet')
PassWord='Neoby1314'
#modify the /etc/ssh/sshd_config
sed -i '/Subsystem/s/^/#/' /etc/ssh/sshd_config
sed -i '/^#Subsystem/a\Subsystem       sftp    internal-sftp' /etc/ssh/sshd_config
#---------Create SFTPUsers----------
for UserName in ${Users[@]};
do
id -u $UserName>& /dev/null
if [ $? -ne 0 ]; then
mkdir /home/$UserName #创建用户SFTP的root目录
adduser $UserName -d /home/$UserName/$UserName #创建用户并指定用户目录
echo "The account $UserName  was created!"
echo $PassWord | passwd $UserName --stdin  #从标准输入流中读取密码
usermod -s /bash/false $UserName #禁止ssh登录
echo "
Match User $UserName
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
ChrootDirectory /home/$UserName">>/etc/ssh/sshd_config
else
echo "The username $UserName was existed!"
fi
done
systemctl restart sshd
#----------END-----------------------


在以上脚本中有几个关键点:

1、用户目录。出于安全考虑,分别创建独立用户根目录,如果多个用户都在同一个根目录下,其他用户是可以看到别人的用户目录的,这也就是执行创建/home/UserName/UserName的目的所在。这也是与网上大部分文章不同的地方之一。当然,用户目录不一定需要用户的home目录,只要用户对目录具有所有权都是可以的。

2、禁止用户的ssh登录,本方案中使用的指定登录脚本为/bin/false,当然也还有其他方案。

3、修改配置文件。在本方案中,涉及到配置文件的2个地方的修改。Subsystem这一行的修改,Match User $UserName后面需要加一行来指定用户根目录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息