Lon*_*est 4 linux ubuntu service-accounts accounts
使用 Ubuntu 服务器,我需要创建一些具有以下限制的用户帐户:
(1) 用户只能查看和操作其主目录中的文件。
(2) 用户只能执行与 rsync 和 sftp 相关的命令。
我希望用户能够使用 rsync 备份文件,并且我希望他们能够使用 FileZilla 等 sftp 客户端检索文件。
除此之外,我不希望用户能够查看系统上的其他文件,或执行任何可能干扰系统的命令。
我更像是一个 Ubuntu 桌面用户,几乎没有管理 Linux 服务器的经验。我发现的大多数教程都假设我知道我不知道的事情。所以我很难设置它。
用户所做的一切都需要访问文件系统的大部分。要向自己证明这一点,请运行以下命令:
strace -e trace=file /bin/ls/$HOME
Run Code Online (Sandbox Code Playgroud)
您将看到,列出您自己的主目录的内容需要打开并阅读至少 40 个分散在您系统中的其他文件。其他命令,如 sftp 等,需要更广泛的访问权限。
Unix 系统是围绕用户对大多数操作系统具有只读访问权限的概念设计的。通过谨慎的权限和组,您可以轻松禁止他们查看彼此目录的内容。使用pam_apparmor,您将能够限制它们可以运行的应用程序。
编辑: 我刚刚重新阅读了您的要求。听起来您不需要它们来登录完全交互式的 shell。如果是这种情况,您可以通过两种方式继续:
aptitude install scponly. 然后将用户的 shell 设置为 'scponly'。不要让它的名字充满你;它也适用于 sftp。如果您想进一步锁定它们,请查看/usr/local/share/doc/scponly有关设置每用户“chroot”的文档。如果您需要允许访问更多命令,而不仅仅是 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”组(当然,您必须添加该组),他们将被限制为您的脚本允许的命令。
| 归档时间: |
|
| 查看次数: |
3363 次 |
| 最近记录: |