基于CentOS7.9搭建Sftp服务器(附带创建用户脚本)

背景:

· 现有方式:

1、公司通过FTP服务器将研发数据传输给外部合作公司,外部公司将数据传给公司;

2、员工在外网下载管理员给定的数据,或是将数据传到公司

· 问题1:现有FTP服务器在传输过程中不对数据进行加密、存在泄密风险。如果人工将数据包加密后传输,对方在收到数据后进行解密,会占用双方过多时间

· 问题2:现有FTP服务器运行于被动模式,占用过多的端口甚至是整个IP地址

· 解决方法:通过搭建SFTP服务器,实现对数据进行加密,且仅占用一个TCP端口

搭建过程:

· 系统:CentOS7.9,按最小化安装不带图形界面即可

  1. 首先创建sftp用户组,在组的基础上进行统一管理

groupadd sftp
  1. 创建sftp目录并设置权限

# 创建sftp目录
mkdir /sftp

# 设置目录所有者(如果需要实现ChrootDirectory功能,则目录所有者必须为root)
chown root:sftp /sftp

# 设置目录权限(如果需要实现ChrootDirectory功能,则目录权限代码不能高于755)
chmod 755 /sftp
  1. 编辑SSH配置文件

# 备份配置文件
cp /etc/ssh/sshd_config{,.bak}

# 禁用DNS反向解析、GSSAPI认证功能,防止登录SSH过慢
sed -ri 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
sed -ri 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config

# 注释掉配置文件自带的Subsystem sftp /usr/libexec/openssh/sftp-server条目
sed -ri 's/Subsystem/# Subsystem/' /etc/ssh/sshd_config

# 添加Subsystem sftp internal-sftp条目
echo 'Subsystem sftp internal-sftp' >> /etc/ssh/sshd_config

# 针对用户组sftp匹配规则(多个组名称可用逗号分隔)(匹配用户可写为Match User 用户名)
echo 'Match Group sftp' >> /etc/ssh/sshd_config

# 规则1:禁止sftp组使用X11图形功能
echo '       X11Forwarding no' >> /etc/ssh/sshd_config

# 规则2:禁止sftp组使用端口转发功能(外部用户可将sftp作为跳板访问公司内部其他服务器,存在隐患)
echo '       AllowTcpForwarding no' >> /etc/ssh/sshd_config

# 规则3:强制sftp组使用sftp组件提供的命令,禁止运行自定义命令
echo '       ForceCommand internal-sftp' >> /etc/ssh/sshd_config

# 规则4:用户登录后,将其锁定在其根目录,防止其访问到其他用户的目录
echo '       ChrootDirectory /sftp/%u' >> /etc/ssh/sshd_config

# 重启sshd服务使刚才的配置生效,并查看服务是否运行正常
systemctl restart sshd; systemctl status sshd
  1. 创建用户(因手工配置比较繁琐,于是编写了以下脚本实现自动创建用户、用户目录、并配置权限)

# 创建自定义程序
vi /usr/bin/sftpadd
# 将以下脚本写入到自定义程序中(从#!/bin/bash开始顶格写)

#!/bin/bash

# 检测脚本是否以Root或sudo权限运行
if [ $UID -ne 0 ];then
    echo -e "Must run with root or sudo privileges!"
    exit 0
fi

