如何获取 Shell 更改文件权限的脚本?

How to Get Shell Script to Change File Permissions?

我有一个网页,用户可以在其中上传文件。上传完成后,网页调用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,然后移动文件。但是,如果我将 chown 命令插入到 shell 脚本中,该命令也会失败。

看起来用户 www-data 是 运行 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-data 无法在您的主目录中写入文件。

假设您的主目录归用户“我”和组“我”所有,您将必须设置您的主目录的权限,以便您的组可以写入它(它应该已经)。然后在该组中添加用户 www-data。

重要提示

如果您将权限 777 放在您的主目录上,那么系统上的每个用户 都可以写入该目录!你应该输入 775 或 770。只有你和你的小组可以写(也可以读,这取决于你的要求)。如果这是您自己的机器则不重要,如果这是有很多用户的机器则很重要。

记住权限是:用户组others。 777 是所有 3 个的 rwx。它可能很危险。