如何在Linux中设置Chrooted SFTP

时间:2020-03-21 11:47:03  来源:igfitidea点击:

本教程介绍了如何设置Chrooted SFTP以允许用户通过SFTP连接,但不允许它们通过SSH连接。
换句话说,我们将使用户强制到特定目录,并将其shell设置为/bin/nologin或者其他一些shell,否认访问ssh登录。

现在,让我们继续在Linux中设置Chrooted SFTP。
下面给出的此步骤应该适用于支持OpenSSH的任何Linux发行版。

在Linux中设置Chrooted SFTP

从版本4.9开始,OpenSSH具有称为内部SFTP子系统的功能,该子系统仅允许SFTP访问,但不是SSH访问权限。
因此,用户可以只能从服务器访问数据,但他们无法使用ssh访问它。

创建Chrooted目录

首先,使用命令创建特定的chrooted目录:

$sudo mkdir /sftp

使用命令完全由root用户拥有此目录:

$sudo chown root:root /sftp/

在此目录下,为每个用户创建单独的目录,如/sftp/user1,/sftp/user2,和/sftp/user3等。

出于本教程的目的,我将在/SFTP目录下创建一个名为theitroad的目录。

$sudo mkdir /sftp/theitroad

这是用户可以保存数据的目录。
此外,用户无法超越此目录。
它就像他们$HOME目录一样。

创建SFTP组并将用户分配给该组

现在,我们需要创建用户才能访问SFTP Chrooted目录。

创建一个名为sftponly的组,如以下命令所示:

$sudo groupadd sftponly

然后,创建新的SFTP用户或者将现有用户分配给"SFTPONLY"组,如下所示。

让我创建一个新的用户,例如secthil,并将他分配给名为"sftponly"的组。
然后,将他的主目录设置为/sftp/onitread和默认shell as/sbin/nologin。

我们可以使用以下在线命令执行此操作:

$sudo useradd -g sftponly -d /theitroad -s /sbin/nologin senthil

使用命令设置新创建的用户的密码:

$sudo passwd senthil

要修改现有用户,请使用"usermod"而不是如下所示的"Usermod"命令:

$sudo usermod -g sftponly -d /theitroad -s /sbin/nologin senthil

为chrooted目录分配适当的权限

我们需要为SFTP用户分配适当的权限,以便如下所示访问其主目录。

$sudo chown senthil:sftponly /sftp/theitroad
$sudo chmod 700 /sftp/theitroad/

其他SFTP用户无法访问此目录。

同样,也为所有其他SFTP用户分配适当的权限。

推荐下载 - 免费电子书:"在5天内学习Linux"

配置Chrooted SFTP.

编辑/etc/ssh/sshd_config文件:

$sudo vi /etc/ssh/sshd_config

查找并注释出以下行(即将前面添加到注释出来)。

#Subsystem       sftp    /usr/libexec/openssh/sftp-server

在Ubuntu 18.04 LTS中,查找和注释以下行:

#Subsystem sftp /usr/lib/openssh/sftp-server

接下来,在文件末尾添加以下行:

Subsystem       sftp    internal-sftp
Match group sftponly
     ChrootDirectory /sftp/
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

保存并退出文件。
重新启动SSH服务以更新更改。

$sudo systemctl restart sshd

现在,尝试使用SFTP用户从网络上的任何其他系统中SSH(即我们的情况下)。

$ssh Hyman@theitroad

我们将获得以下错误消息。

Hyman@theitroad's password: 
This service allows sftp connections only.
Connection to 192.168.43.2 closed.

其中192.168.43.2是我刚刚配置了SFTP的远程系统的IP地址。

我们只能使用SFTP访问远程系统,如下所示。

$sftp Hyman@theitroad
Hyman@theitroad's password: 
Connected to 192.168.43.2.
sftp>

看到了吗?
用户"SEDHIL"可以通过SFTP连接,但不是SSH。

要了解当前的工作目录,请使用'pwd'命令:

sftp> pwd
Remote working directory: /theitroad
sftp>

SFTP的基本命令开始使用sftp

我们可以使用-p标志使用备用端口连接。

$sftp -P <port_number> Hyman@theitroad_host

要将远程文件传输到本地系统,请执行以下操作:

sftp> get /path/remote_file

我们可以使用命令将本地文件传输到远程系统:

sftp> put /path/local_file

要递归将远程文件夹传输到本地系统:

sftp> get -R /path/remote_folder

要在本地计算机上显示文件列表:

sftp> lls

要显示远程计算机上的文件列表:

sftp> ls

有关SFTP使用情况的更多详细信息,请参阅Man Pages。

$man sftp