我有一个问题,我想将一个非常旧的系统 (UNIX) 连接到一台新机器。这台旧机器scp
使用硬编码oldsystemaccess
用户登录,并将文件复制到新服务器 webroot 的子目录中/var/www/newserver/test/import
。新机器运行的是 Ubuntu 18 LAMP 堆栈,没有对 apache 进行高级配置,就像www-data
在同一组中一样运行。
在新服务器上,我将此用户添加oldsystemaccess
到www-data
组中 usingsudo 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
但文件所有权的东西。
在某些系统上(如 FreeBSD,如果您相信维基百科),
setuid
目录上的位将具有我想要的行为(链接)。但是因为它不是我运行的 Ubuntu 上的默认行为,所以我找到了解决我遇到的问题的方法如下:使用设置该
setgid
位,chmod
以便新文件归该www-data
组所有。sudo chmod 2775 /var/www/newserver/test/import
显然复制文件的脚本有一个
umask
设置007
,这导致文件被创建为具有rwxrwx---
权限,但我在问这个问题时忽略了这一点。如果您需要在目录内的文件上设置写权限位,您可以设置一个 ACL 以自动使文件对拥有它们的组可写:
sudo setfacl -d -m group:www-data:rwx /var/www/newserver/import