ubuntu22.04下sftp服务器搭建

目录

  • 1 SFTP安装
    • 1.1 sftp说明
    • 1.2 目标
    • 1.3 安装
      • 1、sftp用户、用户组的创建
        • 添加sftp用户,创建 sftp 用户组
        • 创建sftp服务器的管理员身份,并且加入 ssh用户组(不限制他的shell操作权限)
      • 2、创建文件服务器目录
        • 创建服务器文件目录
      • 3、权限配置
      • 4、重启ssh
      • 5、测试
  • 2 常用命令
    • 2.1 sftp 登录sftp服务器
    • 2.2 pwd和lpwd 、 ls和lls 、cd和lcd 等
    • 2.3 !command 命令
    • 2.4 putget 命令,同步文件命令
    • 2.5 exit/quit/!退出登录

1 SFTP安装

1.1 sftp说明

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。

1.2 目标

在Ubuntu系统上开通sftp文件服务,允许某些用户上传及下载文件。
但是这些用户只能使用sftp传输文件,不能使用SSH终端访问服务器,并且sftp不能访问系统文件。
系统管理员则既能使用sftp传输文件,也能使用SSH远程管理服务器。

1.3 安装

Ubuntu默认只安装openssh-client,需要手动安装openssh-server或者sftp-server。

sudo ssh -V
# 查看openssh的版本,要求版本高于4.8p1,低于此版本需升级
sudo apt update
sudo apt install openssh-server

1、sftp用户、用户组的创建

添加sftp用户,创建 sftp 用户组
sudo adduser shuoshuo
# 密码均为:N3URQ%JWcd7K0K*2HAWDtWb
sudo addgroup sftp-users
# 将shuoyao从所有其他用户组中移除并加入到sftp-users组,并且关闭其Shell访问
#/bin/false也可以替换为/sbin/nologin,目的是不允许该用户登录到系统中
sudo usermod -G sftp-users -s /bin/false shuoshuo

在这里插入图片描述

创建sftp服务器的管理员身份,并且加入 ssh用户组(不限制他的shell操作权限)
sudo adduser admin
# admin密码:ApaCloud@0608
sudo addgroup ssh-users
# -a 表示以追加形式将 admin 加入 ssh-users
sudo usermod -a -G ssh-users admin
# 如果不添加的话,等权限配置完成后,则无法远程登录
# 如果不需要登录,则可以不执行以下语句
sudo usermod -a -G ssh-users ubuntu

2、创建文件服务器目录

创建服务器文件目录
# 创建目录
sudo mkdir /home/sftp_root
# 普通用户能够写入的共享文件目录
sudo mkdir /home/sftp_root/shared
# 设置共享文件夹的拥有者为管理员、用户组为 sftp-users
sudo chown admin:sftp-users /home/sftp_root/shared
# 拥有者、sftp用户组的成员具有一切权限
sudo chmod 770 /home/sftp_root/shared

3、权限配置

sudo vim /etc/ssh/sshd_config
# 修改sftp上传文件端口
Port 5022

# 在sshd_config文件的最后
AllowGroups ssh-users sftp-users
Match Group sftp-users
ChrootDirectory /home/sftp_root
AllowTcpForwarding no
X11Forwarding no
ForceCommand internal-sftp

参数说明:

  • AllowGroups ssh-users sftp-users:这个指令允许 ssh-users 和 sftp-users 两个用户组登录 SSH 服务器。
  • Match Group sftp-users:这个指令开始匹配 sftp-users 用户组,并在该组下面的指令中应用相应的设置。
  • ChrootDirectory /home/sftp_root:这个指令指定了 sftp-users 组用户的主根目录。当这些用户登录时,他们会被切换到这个目录,并且无法访问其他目录。
  • AllowTcpForwarding no:这个指令禁止在 SSH 会话中使用 TCP 端口转发
  • X11Forwarding no:这个指令禁止在 SSH 会话中使用 X11 图形会话转发。
  • ForceCommand internal-sftp:这个指令强制 sftp-users 组用户在 SSH 会话中使用 internal-sftp 命令,而不是默认的 bash 或其他 shell。这有助于限制这些用户的操作,使他们只能使用 SFTP 客户端进行文件传输。

注意:

  • ChrootDirectory的权限问题,设定的目录必须是root用户所有,否则就会出现问题。所以需要确保sftp用户根目录的所有人是root, 权限是 750 或者 755。
  • 默认允许所有用户或者用户组登录,若仅允许指定用户或者用户组访问,按照以下格式配置。
# 以空格间隔
AllowUsers user1 user2 
AllowGroups group1 group2 

# 做好以上配置后,所有需要远程连接的用户都必须加入 ssh-users 才行。
# 如将用户 songyangji 加入 ,执行以下语句就可以使用ssh连接本机。

sudo usermod -a -G ssh-users admin
  • 限制ssh连接的访问IP(可选)
sudo vim /etc/ssh/sshd_config

# Authentication:
AllowUsers [email protected].*        #限制root用户只能通过10.10.10.*网段登录访问
AllowUsers [email protected].*        #限制charles用户只能通过10.10.10.*网段登录访问
AllowUsers [email protected].*

4、重启ssh

sudo systemctl restart sshd

5、测试

sftp -P 5022 [email protected]

2 常用命令

2.1 sftp 登录sftp服务器

sftp -P 5022 [email protected]

# 进入sftp后,使用help可以查看全部命令

2.2 pwd和lpwd 、 ls和lls 、cd和lcd 等

sftp登录之后默认操作是远程服务器,当需要操作本地时,就需要在前边加“l”,“l”代表local的意思。这样就可以同时在远程和本地实现对应的操作。

pwd:sftp服务器的目录
lpwd:本地服务器的目录
ls和lls同理

在这里插入图片描述
在这里插入图片描述

2.3 !command 命令

使用!command执行本地命令,例如lrm 不能删除本地文件,会提示错误:
在这里插入图片描述

2.4 putget 命令,同步文件命令

put:从本地推送文件到远程;
get:从远程拉取文件到本地;
在这里插入图片描述

2.5 exit/quit/!退出登录

在这里插入图片描述