是否可以授予用户 sftp 访问权限而无需 shell 访问权限?如果有,是如何实施的?

是否可以授予用户 sftp 访问权限而无需 shell 访问权限?如果有,是如何实施的?

我有一群用户只需将文件上传到他们设置的主目录。我认为 sftp 就足够了,但我不希望他们通过 shell 登录。那么有可能吗?我的平台是centos 7,用户的主目录存储在/personal/$user

我使用这些设置创建了用户

useradd -m -d /personal/user1 -s /sbin/nologin

为用户分配了密码,然后当我使用 sftp 登录到机器时,它说无法连接。

答案1

基于组的默认安全 SSH 设置

我喜欢以下用于管理 SSH 访问的设置,我曾用它来管理小型服务器群上的一组用户。安全性和易于管理是我的首要任务。

其主要功能是通过 Unix 组成员身份轻松管理 SSH 权限,具有严格定义的权限,并且默认情况下是安全的。

配置

安装软件(可选但有用):

yum install members   # or apt install members

添加群组:

addgroup --system allowssh
addgroup --system sftponly

添加一个新文件/etc/ssh/sshd_config.d/strict.conf(您可以替换strict为更好的名称),其中包含以下内容:

PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no

Match Group allowssh
    PubkeyAuthentication yes

Match Group sftponly
    ChrootDirectory %h
    DisableForwarding yes
    ForceCommand internal-sftp

这假设您的 OpenSSH 设置包括sshd_config.d/*.conf覆盖主配置。检查您的 SSH 文档,或验证 main 是否sshd_config有适当的Include指令。如果您的设置不支持此功能,您可以sshd_config直接编辑。

另外,修改配置后不要忘记重新启动 SSH 服务。

基本原理

那么,这一切有什么作用呢?

  • 作为一项额外的安全措施,它始终禁用 root 登录。
  • 它始终禁用基于密码的登录(弱密码对于运行 sshd 的服务器来说是一个很大的风险)。
  • 它只允许allowssh组中的用户(pubkey)登录。
  • 组中的用户sftponly无法通过 SSH 获取 shell,只能通过 SFTP 获取 shell。

然后,只需通过管理组成员身份来管理有权访问的人员(组成员身份更改立即生效,无需重新启动 SSH;但请注意,现有会话不受影响)。members allowssh将显示所有允许通过 SSH 登录的用户,并将members sftponly显示所有仅限于 SFTP 的用户。

# adduser marcelm allowssh
# members allowssh
marcelm
# deluser marcelm allowssh
# members allowssh
#

请注意,您的 sftp 用户需要同时是两者的成员sftponly(以确保他们不会获得 shell)和allowssh(以首先允许登录)。

更多信息

  1. 请注意此配置不允许密码登录;所有帐户需要使用公钥认证。这可能是您可以通过 SSH 获得的最大的安全优势,因此我认为即使您必须现在就开始,这也是值得的。

    如果您确实不想要这个,那么也可以添加PasswordAuthentication yes到该Match Group allowssh节中。这将允许allowssh用户使用公钥和密码进行身份验证。或者,您可以添加另一个组(和Match Group节)来有选择地授予用户基于密码的登录权限。

  2. 此配置将任何sftponly用户限制为其主目录。如果您不希望这样,请删除该ChrootDirectory %h指令。

    如果你想要 chroot 工作,重要的是用户的主目录(及其之上的任何目录)root:root由组/其他拥有且不可写。主目录的子目录可以由用户拥有和/或可写。

    是的,用户的主目录必须由 root 拥有并且对用户来说不可写。可悲的是,有充分的理由对于这个限制。根据您的情况,ChrootDirectory /home可能是一个不错的选择。

  3. 对于此解决方案,将用户的 shell 设置sftponly/sbin/nologin既不必要也不有害,因为 SSH 会ForceCommand internal-sftp覆盖用户的 shell。

    使用/sbin/nologin可能有助于阻止他们通过其他方式(物理控制台、Samba 等)登录,因此仍然建议使用。

  4. 此设置不允许root通过 SSH 直接登录;这形成了额外的安全层。如果你真的需要直接 root 登录,请将PermitRootLogin指令更改为forced-commands-only,以仅允许通过 进行基于键的强制命令/root/.ssh/authorized_keys。作为最后的手段,您可以使用prohibit-password允许完全基于密钥的登录。避免yes

  5. 为了获得奖励积分,请考虑限制谁可以suroot;添加一个名为 的系统组wheel,并auth required pam_wheel.so在 中添加/启用/etc/pam.d/su

答案2

编辑您的/etc/ssh/sshd_config内容以包含:

Match User [SFTP user]
ForceCommand internal-sftp

重新开始sshd。如果您有多个用户,请将它们全部放在匹配用户行上,并用逗号分隔,如下所示:

Match User User1,User2,User3

sftp配置不允许 shell 访问的关键是通过ForceCommand 选项限制用户。

答案3

只需将其默认 shell 更改为 /sbin/nologin 即可。假设大多数 Linux 版本:

# usermod -s /sbin/nologin username

答案4

mysecureshell它允许限制用户使用 SFTP,甚至限制可访问的路径。

还有rrsync用于限制用户rsync仅。

相关内容