php - изменение прав доступа к файлу - PullRequest
3 голосов
/ 26 мая 2009

У меня есть PHP-скрипт, который изменяет права доступа к файлам на моем сервере с помощью chmod. Я хотел бы иметь возможность запускать скрипт как через браузер (как никто), так и через задание cron (как имя пользователя).

Правильно ли, что только владелец файла может изменять права доступа? То есть если я создаю файл с помощью задания cron и устанавливаю разрешения, я не могу изменить эти разрешения при запуске сценария из браузера?

Есть ли способы обойти это, пожалуйста? Удалите (отмените связь) и заново создайте файл как пользователь, от имени которого запускается скрипт? Или есть способ запустить скрипт php через задание cron, как никто? / через браузер как логин?

Цель состоит в том, чтобы сделать изображения общедоступными для просмотра или нет, изменив права доступа к файлам.

Ответы [ 5 ]

2 голосов
/ 27 мая 2009

Решение 1. Создайте группу как для пользователя, так и для пользователя cron, добавьте каждого пользователя в новую группу и предоставьте обоим пользователям доступ для чтения и записи в файл (chmod g + rw filename). (безопаснее, чем следующее решение).

Решение 2. Самый простой способ сделать это - сделать файл доступным для чтения и записи для всех (chmod a + rw filename), и это даст такой эффект.

Я бы не рекомендовал это для производственного использования.

1 голос
/ 27 мая 2009

Вы можете сделать это, не вводя имя пользователя или пароль в свой скрипт.

В вашем crontab есть sudo для выполнения скрипта от имени пользователя, под которым работает ваш веб-сервер. Следуя вашему примеру, я буду использовать пользователя nobody.

0 12 * * * (sudo -u nobody php ./yourscript.php)

Обратите внимание, что пользователь "nobody" (а также такие пользователи, как "apache") обычно не имеют прав входа в систему. Это может потребовать от вас разрешения sudo выполнять сценарии без tty. Вы узнаете об этом, если получите сообщение об ошибке: «sudo: извините, у вас должен быть tty для запуска sudo»

Разрешение этого можно сделать, закомментировав строку «По умолчанию requiretty» с помощью команды visudo. Как и в случае любого изменения в sudo, вы можете искать любые побочные эффекты, с которыми может прийти это изменение.

0 голосов
/ 04 июня 2009

Да, только владелец файла может сделать это. Ваши параметры зависят от того, какой контроль вы имеете над сервером.

Если у вас достаточно контроля над сервером, вы можете использовать SuPHP вместо Apache mod_php. Таким образом, сценарии PHP будут выполняться как пользователь, который владеет сценарием, и все файлы, созданные сценарием PHP, будут принадлежать одному и тому же пользователю.

Если у вас нет такого большого контроля (например, общего веб-хостинга), вы можете использовать что-то вроде подхода Joomla по FTP. Когда в Joomla включена поддержка FTP, он выполняет все операции с файлами с использованием FTP. Таким образом, он может создавать или манипулировать файлами с теми же разрешениями, что и пользователь FTP.

Примерно так (обработка ошибок опущена):

$ftp = ftp_connect('localhost');
ftp_login($ftp, 'username', 'password');
ftp_chdir($ftp, '/root/to/website');
ftp_chmod($ftp, 0644, 'filename.ext');
ftp_close($ftp);
0 голосов
/ 26 мая 2009

Только владелец файла может сделать это, я бы рекомендовал вместо этого использовать cronjob как nobody.

0 голосов
/ 26 мая 2009

Обычно только владелец или суперпользователь (или эквивалент)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...