в сценарии - PullRequest
       20

в сценарии

1 голос
/ 05 января 2012

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


Я преподаватель лаборатории в моем университете, и я переписываю сценарий, который они предоставляют для загрузки заданий, потому что тот, который у них есть, старый и глючный. Вместо того, чтобы модифицировать существующий скрипт (написанный на python), я пишу его с нуля в 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 работать независимо от привилегий, если у вас уже есть файл?

Ответы [ 3 ]

2 голосов
/ 05 января 2012

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

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

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

apache ALL = 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.

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

1 голос
/ 05 января 2012

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

1 голос
/ 05 января 2012

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

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

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

...