我有一个问题,我想将一个非常旧的系统 (UNIX) 连接到一台新机器。这台旧机器scp
使用硬编码用户登录oldsystemaccess
,并将文件复制到新服务器 webroot 的子目录中/var/www/newserver/test/import
。新机器正在运行 Ubuntu 18 LAMP 堆栈,没有对 apache 进行高级配置,就像www-data
在同一组中一样运行。
在新服务器上,我将此用户添加oldsystemaccess
到www-data
组中sudo usermod -aG www-data oldsystemaccess
,并将目录的权限更改为rwxrwxr-x
with sudo chmod 775 /var/www/newserver/test/import
。进行此更改后,文件已成功复制到新系统。
现在,我正在尝试解决的实际问题是:当文件归oldsystemaccess
我的 PHP 脚本所有时,无法正确读取或处理文件,并且因为我无法更改从旧服务器复制文件的方式,也无法在文件被复制时运行其他命令。我正在寻找一种方法来将目录中创建的文件更改import
为www-data
创建时由用户和组拥有。
现在我添加了一个每分钟crontab
运行的条目chown -R www-data:www-data /var/www/newserver/test/import
,但我觉得这是一个非常糟糕的解决方案。我正在寻找类似umask
但文件所有权的东西。
答案1
在某些系统上(比如 FreeBSD,如果你相信维基百科),setuid
目录上的位将具有我想要的行为(关联)。但由于它不是我正在运行的 Ubuntu 上的默认行为,我发现我遇到的问题的解决方案如下:
使用设置该setgid
位chmod
,以便新文件归该组所有www-data
。
sudo chmod 2775 /var/www/newserver/test/import
显然,复制文件的脚本有一个umask
of007
集,这导致使用权限创建文件rwxrwx---
,但在提出问题时我忽略了这一点。
如果您需要在目录内的文件上设置写权限位,则可以设置 ACL 以自动使文件可由拥有它们的组写入:
sudo setfacl -d -m group:www-data:rwx /var/www/newserver/import