CentOS 6
我希望端口 22 用于普通 SSH 访问,端口 8822 用于受限 SFTP。
这是我的 sshd_config 配置
Port 22
Port 8822
PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no
AllowUsers user1 test_sftp
Match User user1 LocalPort 22
PasswordAuthentication yes
PubkeyAuthentication yes
Match User test_sftp LocalPort 8822
PasswordAuthentication yes
PubkeyAuthentication no
上述配置不起作用。两个用户都对两个端口都有 SSH 访问权限。
这也不起作用。我得到Starting sshd: /etc/ssh/sshd_config line 143: Directive 'AllowUsers' is not allowed within a Match block
Match LocalPort 22
AllowUsers user1
Match LocalPort 8822
AllowUsers test_sftp
我已经设法阻止测试_sftp用户无法通过 shell 访问,也无法通过 登录物理服务器chsh -s /bin/false
。但是,他们仍然可以通过 SFTP 连接到未被限制的端口 22。
CentOS 7+
这是我在 CentOS 6 上尝试实现的功能。以下内容适用于 CentOS 7 及更高版本。
Port 22
Port 8822
PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no
Subsystem sftp internal-sftp
# Normal SSH and SFTP users
Match User nagios
PasswordAuthentication no
PubkeyAuthentication yes
Match User user1
PasswordAuthentication yes
PubkeyAuthentication no
Match Address 192.168.1.0/22 LocalPort 22
AllowUsers user1
Match Address 203.12.63.32/27 LocalPort 22
AllowUsers nagios user1
# Jailed SFTP users
Match User test_sftp
PasswordAuthentication no
PubkeyAuthentication yes
Match Address 101.168.167.33 LocalPort 8822
AllowUsers test_sftp
Match LocalPort 8822
ChrootDirectory /home/sftp/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
答案1
我不建议为用户指定端口。端口映射到服务。通常,用户会映射到主目录和附加到 ACL 的组,以确保用户对所需文件夹具有权限。为了提高安全性,您可以在 SSH 上对用户使用公钥身份验证,因此用户必须生成公钥和私钥才能连接。
并且您不能在两个端口上运行像 SSH 这样的服务。
如果用户始终从相同的 IP 和位置访问,您可以在 iptables 或另一个防火墙中设置一个列表,以允许用户连接的 IP,但这也不是理想的解决方案(可能被威胁行为者伪造)。
答案2
幸运的是,由于 test_sftp 用户位于不同的 IP 上,因此我可以在防火墙上设置单独的 NAT 规则。我已将两个规则设置如下:
- 源IP:203.12.63.32/27,外部端口:22,内部IP:192.168.1.20,端口:22
- 源IP:101.168.167.33/32,外部端口:8822,内部IP:192.168.1.20,端口:8822
在这种情况下,这种方法是可行的,但如果由于某种原因,IP 碰巧相同,那么这种方法就行不通。
这是用于添加无法 SSH 或登录物理服务器的新 SFTP 用户的脚本。
PASSWD=''
USERNAME='test_sftp'
useradd $USERNAME
echo $PASSWD | passwd test_sftp --stdin
chsh -s /bin/false $USERNAME
mkdir /home/$USERNAME/.ssh
chmod 700 /home/$USERNAME/.ssh
touch /home/$USERNAME/.ssh/authorized_keys
chmod 600 /home/$USERNAME/.ssh/authorized_keys
chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh
mkdir -p /home/sftp/$USERNAME/uploads
mkdir -p /home/sftp/$USERNAME/downloads
chown root:root /home/sftp
chown root:root /home/sftp/$USERNAME
chown $USERNAME:$USERNAME /home/sftp/$USERNAME/uploads
chown $USERNAME:$USERNAME /home/sftp/$USERNAME/downloads
修改/etc/ssh/sshd_config文件,内容如下:
vim /etc/ssh/sshd_config
Port 22
Port 8822
PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no
Subsystem sftp internal-sftp
AllowUsers nagios user1 test_sftp
# Normal SSH and SFTP users
Match User nagios
PasswordAuthentication no
PubkeyAuthentication yes
Match User user1
PasswordAuthentication yes
PubkeyAuthentication no
# Jailed SFTP users
Match User test_sftp
PasswordAuthentication no
PubkeyAuthentication yes
Match LocalPort 8822
ChrootDirectory /home/sftp/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp