确保用户只能通过 SSH 连接到指定的端口

确保用户只能通过 SSH 连接到指定的端口

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

相关内容