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

Yuy*_*shi 85 server sftp openssh

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

jtd*_*jtd 96

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

解决方案概述

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

“在安装 SSH 服务器之前确保你有一个强密码(你可能想完全禁用密码)”

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

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

在主机上安装 OpenSSH 服务器:

sudo apt-get install openssh-server
Run Code Online (Sandbox Code Playgroud)

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

nm-connection-editor
Run Code Online (Sandbox Code Playgroud)

要配置您的 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
Run Code Online (Sandbox Code Playgroud)

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

sudo -H gedit /etc/ssh/sshd_config
Run Code Online (Sandbox Code Playgroud)

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

sudo service ssh restart
Run Code Online (Sandbox Code Playgroud)

考虑以下安全措施

  • 不要在您的路由器上启用端口转发:当外部要求您的路由器将外部连接到端口 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
Run Code Online (Sandbox Code Playgroud)

保存您的新sshd_config文件,然后重新启动 Host 的ssh服务:

sudo service ssh restart
Run Code Online (Sandbox Code Playgroud)

如果您需要通过互联网从任何地方访问,请在本地路由器上设置端口转发以将流量定向到您的 OpenSSH 服务器

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

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

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

    sftp <username>@123.123.1.23
    
    Run Code Online (Sandbox Code Playgroud)
    • 如果您更改了主机的 OpenSSH 服务器侦听的端口号,请执行以下操作:

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

    ssh <username>@123.123.1.23
    
    Run Code Online (Sandbox Code Playgroud)
    • 如果您更改了主机的 OpenSSH 服务器侦听的端口号,请执行以下操作:

      ssh -p <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      
      Run Code Online (Sandbox Code Playgroud)

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

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

在此处输入图片说明

在 14.04 中:

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

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

Host 上适当的文件权限可保证您在 Host 上创建的每个标准用户(没有 sudo 权限)将拥有他们的/home/new_user目录,但对目录结构的其余部分具有有限的权限。

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

希望这有帮助!

  • 在我看来,这个答案虽然看起来非常全面,但实际上并没有回答 OP 问题中最困难的部分:“他们无法访问上层其他目录的地方。” 如果按上述方式实现,用户将能够读取绝大多数目录结构。 (10认同)
  • 为了扩展@ajostergaard 的评论,这将创建一个普通的 unix 用户并允许他们进行 SSH 和 SFTP 访问。普通的 unix 用户(不是 root)仍然可以访问和查看大量敏感文件,例如 Web 服务器配置等等。这*绝对不安全*并且绝对不满足 OP 要求的限制。 (2认同)

小智 52

第 1 步:如果未安装 OpenSSH 包,请安装

sudo apt-get install openssh-server
Run Code Online (Sandbox Code Playgroud)

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

sudo addgroup ftpaccess
Run Code Online (Sandbox Code Playgroud)

第 3 步:编辑/etc/ssh/sshd_config文件并进行如下更改。在下面找到并评论。

#Subsystem sftp /usr/lib/openssh/sftp-server
Run Code Online (Sandbox Code Playgroud)

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

Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)

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

sudo service ssh restart
Run Code Online (Sandbox Code Playgroud)

第 5 步:使用 ftpaccess 组添加用户并创建密码。

sudo adduser paul --ingroup ftpaccess --shell /usr/sbin/nologin
Run Code Online (Sandbox Code Playgroud)

第六步:修改主目录权限。

sudo chown root:root /home/paul
Run Code Online (Sandbox Code Playgroud)

第七步:在home里面创建一个目录用于上传和修改权限组。

sudo mkdir /home/paul/www
sudo chown paul:ftpaccess /home/paul/www
Run Code Online (Sandbox Code Playgroud)

就是这样 。

参考:在 ubuntu 上设置 SFTP

  • 我测试了它,它太宽松了,因为主文件夹的默认权限是 755。我在主文件夹上执行了“sudo chmod 711”,它只允许我 ftp 到 www 文件夹。到目前为止看起来不错,但也许其他人可以插话...... (2认同)