Возникла странная проблема с коробкой Solaris 10. У меня есть cgi-скрипт (Perl), который должен перезаписать файл. У нас нет suexec, запущенного на Apache, поэтому целевой каталог имеет полный (777) доступ, чтобы Apache мог писать в него.
Проблема в том, что сценарий CGI может записать новый файл в каталог, но не перезаписать существующий файл.
**Directory permissions for file destination:**
drwxrwxrwx 146 myuser white 32768 Jun 2 20:46 dest-dir
**File Permissions of file that needs to be over written:**
-rw-r--r-- 1 myuser white 0 Jun 2 20:50 cgitestfile
Кто-нибудь знает простое решение для решения этой проблемы ??
Похоже, что apache может перезаписать файл, только если он ему принадлежит.
В Solaris 10 по умолчанию apache запускается как User nobody
, Group nobody
(чек /etc/apache/httpd.conf
User
и Group
директивы). Учитывая ваш пример, apache не сможет писать в cgitestfile
поскольку у него нет доступа на запись к нему.
Сменить владельца: группа dest-dir
и файлы, в которые Apache должен перезаписать nobody
-rw-r - r-- 1 myuser white 0 2 июня 20:50 cgitestfile
У вас есть права на запись в файл только для владельца (myuser). Apache работает от имени пользователя myuser? или как apache или www.data или что-то в этом роде? Возможно, вам нужно добавить доступ на запись для других?
Я столкнулся с этим из-за конфигурации "SELinux". Если SELinux запущен, вам необходимо явно разрешить Apache возможность записи в файлы. Чтобы использовать это, вам также необходимо установить дополнительные разрешения для тех каталогов и файлов, для которых вы предоставляете доступ на запись.
Чтобы определить, включен ли SELinux, выполните:
sestatus
Чтобы включить логические значения SE, которые позволяют cgi записывать в файлы:
sudo setsebool -P allow_httpd_anon_write 1
sudo setsebool -P allow_httpd_sys_script_anon_write 1
Затем, наконец, чтобы установить файл / каталог «Тип контекста безопасности SELinux» в «системный» файл / каталог для чтения / записи (вы также можете сделать его «общедоступным» типом - Google «chcon» для информации), выполните следующее:
sudo chcon -R -t httpd_sys_rw_content_t /some/write/path
(Измените / some / write / путь к вашему пути.)