Sftp服务器搭建(linux)
一、基本工作原理
FTP的基本工作原理如下:
1)建立连接:客户端与服务器之间通过TCP/IP建立连接。默认情况下,FTP使用端口号21作为控制连接的端口。
2)身份验证:客户端向服务器发送用户名和密码进行身份验证。如果是匿名访问,客户端可以使用公共用户名"anonymous",通常无需提供密码。
3)控制连接:一旦身份验证成功,控制连接建立起来。通过控制连接,客户端发送各种指令给服务器,如上传文件、下载文件、创建目录等。
4)数据连接:FTP使用不同的数据连接模式来传输文件。两种常见的模式是主动模式和被动模式。
在主动模式下,服务器主动地在 数据端口(默认端口号20) 上监听并等待客户端的连接请求。客户端向服务器发送请求后,服务器建立数据连接并传输文件。
在被动模式下,服务器在一个随机的端口上监听,并将该端口信息发送给客户端。客户端随后连接到该端口,建立数据连接并进行文件传输。
5)文件传输:一旦数据连接建立,文件传输可以开始。客户端发送相应的指令,如上传文件(STOR)、下载文件(RETR)、删除文件(DELE)等,服务器根据指令执行相应的操作。
6)控制连接关闭:文件传输完成后,控制连接可以关闭,释放资源。如果客户端需要进行其他操作,可以重新建立控制连接。
FTP通过建立控制连接和数据连接的方式实现文件传输。控制连接用于发送指令和进行身份验证,数据连接则用于实际的文件传输。这种分离的结构使得FTP能够灵活地进行文件管理和数据传输操作。
二、搭建步骤
1、安装SSH服务器:确保系统上安装了SSH服务器软件
2、创建SFTP用户组和用户:
(1)创建一个新的用户组,用于管理SFTP用户:
groupadd GSFTP
(2)创建一个新的SFTP用户,并将其添加到My_sftp组中:
useradd -m -G GSFTP -s /bin/false ftpusers
passwd ftpusers # 为用户设置密码:Haiyi@1234
注释:
-m选项表示创建用户的主目录(main),如果不存在则会自动创建。
-G GSFTP选项表示将新用户添加到GSFTP组中。
-s /bin/false选项表示指定用户的登录shell为/bin/false,这意味着该用户无法登录到系统。
最后,ftpusers是新创建的用户名。
3、设置SFTP的文件目录,可以执行以下操作:
mkdir /Net_ftp_share
chown root:GSFTP /Net_ftp_share
chmod 755 /Net_ftp_share
mkdir /Net_ftp_share/File_save
chown ftpusers:GSFTP /Net_ftp_share/File_save
chmod 755 /Net_ftp_share/File_save
1)首先建立Net_share目录,他的拥有者必须是root,并且其他用户不能拥有写入的权限(ChrootDirectory 这个选项要求的),即权限不能超过755(否则连不上);
2)很明显,这样,我们使用SFTP用户登录就只能进行下载操作,无法上传文件;
3)所以在Net_share目录下建一个用于上传和下载的目录,他的拥有者可以是SFTP用户,可以无限制操作该目录下的文件;
4、修改linux服务器的SFTP配置:
编辑/etc/ssh/sshd_config文件,注释其中的Subsystem sftp /usr/libexec/openssh/sftp-server,然后新增配置如下:
# 我的SFTP配置
Subsystem sftp internal-sftp # SFTP子系统使用内置的SFTP服务器
Match Group GSFTP # 以下配置仅适用于属于该组的用户
ChrootDirectory /Net_ftp_share # 目录限制
ForceCommand internal-sftp # 强制用户使用内置的SFTP服务器进行会话,而不允许执行其他命令
AllowTcpForwarding no # 禁止TCP转发
X11Forwarding no # 禁止X11转发
5、检查配置是否正确:sshd -t
6、重启SSH服务器:配置完成后,重新启动SSH服务器以使更改生效
sudo service ssh restart # 或 systemctl restart sshd
7、连接到SFTP服务器:现在,您可以使用SFTP客户端(如FileZilla、WinSCP或命令行的sftp工具)连接到搭建好的SFTP服务器
sftp username@server_ip