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


81

我想知道如何设置root,sudo,仅sftp的用户帐户,登录时将不需要公共密钥身份验证。我还想知道如何在他们建立sftp-only用户的主目录时无法访问更高级别的其他目录。

Answers:


91

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

解决方案概述

  • 在Ubuntu上,您可以OpenSSH server在主机上设置,然后用户可以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每个客户端的内容附加为Host的新行~/.ssh/authorized_keys。然后添加PasswordAuthentication no到主持人的/etc/ssh/sshd_config
  • 攻击者尝试破解的速度缓慢:在主机上使用ufw(简单防火墙)将传入连接的速率限制为10 /分钟: sudo apt-get install ufw && sudo ufw limit OpenSSH
  • 有关更多建议,请参阅确保SSH访问安全

如果您认为必须,请PasswordAuthenticationsshd_config文件中启用

找到包含该短语的行PasswordAuthentication并将其显示为:

PasswordAuthentication yes

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

sudo service ssh restart

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

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

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

  • 要像<username>在主机上一样打开SFTP Shell终端,请在客户端上打开终端并输入以下命令,用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
      
  • 要像<username>在主机上一样打开SSH shell终端,请在客户端上打开终端并输入以下命令,用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. 端口:主机sshd_config文件中指定的端口号
  6. 用户名:用户名
  7. 密码:密码

在此处输入图片说明

在14.04中:

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

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

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

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

希望对您有所帮助!


9
在我看来,这个答案虽然看起来非常全面,但实际上却无法回答OP问题中最困难的部分:“他们无法访问更高级别的其他目录。” 如果如上实现,则用户将能够读取绝大多数目录结构。
ostergaard,2015年

2
为了扩展@ajostergaard的评论,这将创建一个常规的Unix用户并允许他们进行SSH和SFTP访问。普通的Unix用户(不是root用户)仍然可以访问和查看大量敏感文件,例如Web服务器配置等等。这绝对不安全的,并且绝对不能满足OP要求的限制。
西蒙·伍德赛德

50

步骤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步:在home内创建一个目录以进行上传,并修改组的权限。

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

而已 。

请参阅:在ubuntu上设置SFTP


这似乎是正确的答案。我没有测试它,但至少它提到了主要困难,限​​制了浏览路径。
Mohammed Noureldin

我对其进行了测试,由于主文件夹的默认权限为755,所以它太宽松了。我sudo chmod 711在主文件夹上进行了操作,它仅允许我通过ftp到www文件夹。到目前为止似乎还不错,但也许其他人也可以
听到

0

除了您可能要查看的“ jtd”提到的工具之外,Denyhosts是另一种工具。它可以自动阻止与您的SSH服务器的重复连接尝试。可以将其安装在Ubuntu存储库中。


Paket denyhosts仅适用于清醒(10.04LTS)和精确(12.04LTS)。packages.ubuntu.com/search?suite=all&keywords=denyhosts
AB

尽管可以通过其他方法安装Denyhosts,但在Ubuntu存储库中不再可用。因此,使用Denyhosts是不明智的。
Faizan Akram Dar 2015年

0

限制对用户的访问

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

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

$ 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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.