在 Ubuntu 服务器上创建有限的用户帐户

Lon*_*est 4 linux ubuntu service-accounts accounts

使用 Ubuntu 服务器,我需要创建一些具有以下限制的用户帐户:

(1) 用户只能查看和操作其主目录中的文件。

(2) 用户只能执行与 rsync 和 sftp 相关的命令。

我希望用户能够使用 rsync 备份文件,并且我希望他们能够使用 FileZilla 等 sftp 客户端检索文件。

除此之外,我不希望用户能够查看系统上的其他文件,或执行任何可能干扰系统的命令。

我更像是一个 Ubuntu 桌面用户,几乎没有管理 Linux 服务器的经验。我发现的大多数教程都假设我知道我不知道的事情。所以我很难设置它。

Ins*_*yte 6

用户所做的一切都需要访问文件系统的大部分。要向自己证明这一点,请运行以下命令:

strace -e trace=file /bin/ls/$HOME
Run Code Online (Sandbox Code Playgroud)

您将看到,列出您自己的主目录的内容需要打开并阅读至少 40 个分散在您系统中的其他文件。其他命令,如 sftp 等,需要更广泛的访问权限。

Unix 系统是围绕用户对大多数操作系统具有只读访问权限的概念设计的。通过谨慎的权限和组,您可以轻松禁止他们查看彼此目录的内容。使用pam_apparmor,您将能够限制它们可以运行的应用程序。

编辑: 我刚刚重新阅读了您的要求。听起来您不需要它们来登录完全交互式的 shell。如果是这种情况,您可以通过两种方式继续:

  1. aptitude install scponly. 然后将用户的 shell 设置为 'scponly'。不要让它的名字充满你;它也适用于 sftp。如果您想进一步锁定它们,请查看/usr/local/share/doc/scponly有关设置每用户“chroot”的文档。
  2. 如果您需要允许访问更多命令,而不仅仅是 sftp/scp(如 rsync),那么您需要启动自己的命令验证器并设置 ssh“强制命令”。将一个看起来像这样的块添加到您的/etc/ssh/sshd_config

    Match group sftponly
        ForceCommand /usr/local/bin/validate_sftp
    
    Run Code Online (Sandbox Code Playgroud)

    然后写/usr/local/bin/validate_sftp脚本。类似的东西:

    #!/bin/bash
    if [[ $SSH_ORIGINAL_COMMAND = "rsync --server" ]]
    then
        exec $SSH_ORIGINAL_COMMAND
    elif [[ $SSH_ORIGINAL_COMMAND = "/usr/lib/openssh/sftp-server" ]]
    then
        exec $SSH_ORIGINAL_COMMAND
    else
        echo "You are only allowed rsync or sftp access to this server."
    fi
    
    Run Code Online (Sandbox Code Playgroud)

    将用户添加到“sftponly”组(当然,您必须添加该组),他们将被限制为您的脚本允许的命令。