我是Linux新手。
我正在使用Redhat 5.5服务器,并使用基于Java的SFTP脚本,该脚本允许多个用户将文本file upload到服务器。 我不确定,如果每个用户将有一个单独的目录,或者如果我将使用命名约定,其中包括他们的客户ID。
这些文件包含有关其局域网设置的一些个人信息,所以我更喜欢使用SFTP作为FTP。 这是我的理解,SFTPencryption(另外,我有一个Java类configuration为通过SFTP上传,所以我宁愿不切换协议,除非他们是一个非常好的理由)。
原型是为了支持大量客户的系统,而通过命令行不断添加和删除客户端的想法似乎是非常不切实际的。 (再次,我是new_to /学习Linux和Redhat)。
为多个用户授予SFTP上传文件的正常惯例是什么,每个用户都有唯一的用户名和密码。
你可以通过设置你的外部sshd为chrooted sftpd来做到这一点(在sshd_config中使用sftpd-internal选项)。 每个用户都可以拥有自己的chroot-jail。 在您的用户的authorized_key文件(不允许使用密码)上,您应该为每个公钥添加前缀,这些前缀将禁止shell访问。 你的chroot应该只包含sftp-access的基本设置(没有二进制文件,没有库,只是/ dev / null,/ dev / zero,/ dev / random和/ dev / urandom – 据我所知)。
你所描述的是可能的,但它可能不是最好的想法,尤其是如果你说,你是Linux的新手。
正如你所说,pipe理文件权限和用户将是一个噩梦,而SFTP需要SSH本身可以暴露各种function,如在远程服务器上执行代码和下载文件。
有可能configuration一个SFTP服务器有一定的安全性,但configuration它有许多缺陷。 互联网上有很多关于使用SSHdconfigurationSFTP用户的误导性build议。 长话短说,简单地将其loginshell更改为无效的shell是不够的,还需要担心它们绕过shell而远程执行命令的能力,以及它们能够读取其主目录之外的潜在感知系统文件的能力,以及他们使用SSH隧道绕过防火墙的能力。 以及任何其他function,我可能不记得我的头顶。
而且有可能绕过整个“需要为每个客户创build一个用户”的东西,要么通过使用PAM来实现一些黑暗的巫术来让SSH对其他用户数据库进行身份validation,要么通过共享一个用户帐户(应该是只要你只关心让用户上传文件就足够了)。
另外,你将以某种方式解决SFTP在你的应用程序中遇到的一个基本的安全问题,许多远程用户需要能够validation远程服务器是否是它似乎是。 没有用于SSH的证书颁发机构 – SSH用来防止中间人攻击的方法是caching客户机连接到的服务器的SSH服务器密钥的指纹,并且如果密钥与先前看到的密钥匹配, 一切都很好。 但是, 如果密钥未知 ,因为这是客户端第一次连接,SSH要求用户手动检查指纹。 期望你的客户真正做到这一点是不合理的,几乎每个人都会点击“是”,因为他们想要继续他们的生活。 您可能能够将您的应用程序分配有效的主机指纹,但这似乎有点噩梦。
如果您决定继续使用SFTP,尽pipe存在潜在的问题,我build议您调查rssh以限制用户使用SFTP。 另外,你应该把所有的SFTP用户保存在一个chroot监狱里,他们不能干涉服务器的操作或者访问任何系统文件。 (即使这样,攻击者也许可以枚举系统的用户…)而且还需要确保sshd被configuration为阻止来自SFTP用户的SSH隧道。
…
而不是处理这种混乱,我会build议考虑另一个协议来上传你的文件,这似乎更适合你的用例 – 为什么不考虑使用HTTPS上传文件? 您需要某种服务器端CGI脚本或Java servlet或某种东西来接收这些文件,并对它们进行一些有用的操作并执行身份validation。 服务器端脚本可以将文件存储在一个有用的位置。 至于客户端问题,通过HTTPS上传文件是一件很常见的事情,如果没有一些准备好的API类,你可以轻易地使用这种types,我会感到惊讶的file upload。
当然,这意味着你不得不写一些服务器端的CGI脚本来处理你的问题,但是我怀疑你是想以某种方式以编程方式处理传入的文件,这实际上使得它更容易,因为代码每次有新文件都会被要求