我在远程 Linux Ubuntu 服务器上运行一个程序。该程序访问我目录中的现有文件,执行一些计算,将新文件写入目录,然后必须访问它创建的文件以执行一些新计算。我遇到的问题是,程序创建的第一批文件仅具有所有者读取权限 - 程序无法执行它们,然后超时并出现错误。有没有办法确保写入我的目录的每个文件都自动具有公共读取、写入和执行权限(rwxrwxrwx)?我无法以任何方式修改程序脚本,并且一旦启动就无法停止程序,所以我唯一的选择是通过 Linux 执行此操作。
我确实看过以前的问题,但没有看到任何可以解决这个特定问题的内容。
在此先感谢您的任何建议 :)
答案1
有几种方法可以使用 shell 实现您所描述的功能,但这一切都取决于您追求的目标以及您对相关文件夹和 shell 访问权限的访问级别。
据我所知,您想改变服务器对这些新生成的文件的行为。但这取决于运行脚本或应用程序的用户,以及他们与 shell 或 ftp 用户的关系……事实上,我们对您的问题的真正了解还不够全面。
例如,你可以将文件夹的所有权授予应用程序用户,但如果 shell 用户或 ftp 用户不同,则可能会出现问题。
为此,您可以使用:
chown -R user:group /[path-to]/myfolder
其中,[path-to]
is 应更改为文件夹的路径,myfolder 应更改为计算机上的实际文件夹,user 和 group 应分别更改为运行应用程序或脚本的用户的用户和组。如果您的文件夹例如是“app”,并且位于远程计算机上的 /var/www/ 路径上,并且该应用程序由 www-data 用户运行,那么它应该是
chown -R www-data:www-data /var/www/app
但正如我所说,我们对具体情况知之甚少。因此,问题可能是由服务器管理员的严格策略引起的,其中 umask 类似于:
umask 333
甚至更糟umask 377
最终的权限类似于 r--r--r-- 或 r-------- 但为了处理这些问题,您可以在应用程序中放置一个临时的 umask,或者在应用程序用户的环境中设置它...但我真的认为这真的不太可能。(告诉我您是否需要这样的东西来扩展此选项)
另一种方法不是将所有权完全授予应用程序用户,而是使用应用程序用户所属的组并启用 s 标志,以允许目录中的每个文件都自动创建,并对组授予特殊权限。
首先更改文件夹的组所有权,例如:
chown -R sameuser:newgroup /[path-to]/myfolder
然后更改文件夹的 sgid 位
chmod g+s /[path-to]/myfolder
有关 sgid 的更多信息http://www.linuxnix.com/sgid-set-sgid-linuxunix/
SGID(执行时设置组 ID)是赋予文件/文件夹的一种特殊文件权限。通常在 Linux/Unix 中,当程序运行时,它会从登录用户那里继承访问权限。SGID 被定义为向用户授予临时权限,以使用文件组的权限运行程序/文件,成为该组的成员以执行文件。简而言之,用户在执行文件夹/文件/程序/命令时将获得文件组的权限。
但无论如何,如果我没有理解你的意思,请考虑一下,有时对所讨论的问题了解更多一点会有所帮助。考虑用一些其他相关信息稍微扩展一下你的问题(比如什么样的应用程序,你说用 Linux 解决问题是什么意思,比如哪个用户运行你的应用程序,或者你是否有 shell 访问权限?)
无论如何希望它能有帮助。