在我的工作中,我有时会在基于 Web 的平台 (LAOP-jQuery) 上编写小型可视化信息应用程序。我的一些同事也开始这样做,以便更好地获取信息。然而,他们并不像我一样熟悉命令行 Linux(而我实际上只是个新手),所以每次有人想创建一个新应用程序时,他们都会联系我,我会创建一个虚拟子域(服务器上的一个新文件夹),并使用请求的名称,然后让他们接管。我所做的只是复制一个文件夹,其中包含一个标准的 html-php 模板以及我们使用的一些函数和数据库连接。
我目前正在尝试通过创建一个小应用程序来限制我的工作量,该应用程序可以为我完成这项工作。这真的很简单而且很愚蠢。他们转到我提供的链接,输入密码和他们选择的域名,然后单击“创建”。在后台,会调用一个 php-system() 函数,将名为“dummy”的目录复制到 /var/www/oursite/apps/。
示例:Jane 进入“创建新域名”页面。她输入正确的密码,并为她的域名选择一个名称“foobar”。
调用一个系统函数:
系统('cp -r ../../dummy ../../apps/'.filter_input(INPUT_POST,'domain_name'));
// 转换为:system('cp -r ../../dummy ../../apps/foobar');
因此,我现在有一个目录 /apps/foobar
问题来了,“foobar”的权限如下:
drwxr-xr-x 6 www-data www-data 4096 3月 1 11:48 foobar
也就是说,由用户和组 www-data:www-data 拥有
当我使用开发人员用户“dev”连接到该文件夹(通过 NetBeans)时隶属于 www-data 集团我可以下载文件,但无法编辑它们,因为组 www-data 对新创建的“foobar”目录没有写权限。
我怎样才能让它按我想要的方式工作?
提前感谢 Benedikt
答案1
我得到了一位朋友的帮助。他基本上告诉了我有关 php 中的 unmask 函数的信息,尽管它可能不是最安全的方法,也不是“最佳实践”,但我还是这样做了:
$old = umask(0); // clear permissions for new files/dirs system('cp -r ../../dummy ../../apps/'.filter_input(INPUT_POST,'domain_name')); // copy the dummy chmod('../../apps/'.filter_input(INPUT_POST,'domain_name'),0775); // grant the group www-data permissions to edit the file/dir umask($old); // restore original mask
如果有人有更好的方法,我仍然想听听。
感谢大家
本笃十六世
答案2
您可以采取的巧妙技巧是执行以下命令:sudo adduser yourusername www-data
。
功能:此命令将您添加到 www-data 组,从而为您打开访问权限,让您可以对文件进行操作。