我想知道如何设置 root、sudo、仅 sftp 用户帐户,这些帐户在登录时不需要公钥身份验证。我还想知道如何设置仅 sftp 用户的主目录,使他们无法访问上层其他目录。
答案1
帮助你在 Ubuntu 主机上设置 ssh 服务的最佳资源是OpenSSH 服务器.这将允许您使用SSH 文件传输协议(也称为安全文件传输协议或 SFTP)从客户端机器通过 SSH 访问、传输和管理文件。
解决方案概述
OpenSSH server
在 Ubuntu 上,您可以在主机上设置,然后用户可以使用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 地址。
- 通常,你可以将 Web 浏览器指向
192.168.1.1
以登录路由器并设置端口转发。请参阅配置 OpenSSH 服务器和路由器以接受互联网上的 SSH 连接?
通过命令行或终端连接到主机并登录
要在主机上打开 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 访问,从而实现文件传输
- 在客户端上打开 Nautilus
- 选择文件 > 连接到服务器
- 类型:
SSH
- 服务器:输入主机的 IP 地址
- Port:Host
sshd_config
文件中指定的端口号 - 用户名:username
- 密码:password
在 14.04 中:
- 在客户端上打开 Nautilus
- 连接到服务器
- 类型:`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
就是这样 。
答案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
为您的用户名。然后保存并关闭文件。
就是这样。