使用ubuntu服务器,我需要创建一些具有以下限制的用户帐户:
(2)用户只能执行与rsync和sftp相关的命令.
我希望用户能够使用rsync备份文件,我希望他们能够使用像FileZilla这样的sftp客户端检索文件.
除此之外,我不希望用户能够查看系统上的其他文件,或执行任何可能会破坏系统的命令.
我更像是一个Ubuntu桌面用户,并且管理linux服务器的经验很少.我发现的大多数教程都假设我知道我不知道的事情.所以我很难设置它.
用户所做的一切都需要访问文件系统的大部分内容.要自己证明这一点,请运行以下命令:
strace -e trace=file /bin/ls/$HOME
您将看到列出您自己主目录的内容需要打开并阅读至少40个散布在您系统周围的其他文件.其他命令,如sftp等,需要更广泛的访问.
Unix系统是围绕用户具有对大多数操作系统的只读访问权限的概念而设计的.通过谨慎的权限和组,您可以轻松地禁止他们查看彼此目录的内容.使用pam_apparmor,您可以限制它们可以运行的应用程序.
编辑:
我只是重新阅读你的要求.听起来你不需要它们能够登录到完全交互式的shell.如果是这种情况,有两种方法可以继续:
> aptitude安装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
然后编写/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