чаун в сценариях

Обновление: оказывается, проблема сложнее, чем я думал изначально. Я одновременно пытался устранить неполадки, почему мой mkdir перестал работать, и это было потому, что я вручную изменил разрешения родительского каталога для проверки, затем переключил их обратно и добавил chmod в сценарий, который не работает, поскольку этот запускается apache и не я. Я опубликую новый вопрос с более крупной проблемой, так как я думаю, что добавление всего этого в этот вызовет путаницу.


Я преподаватель лаборатории в своем университете, и я переписываю сценарий, который они предоставляют для загрузки заданий, потому что тот, который у них есть, устарел и содержит ошибки. Вместо изменения существующего скрипта (написанного на питоне) я пишу его с нуля на php.

Я столкнулся с проблемой, когда кажется, что chown не работает. Скрипты php запускаются под пользователем apache. Я не уверен, является ли этот пользователь «привилегированным» или нет, но в исходном сценарии использовался chown.

Могу ли я предположить, что поэтому apache должен иметь необходимые полномочия и что моя проблема заключается в другом или это ошибочная логика?


Сервер принадлежит университету, и они никак не позволят мне внести какие-либо изменения в конфигурацию. Я верю, что они используют CentOS. Нет сообщения об ошибке, я только что заметил, что могу chmod файл и изменить разрешения, но команда chown в следующей строке, похоже, не имеет никакого эффекта.

ls -al на старых скриптах показывают:

-rwxr-xr-x 1 mattw labstaff 5067 Sep  1 17:52 File_Upload.cgi

Не похоже, что бит setuid включен.

Стефан упомянул: «У пользователя apache, скорее всего, недостаточно прав для выбора файла/папки, которой он не владеет». Каталог, который я пытаюсь chown, был только что создан с mkdir, поэтому он должен принадлежать apache. Должен ли chown работать независимо от привилегий, если у вас уже есть файл?


person Matt    schedule 05.01.2012    source источник


Ответы (3)


Вероятно, у Apache нет для этого прав. Это зависит от того, в какой среде он работает. Вы сказали, что apache работает под пользователем apache, поэтому я просто предполагаю, что это RHEL или вариант RHEL, такой как Centos.

Вы сможете отредактировать файл sudoers (с помощью visudo) и дать apache возможность запускать sudo без пароля в определенном каталоге. Имейте в виду, что это не рекомендуется, если вы очень заботитесь о безопасности.

Добавление чего-то вроде

apache ВСЕ = NOPASSWD: /bin/chown 1[1-9][0-9][0-9]\:1[1-9][0-9][0-9] /var/www/[a -zA-Z0-9]*

Возможно, вы сможете добавить apache в другую группу или другого пользователя в группу apache или что-то в этом роде и вместо этого изменить его на 0775 или 0664.

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

person roberttstephens    schedule 05.01.2012

Если старый скрипт запускается пользователем apache, но может выполнить chown, у него может быть setuid включен, чтобы позволить ему работать с повышенными привилегиями. В этом случае ваше предположение будет неверным.

Опубликуйте вывод ls -al /path/to/script, чтобы подтвердить это. Он должен показывать root в качестве владельца и s в режиме.

Чтобы включить режим setuid для нового скрипта, chmod u+s его. Обратите внимание, что это может иметь серьезные последствия для безопасности. В частности, никогда не оставляйте сценарий setuid или двоичный файл доступными для записи.

person Eduardo Ivanec    schedule 05.01.2012

У пользователя apache, скорее всего, недостаточно прав для доступа к файлу/папке, которой он не владеет, вы можете предоставить apache больше прав, однако это может стать проблемой безопасности.

person Stefan    schedule 05.01.2012