如何获取 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。它可能很危险。
我有一个网页,用户可以在其中上传文件。上传完成后,网页调用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。它可能很危险。