我有一个网页,用户可以在其中上传文件。上传后,网页调用shell脚本将上传的文件移动到另一个位置。我确信";mv";由于权限问题,命令失败了,但我不确定如何克服这个问题。
第一件事。我的网页运行在Ubuntu 16.04服务器和Apache2 2.4.41上。当用户上传文件时,该文件将保存在服务器上的目录/var/www/html/uploads
:中
me@myServer:/var/www/html/uploads$ ls -l
total 44
-rw-r--r-- 1 www-data www-data 761 Feb 21 15:38 UsersUploadedFile.txt
me@myServer:/var/www/html/uploads$
我注意到该文件由用户www-data
所有。
一旦上传了文件,网页就会调用这个shell脚本将文件移动到另一个目录:
#!/bin/bash
echo "Attempting to move the uploaded file..."
{
mv /var/www/html/uploads/UsersUploadedFile.txt /home/me/UsersUploadedFile.txt
} || {
echo "Gah, failed to move the file!"
}
当文件上传时,你可以在我的网页上看到:
Attempting to move the uploaded file...
Gah, failed to move the file!
因此;mv";命令失败。
我的第一直觉是这是一个权限问题。正如我前面提到的,要移动的文件由用户www-data
所有。shell脚本也是:
me@myServer:/var/www/html$ ls -l
total 36
-rwxr-xr-x 1 www-data www-data 593 Feb 21 15:53 moveTheFile.sh
me@myServer:/var/www/html$
但是,我想移动文件的目录由用户me
所有,由于其他脚本原因,我无法更改该目录。
我想我想做的是让shell脚本将UsersUploadedFile.txt
的所有权更改为用户me
,然后移动文件。但是,如果在shell脚本中插入chown
命令,该命令也会失败。
看起来用户www数据正在运行apache2服务,因此也在运行shell脚本。。。?我不确定。
me@myServer:/var/www/html$ ps -ef | grep apache
root 14931 1 0 13:00 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 14934 14931 0 13:00 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 14935 14931 0 13:00 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 14936 14931 0 13:00 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 14937 14931 0 13:00 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 14938 14931 0 13:00 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 14942 14931 0 13:00 ? 00:00:00 /usr/sbin/apache2 -k start
ph9821 15165 14831 0 16:03 pts/2 00:00:00 grep --color=auto apache
me@myServer:/var/www/html$
那么我在这里可能做错了什么?如何获取shell脚本来更改文件权限?我想这才是我在这里真正需要做的。非常感谢。
这是一个权限问题。用户www数据无法在主目录中写入文件。
假设您的主目录由用户"所有;我"并且组";"我";,您必须设置主目录的权限,这样您的组才能写入(应该已经写入了(。然后在该组中添加用户www数据。
重要提示
如果您将权限777放在主目录上,则系统上的每个用户都可以写入该目录!你应该输入775或770。只有你和你的团队才能写作(根据你的要求,也可以阅读(。如果这是你自己的机器,这并不重要,如果这是一台有很多用户的机器,则至关重要。
记住权限是:用户组其他人。777是3人的rwx。这可能很危险。