如何在 Ubuntu 上设置受限的 SFTP 服务器?

如何在 Ubuntu 上设置受限的 SFTP 服务器?

我想知道如何设置 root、sudo、仅 sftp 用户帐户,这些帐户在登录时不需要公钥身份验证。我还想知道如何设置仅 sftp 用户的主目录,使他们无法访问上层其他目录。

答案1

帮助你在 Ubuntu 主机上设置 ssh 服务的最佳资源是OpenSSH 服务器.这将允许您使用SSH 文件传输协议(也称为安全文件传输协议或 SFTP)从客户端机器通过 SSH 访问、传输和管理文件。

解决方案概述

  • OpenSSH server在 Ubuntu 上,您可以在主机上设置,然后用户可以使用ssh用户名和密码从客户端连接到主机的服务器。但请注意,建议使用公钥身份验证,

“确保你有一个强密码在安装 SSH 服务器之前(你可能需要彻底禁用密码)”

  • 在主机上创建的管理用户帐户将具有 sudo 权限,在主机上创建的标准用户帐户则没有。

在主机上安装并配置 OpenSSH 服务器

要在主机上安装 OpenSSH 服务器:

sudo apt-get install openssh-server

为您的主机提供一个静态 IP 地址,以便您可以可靠地连接到它:

nm-connection-editor

配置 OpenSSH 服务器, “首先,通过将 sshd_config 文件复制到您的主目录来备份它,或者通过执行以下操作在 /etc/ssh 中创建只读副本:”

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
sudo chmod a-w /etc/ssh/sshd_config.factory-defaults

“备份sshd_config文件后,您可以使用任何文本编辑器进行更改,例如:”

sudo -H gedit /etc/ssh/sshd_config

您必须在主机上重新启动 ssh 服务才能使这些更改生效

sudo service ssh restart

考虑以下安全措施

  • 不要在路由器上启用端口转发:当外部设备要求您的路由器将外部设备连接到端口 22 等时,除非您启用了端口转发,否则您的路由器将无法执行
  • 禁用 root 登录:注释掉PermitRootLogin without-password; 添加PermitRootLogin no到主机的/etc/ssh/sshd_config
  • 选择非标准 SSH 端口:注释掉Port 22; 添加Port <new-port-number>到主机的/etc/ssh/sshd_config
  • 仅允许本地连接:添加ListenAddress 192.168.0.10
  • 允许特定用户使用特定端口:添加AllowUsers <username>@<IP_address_1> <username>@<IP_address_2>AllowUsers <username>@111.222.333.*到主机的/etc/ssh/sshd_config
  • 仅允许 RSA 密钥(无密码)连接:将每个客户端的内容~/.ssh/id_rsa.pub作为主机的新行~/.ssh/authorized_keys附加PasswordAuthentication no到主机的/etc/ssh/sshd_config
  • 减缓攻击者的破解尝试:在主机上使用 ufw(简单防火墙)将传入连接速率限制为 10/分钟:sudo apt-get install ufw && sudo ufw limit OpenSSH
  • 如需更多想法,请参阅确保 SSH 访问安全

如果你觉得必须,请PasswordAuthentication在你的sshd_config文件中启用

找到包含该短语的行PasswordAuthentication并将其读作:

PasswordAuthentication yes

保存新sshd_config文件然后重新启动主机的ssh服务:

sudo service ssh restart

如果你需要从互联网上的任何地方进行访问,请在本地路由器上设置端口转发,以将流量引导至 OpenSSH 服务器

注意文件中主机的ssh服务监听的端口sshd_config,并设置您的路由器将针对该端口的 TCP/UDP 流量转发到您的 OpenSSH 服务器的 IP 地址。

通过命令行或终端连接到主机并登录

  • 要在主机上打开 SFTP shell 终端<username>,请在客户端上打开终端并输入以下命令,替换123.123.1.23为主机的 IP 地址:

    sftp <username>@123.123.1.23
    
    • 如果您更改了主机的 OpenSSH 服务器监听的端口号,请执行以下操作:

      sftp -P <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      
  • 要像在主机上一样打开 SSH shell 终端<username>,请在客户端上打开终端并输入以下命令,替换123.123.1.23为主机的 IP 地址:

    ssh <username>@123.123.1.23
    
    • 如果您更改了主机的 OpenSSH 服务器监听的端口号,请执行以下操作:

      ssh -p <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      

连接到主机并通过 GUI 文件管理器(例如 Nautilus)登录,以获得更直观的 SFTP 访问,从而实现文件传输

  1. 在客户端上打开 Nautilus
  2. 选择文件 > 连接到服务器
  3. 类型:SSH
  4. 服务器:输入主机的 IP 地址
  5. Port:Hostsshd_config文件中指定的端口号
  6. 用户名:username
  7. 密码:password

在此处输入图片描述

在 14.04 中:

  1. 在客户端上打开 Nautilus
  2. 连接到服务器
  3. 类型:`ssh @123.123.1.23:

在主机上创建标准用户帐户,限制其主文件夹之外的文件权限

主机上适当的文件权限可确保您在主机上创建的每个标准用户(没有 sudo 权限)都拥有自己的/home/new_user目录,但对目录结构的其余部分具有有限的权限。

  • 权限有限并不一定意味着他们无法查看文件名和目录结构。

希望这对你有帮助!

答案2

步骤 1:安装 OpenSSH 包(如果尚未安装)

sudo apt-get install openssh-server

第 2 步:为 SFTP 用户创建单独的组。

sudo addgroup ftpaccess

步骤 3:编辑/etc/ssh/sshd_config文件并进行如下更改。查找并注释以下行。

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

并将这些行添加到文件末尾。

Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

步骤 4:重新启动 sshd 服务。

sudo service ssh restart

步骤 5:添加具有 ftpaccess 组的用户并创建密码。

sudo adduser paul --ingroup ftpaccess --shell /usr/sbin/nologin

步骤6:修改主目录权限。

sudo chown root:root /home/paul

步骤 7:在主目录下创建一个目录,用于上传,并修改组的权限。

sudo mkdir /home/paul/www
sudo chown paul:ftpaccess /home/paul/www

就是这样 。

参考 :在 Ubuntu 上设置 SFTP

答案3

拒绝主机除了“jtd”提到的工具之外,还有另一个你可能想要了解的工具。它可以自动阻止对 SSH 服务器的重复连接尝试。它可以安装在 Ubuntu 存储库中。

答案4

限制用户的访问权限

在这里,我们只允许用户执行文件传输,并且我们将禁用终端访问。

为此,在配置文件的底部添加以下代码。

$ sudo nano /etc/ssh/sshd_config

现在文件将打开并粘贴代码。

/etc/ssh/sshd_config

. . .

Match User filemg

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /var/sftp

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

替换filemg为您的用户名。然后保存并关闭文件。

就是这样。

参考:如何在 Ubuntu 16.04 中使用 SFTP

相关内容