【发布时间】:2014-04-28 02:43:36
【问题描述】:
我正在使用 Apache Commons File Upload 编写一个简短的 jsp 程序,允许学生将文件上传到我们的服务器。服务器是运行 Ubuntu Precise Pangolin 的 Linode。请原谅我缺乏服务器管理知识。
到目前为止,只有当目标文件夹的权限设置为 777(所有人都可以使用 rwx)时,我才能成功上传文件。这对我来说感觉不安全,所以我希望我可以将文件夹放在 755,然后在 jsp 脚本运行时暂时将其更改为可写(在代码中),并在保存上传的文件后立即将其更改回来(也在代码)。
我知道 Java 中的 File 类有一个 setWritable 方法,我尝试使用它。但是,除非用户有权更改操作系统上的文件权限,否则该方法将不起作用。因此,当权限被操作系统拒绝时引发异常。这让我问:
当一个 servlet 运行时,用户是谁?操作系统正在检查谁的权利?
我是包含文件上传脚本的 jsp 文件的所有者,所以我会认为我是脚本运行时的用户。我有权更改文件权限。然而 servlet 没有。因此我很困惑。
感谢您的帮助。
【问题讨论】:
-
对此要格外小心。确保该文件夹不在“网络根目录”下 - 您不希望您的学生能够上传一些讨厌的脚本然后让您的服务器运行它。
-
@DavidWallace--嗨,David--你能帮我理解 servlet 有什么权利吗?那些是如何确定的?谢谢。
-
@DavidWallace——我同意要小心。这就是为什么我没有将文件权限设置为777。只有五个学生,每次上传我都会在数据库中记录。这个想法是让他们学习如何进行网络编程,所以我需要他们能够上传到服务器。
-
一般来说,无论谁安装了 Web 服务器软件或应用服务器软件,都会创建一个用户来运行匿名 Web 请求。您可以有一个匿名网络用户可以写入的特殊目录,或者您可以为每个学生创建实际登录名并强制他们登录,在这种情况下,他们每个人运行的任何内容都将以该用户身份运行。但是您应该与您的托管服务提供商讨论这个问题——他们几乎可以肯定地限制您做什么。
标签: java jsp servlets file-permissions