Linux搭建SFTP服务,CentOS搭建SFTP服务

参考链接:https://blog.csdn.net/w20101310/article/details/114145776
本教程主要是关于如何在CentOS上设置和使用SFTP服务器。使用FTP传输数据,很容易被匿名入侵者入侵(如果不使用TLS),因为它的端口对任何人都是开放的。可以使用SFTP作为更安全的替代方案。

SFTP使用SSH文件传输协议来提供安全的连接。

教程将展示如何为客户端提供对SFTP服务器的访问权限,但无法通过SSH登录到服务器本身。

1.查看是否有SSH环境

只要服务器存在SSH环境皆可以使用SFTP服务,不需要安装其他程序,运行以下代码进行检测

rpm -qa | grep ssh

出现以下结果说明已经安装了ssh软件包,可以使用SFTP

[root@localhost ~]# rpm -qa|grep ssh
libssh2-1.4.3-10.el7_2.1.x86_64
openssh-7.4p1-13.el7_4.x86_64
openssh-server-7.4p1-13.el7_4.x86_64
openssh-clients-7.4p1-13.el7_4.x86_64

2.配置SFTP

我们需要创建一个组和用户,方便管理所有的SFTP账户。先创建一个目录,作为SFTP服务的主目录。 SFTP用户目录对应该目录下的子目录。

mkdir -p /data/sftp 
chmod 701 /data

添加用户组

groupadd sftpusers

创建用户username,并添加到sftpusers用户组

useradd -g sftpusers -d /upload -s /sbin/nologin username

为该用户添加密码

passwd username

现在我们有了一个用户名为username的用户,该用户在sftpusers用户组中。
-d /upload 命令制定了该用户的SFTP根目录位于服务器/data/sftp/upload
限制了用户通过shell进行SSH登录,只能通过SFTP进行访问
为用户设置了密码
创建用户使用目录并配置权限

mkdir -p /data/sftp/upload
chown -R root:sftpusers /data/sftp
chown -R chown -R username:sftpusers /data/sftp/upload

验证目录/data下的文件夹是否存在,以及配置是否正确。

ls -ld /data/
drwx-----x. 5 root root 54 Mar 22 14:29 /data/
ls -ld /data/sftp
drwxr-xr-x. 3 root sftpusers 20 Mar 22 14:29 /data/sftp
ls -ld /data/sftp/upload
drwxr-xr-x. 2 username sftpusers 6 Mar 22 14:29 /data/sftp/upload

cat /etc/passwd | grep username
username:x:1001:1001::/upload:/sbin/nologin

3.创建用户使用的upload目录

mkdir -p /data/sftp/upload

编辑/ etc/ssh/sshd_config配置文件,配置SSH协议创建SFTP进程。

vi /etc/ssh/sshd_config

文件末尾添加下面的配置

Match Group sftpusers
ChrootDirectory /data/sftp
ForceCommand internal-sftp

或者对单用户指定配置

Match User username
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /data/sftp/upload

# 开启下列配置  不允许匿名登录

X11Forwarding no
AllowTcpForwarding no
PermitTTY no
ForceCommand cvs server

查看sshd状态

service sshd status
Redirecting to /bin/systemctl status sshd.service
● sshd.service - OpenSSH server daemon
#......
Feb 26 19:32:16 JD sshd[30788]: Server listening on 0.0.0.0 port 22.
Feb 26 19:32:16 JD sshd[30788]: Server listening on :: port 22.

4.重启服务

service sshd restart

我们先来创建一个文件

touch /data/sftp/test.tst

启动SFTP

sftp username@127.0.1

在SFTP环境中运行命令试试

ls
pwd
lpwd
exit

现在已经可以愉快的玩耍了,远程访问试一下吧

注意:如果出现Broken pipe的错误 一般都是ChrootDirectory指定的目录权限配置错误
ChrootDirectory指定Group匹配:所指向的文件夹 /data/sftp拥有者必须是root,所属用户组必须是username所属的sftpusers用户组。
ChrootDirectory指定用户匹配:所指向的文件夹 /data/sftp/upload拥有者必须是username,所属用户组必须是username所属的sftpusers用户组。
ChrootDirectory所指向的文件夹到系统根路径上的所有途径文件夹,owner必须是root,且不允许群组和用户的写入权限(即权限为7xx,其中x小于7)
如果出现Failed to start OpenSSH Server daemon错误 一般是配置文件错误或者目录权限错误 可以通过ssht -t来进行检查

sshd -t
1
通过SSH key访问SFTP可以参考这篇文章:

https://tufora.com/tutorials/linux/general/setup-an-sftp-server-on-centos

### 配置 CentOS 系统中的 SFTP 服务器 #### 修改用户主目录权限 为了确保安全性和隔离性,需调整目标用户的主目录及其父级目录的权限。例如,对于名为 `sftpwcw` 的用户,其主目录 `/data/sftpfile` 应当归属于根用户并具有适当的访问控制权: ```bash chown root /data/sftpfile # 将文件夹所有权更改为 root 用户 chmod 755 /data/sftpfile # 调整文件夹权限以允许读取和执行操作 ``` #### 关闭 Selinux 安全策略 如果启用了 Selinux,则可能阻止某些功能正常运行。可以通过编辑配置文件来禁用它: ```bash vim /etc/selinux/config # 更改以下行的内容为 disabled SELINUX=disabled ``` 完成更改后需要重新启动系统使改动生效。 #### 编辑 SSHD 配置支持内部 SFTP 子系统 打开SSH守护进程的主要配置文档,并添加特定部分用于定义受限环境下的SFTP行为: ```bash Subsystem sftp internal-sftp Match Group sftp ChrootDirectory /data/sftp/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no ``` 上述代码片段指定了一个新的子系统以及匹配条件下的约束措施[^2]。 #### 创建专用组与用户 建立专门用来管理这些受限制会话的新群组,并向其中加入相应的成员账号: ```bash groupadd sftp usermod -G sftp sftpwcw passwd sftpwcw # 如果必要的话可以重设密码 ``` #### 添加新用户到指定位置 假设我们希望创建一个叫做`sftptest`的新用户并将他锁定在其家目录内: ```bash mkdir -p /data/sftp/sftptest/upload chown root:root /data/sftp/sftptest/ chmod 755 /data/sftp/sftptest/ # 让上传目录可写入 chown sftptest:sftp /data/sftp/sftptest/upload chmod 700 /data/sftp/sftptest/upload ``` #### 测试连接 利用各种客户端工具尝试接入已部署完毕的服务端口,验证整个流程是否顺畅无误: ```bash sftp sftpwcw@<your_server_ip> ``` #### 使用图形界面软件进行测试 除了命令行方式外还可以借助第三方应用程序比如 WinSCP 或 FileZilla 来实现远程传输需求[^4]。 --- ### 注意事项 - **安全性考量**:始终遵循最小特权原则,在不影响业务逻辑的前提下尽可能减少暴露风险。 - **日志记录审查**:定期查看审计日志以便及时发现异常活动迹象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无敌的黑星星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值