我想让 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 用户/组的知识。如果用户无法从其权限中受益,那么将用户添加到组有什么意义呢?