从 Web 浏览器或 www-data 用户运行脚本的不同权限

从 Web 浏览器或 www-data 用户运行脚本的不同权限

我想让 perl 写入我的服务器的文件系统,但遇到了问题。它在检查权限时失败(使用-w)。我将问题简化为最简单的表达:

#!/usr/bin/perl
print "Content-type:text/html\n\n";

$dir = "/var/www/stock/my/dir";
print $>,"\n"; # UID
if(-w $dir){ print "can write\n" }
else { print "cannot\n" }

这是与用户一起运行的结果www-data

www-data@hersent:~/stock$ perl test.pl 
Content-type:text/html

33
can write

当访问时通过网络浏览器截屏

我认为唯一的区别是,当通过 Web 浏览器运行时,它涉及 nginx 和 fastcgi-wrapper。但它们也作为 www-data 运行

root@hersent:/var/www/stock# ps aux | grep -E "cgi|nginx"
www-data   474  0.0  0.1  30092  5028 ?        Ss   Feb14   0:00 /usr/bin/perl /usr/bin/fastcgi-wrapper.pl
www-data  5131  0.0  0.0  29596  2496 ?        Ss   Feb24   0:00 /usr/sbin/fcgiwrap -f
root      6324  0.0  0.0  32708   956 ?        Ss   Feb24   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www-data  6325  0.0  0.1  33320  6316 ?        S    Feb24   0:56 nginx: worker process

所以我现在很迷茫。我该怎么办?谢谢

答案1

好的,正如@Tim说服我做的那样,我将目录的权限设置为775(rwxrwxr-x),并将所有者设置为user:www-data。它之前设置为user:user并且www-data属于组user

# sudo -u www-data groups
www-data user

我可能仍然缺少一些有关 Linux 用户/组的知识。如果用户无法从其权限中受益,那么将用户添加到组有什么意义呢?

相关内容