![从 Web 浏览器或 www-data 用户运行脚本的不同权限](https://linux22.com/image/718632/%E4%BB%8E%20Web%20%E6%B5%8F%E8%A7%88%E5%99%A8%E6%88%96%20www-data%20%E7%94%A8%E6%88%B7%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%E7%9A%84%E4%B8%8D%E5%90%8C%E6%9D%83%E9%99%90.png)
我想让 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 用户/组的知识。如果用户无法从其权限中受益,那么将用户添加到组有什么意义呢?