# --help帮助信息
if [[ "$1" == "--help" ]] || [ $# -eq 0 ];then
    echo -e "\nUsage: sftpadd [user name] [user passwd] [permissions]"
    echo -e "\nList Of Parameter:"
    echo -e "    username:     sftp user name"
    echo -e "    userpasswd:   sftp user password"
    echo -e "    permissions:  u: mkdir upload, allow reading and writing"
    echo -e "                  d: mkdir download, read-only"
    echo -e "\nExamples 1:"
    echo -e "    command:      sftpadd tom 123456 d"
    echo -e "    action:       Create user tom, only allow download"
    echo -e "\nExamples 2:"
    echo -e "    command:      sftpadd jerry 123456 ud"
    echo -e "    action:       Create user jerry, allow upload and download\n"
    exit 0
fi

# 校验传入参数是否正确
if [ $# -ne 3 ]; then
    echo -e "Parameter error, Please use sftpadd --help"
    exit 0
fi

# 提取传入值
user_name="$1"; user_passwd="$2"; user_permissions="$3"

# 校验用户名是否重复存在
if grep -q "$user_name" /etc/passwd; then
    echo -e "User already exists!"
    exit 0
fi

# 校验密码是否小于6位
if [ $(echo ${#user_passwd}) -lt 6 ]; then
    echo -e "User password is less than 6 digits!"
    exit 0
fi

# 校验传入参数是否包含非u/d字符
if [[ "$(echo $3 | sed -e 's/u//' -e 's/d//')" != "" ]]; then
    echo -e "Permission parameter contains illegal characters! Please use sftpadd --help"
    exit 0
fi

# 创建用户及密码、将用户加入到sftp组、禁止其通过ssh客户端软件登录到服务器
useradd -g sftp -s /sbin/nologin -M "$user_name" >> /dev/null 2>&1
echo -e "    Create User Complete:           $user_name"
echo "$user_passwd" | passwd --stdin "$user_name" >> /dev/null 2>&1
echo -e "    Create User Password:           $user_passwd"

# 生成用户目录的路径
upload_path="/sftp/$user_name/upload/"
download_path="/sftp/$user_name/download/"

# 创建并回显用户目录
if [[ "$3" =~ "u" ]];then
    mkdir -p "$upload_path"
    chown "$user_name:sftp" "$upload_path"
    chmod 700 "$upload_path"
    echo -e "    Create the upload directory:    $upload_path"
fi

if [[ "$3" =~ "d" ]];then
    mkdir -p "$download_path"
    chown "$user_name:sftp" "$download_path"
    chmod 500 "$download_path"
    echo -e "    Create the download directory:  $download_path"
fi

exit 0

# 对自定义程序添加可执行权
chmod +x sftpadd

· 使用方法及参数:

  1. 运行sftpadd或sftpadd --help会有详细提示

  1. 被创建的用户不具有ssh客户端登录功能(登录后立即闪退),只能用于sftp功能的登录

  1. 程序自动且只能以固定模式创建用户目录:如果在创建时添加u参数,则自动创建upload目录并设置用户对其可读写;如果添加d参数,则自动创建download目录并设置用户对其只读

· 使用方法举例1:

有家外部合作公司需要将数据传到本公司,为其创建账号user1 密码123456,并设置其拥有对upload目录的读写权限

运行命令:sftpadd user1 123456 u

程序自动创建用户user1,及用户目录/sftp/user1/upload,并user1对upload目录拥有读写权限

· 使用方法举例2:

公司的数据需要让外部合作公司下载,但是不允许其操作download目录的文件(删除、改名、或是修改数据等),为其创建账号user2 密码123456,并设置其对download仅有只读权限

运行命令:sftpadd user2 123456 d

· 使用方法举例3:

公司某员工需要在外网上传/下载数据,为其创建账号user3 密码123456,其对upload拥有读写权限、对download拥有只读权限。因为Sftp服务器由高权限管理员控制,这样user3普通用户只能将外部数据传到公司,但是无法将公司内部数据私自传出(只能通过管理员将数据放到download目录后进行下载)

运行命令:sftp user3 123456 ud

5. 验证

· 通过sftp命令或是WinSCP、Xshell、FileZilla、Xftp等工具登录服务器,对相关设置进行验证

· 测试user3能否登录

运行sftp user3@127.0.0.1命令,然后输入密码进行登录

· 验证user3登录后是否被锁定到了根目录(无法访问其他用户的文件):

  1. 运行ls / 命令,如显示为user3创建的/download /upload目录即为正常

  1. 如果显示其他用户的目录或是系统目录,则sshd_config配置文件中的ChrootDirectory参数或是/sftp目录的权限设置有误

· 验证user3对download目录是否具有只读权限

  1. 运行mkdir /download/test命令,尝试在download目录创建一个测试目录test

  1. 如果提示Permission denied则表示权限设置无误,因为用户对download目录只有只读权限

· 验证user3对upload目录是否具有读写权限

运行mkdir /upload/test 命令,尝试在upload目录创建一个测试目录test,如果未报错则表示权限设置无误,因为用户对upload目录拥有读写权限

6. 端口映射

· 将内网SFTP的22端口通过防火墙或是路由器映射到外网

注意:

  1. 请勿将外网IP的22端口映射到内网SFTP服务器的22端口,因为外网有专门的主机去攻击存在漏洞的服务器、或是暴力破解密码,其扫描全球IP的时间大概在5小时左右,服务器映射到外网后不超过1天就会被扫描到。应当采用不容易被猜到用途的端口号比如53110等,而不是直接采用22、或是60022、61022这种容易猜到作用的端口

  1. 一定要设置高强度密码,一方面用户密码被暴力破解后容易造成资料丢失、另一方面SSH组件存在安全漏洞的话,攻击者可能通过用户账户获取整个SFTP服务器的控制权

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CentOS 7.9搭建FTP服务器的步骤如下: 1. 首先,确保已经安装了vsftpd软件包。可以通过以下命令来安装:`sudo yum install vsftpd`。 2. 安装完成后,启动vsftpd服务。使用以下命令启动服务:`sudo systemctl start vsftpd`。 3. 接下来,设置vsftpd服务开机自启动。使用以下命令来设置:`sudo systemctl enable vsftpd`。 4. 默认情况下,匿名用户是不允许访问FTP服务器的。如果需要允许匿名用户访问,可以编辑vsftpd的配置文件`/etc/vsftpd/vsftpd.conf`,并找到配置项`anonymous_enable`,将其设置为`YES`。 5. 配置本地用户的访问权限。在vsftpd的配置文件中,可以通过添加以下配置来设置本地用户的访问权限: ``` userlist_enable=YES userlist_file=/etc/vsftpd/user_list userlist_deny=NO ``` 然后,创建`/etc/vsftpd/user_list`文件,并在文件中添加允许访问FTP服务器的本地用户的用户名。 6. 设置FTP服务器的根目录。默认情况下,FTP用户的根目录位于`/var/ftp`目录下。如果需要修改根目录,可以编辑vsftpd的配置文件,并找到配置项`local_root`,将其设置为所需的目录。 7. 最后,重启vsftpd服务以应用配置的更改。使用以下命令来重启服务:`sudo systemctl restart vsftpd`。 完成上述步骤后,CentOS 7.9上的FTP服务器搭建完成。您可以使用FTP客户端来连接并访问该服务器,具体的连接配置取决于您使用的FTP客户端。 ### 回答2: CentOS 7.9 系统可以使用 vsftpd(Very Secure FTP Daemon)来搭建 FTP 服务器。下面是基本的步骤: 1. 使用管理员身份登录到 CentOS 7.9 服务器。 2. 打开终端,并使用以下命令安装 vsftpd: ``` sudo yum install vsftpd ``` 3. 安装完成后,使用以下命令启动 vsftpd 服务,并设置开机自启动: ``` sudo systemctl start vsftpd sudo systemctl enable vsftpd ``` 4. 接下来,需要配置 vsftpd。使用以下命令编辑配置文件: ``` sudo vi /etc/vsftpd/vsftpd.conf ``` 在文件中,你可以根据需要进行以下设置: - 禁用匿名用户:将 `anonymous_enable=YES` 修改为 `anonymous_enable=NO`。 - 启用本地用户登录:取消注释(删除行首的 `#`)`local_enable=YES`。 - 允许本地用户上传文件:取消注释(删除行首的 `#`)`write_enable=YES`。 你还可以根据需要进行其他设置,然后保存并关闭文件。 5. 在防火墙中打开 FTP 服务器的端口。默认情况下,FTP 使用的端口是 20 和 21。你可以使用以下命令做出相应修改: ``` sudo firewall-cmd --zone=public --add-service=ftp --permanent sudo firewall-cmd --reload ``` 6. 接下来,你需要允许本地用户登录 FTP 服务器并设置其访问目录权限。使用以下命令添加用户: ``` sudo useradd ftpuser ``` 使用以下命令设置用户的密码: ``` sudo passwd ftpuser ``` 使用以下命令将用户的主目录设置为 FTP 目录: ``` sudo usermod -d /var/ftp ftpuser ``` 7. 最后,重新启动 vsftpd 服务以应用配置: ``` sudo systemctl restart vsftpd ``` 现在,你的 CentOS 7.9 服务器已经成功搭建了 FTP 服务器。通过使用 FTP 客户端工具,你可以使用添加的用户名和密码进行连接,并访问指定的 FTP 目录。 ### 回答3: 搭建FTP服务器可以实现网络文件传输和共享,CentOS 7.9是一种常用的Linux操作系统,以下是关于如何在CentOS 7.9上搭建FTP服务器的步骤: 1. 首先,使用root权限登录到CentOS 7.9服务器。 2. 安装vsftpd软件包,vsftpd是一种常用的FTP服务器软件。在终端中使用以下命令进行安装:yum install vsftpd -y 3. 安装完毕后,启动vsftpd服务并将其设置为开机自启动:systemctl start vsftpd && systemctl enable vsftpd 4. 默认情况下,vsftpd的配置文件位于/etc/vsftpd/vsftpd.conf。使用文本编辑器(如vi或nano)打开此文件:vi /etc/vsftpd/vsftpd.conf 5. 根据需要进行配置更改。一些常见的配置选项包括:启用匿名访问(anonymous_enable=YES)、禁止匿名用户上传(write_enable=NO)、添加本地用户访问(local_enable=YES)等。根据需要调整这些选项。 6. 保存并关闭配置文件后,重新启动vsftpd服务以使更改生效:systemctl restart vsftpd 7. 防火墙可能会阻止FTP访问。如果需要,可以使用firewalld或iptables等工具配置防火墙规则,允许FTP流量通过。 8. 检查FTP服务器的工作情况。您可以通过在Web浏览器中输入“ftp://your_server_ip”访问FTP服务器。使用服务器的IP地址来替换“your_server_ip”。 9. 如果需要,您可以进一步调整FTP服务器的相关配置,如限制用户的访问路径、设置访问权限和配额等。 通过以上步骤,您应该能够在CentOS 7.9上成功搭建FTP服务器。根据需要,您可以对FTP服务器进行进一步的配置和定制化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值