chown: Operation not permitted

2019-04-11 11:44发布

I have problem where i need to set the file owner permission to different user in the system via a php script

so i do this via this following command where 1002 is the user id of the system.

file_put_contents($filename, $content);
system("chown 1002 " . $filename . "");

however i get this error in productions server only (test server it works fine)

chown: changing ownership of `/var/spool/asterisk/06h12m7.call':
Operation not permitted

标签: php linux shell
2条回答
别忘想泡老子
2楼-- · 2019-04-11 12:13

Since you tagged this question as Linux I'm assuming that you use Apache server. In production servers the Apache process, which owns all php processes, are usually executed by the apache user or other user that is not the root user.

Bearing that in mind, what you are trying to do is using the chown function, (which will be executed as apache user) to change the owner of a file that you don't own. (Yes, you can only change owners to the files you own).

You see, quoting the php manual, the chown function attempts to change the owner:

Attempts to change the owner of the file filename to user user. Only the superuser may change the owner of a file.

In production servers usually you are running as in user directory mode, which means you are bound to the files that are in your home directory, something like /home/yourusername/public_html and as such, files inside the /var directory are simply out of your reach (They are usually owned by root) and that's why you can't chown.

I hope it helped. Cheers!

查看更多
The star\"
3楼-- · 2019-04-11 12:17

You are only allowed to change the owner of a file if you are the root user (or running with root privileges).

Attempts to change the owner of the file filename to user user. Only the superuser may change the owner of a file. http://www.php.net/manual/en/function.chown.php

Most likely on your test server the apache process running the php script already owns the file, or you are running it with root privileges, and this isn't the case on your production server. I would definitely not recommend running in a production environment with root privileges.

Some work arounds that may help depending on the situation, you can change the "group" setting of the file using the chgrp function. This is permitted by anyone with write privileges on the file. You can also make the file writeable to anyone using the chmod function, although this can be dangerous. Links to both functions are listed below:

查看更多
登录 后发表回答