Установленный в Snow Leopard каталог периодически меняет права доступа - PullRequest
1 голос
/ 14 июня 2010

У меня есть смонтированный каталог smb: / Volumes / myshare

Это было смонтировано через Finder "Connect to Server ..." с smb: // myservername / myshare

Все хорошоfar.

Однако, когда я пытаюсь получить доступ к каталогу через PHP (работающий под Apache), он терпит неудачу с отклоненным разрешением около 10% времени.Под этим я подразумеваю, что повторный доступ к моей странице иногда приводит к сбою.Моя страница PHP выглядит следующим образом:


<?php
  $cmd = "ls -la /Volumes/ 2>&1";
  exec($cmd, $execOut, $exitCode);
  echo "EXIT CODE = $exitCode
"; foreach($execOut as $line) { echo "$line
"; } echo "
";?>

При успешном выполнении она выглядит следующим образом:


EXIT CODE = 0
total 40 
drwxrwxrwt@  4 root   admin    136 Jun 14 12:34 . 
drwxrwxr-t  30 root   admin   1088 Jun  4 13:09 .. 
drwx------   1 galen  staff  16384 Jun 14 09:28 myshare 
lrwxr-xr-x   1 root   admin      1 Jun 11 16:05 galenhd -> / 

При сбое она выглядит следующим образом:


EXIT CODE = 1
ls: myshare: Permission denied 
total 8 
drwxrwxrwt@  4 root  admin   136 Jun 14 12:34 . 
drwxrwxr-t  30 root  admin  1088 Jun  4 13:09 .. 
lrwxr-xr-x   1 root  admin     1 Jun 11 16:05 galenhd -> / 

ПРОЧАЯ ИНФОРМАЦИЯ:

Я работаю с PHP (5.3.1) и сервером Apache, который поставляется из коробки со Snow Leopard.

Также,если я напишу PHP-скрипт, который зацикливает и повторяет «ls -la ..» из командной строки, он, похоже, не дает сбоя.

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

Это сводит меня с ума. Кто-нибудь знает, что может происходить?

Спасибо, Гален

Ответы [ 4 ]

1 голос
/ 15 июня 2010

Мне кажется, что это, вероятно, не связано с SMB-сервером, поскольку я не могу воспроизвести при запуске вручную из командной строки. Другими словами, он кажется неудачным только при запуске через Интернет (т.е. при переходе на страницу apache).

Так что мне кажется, что это как-то ошибка apache или "PHP под apache" ...

Теперь я вижу, что страница застряла в состоянии "отказано в доступе". Другими словами, он продолжает отказывать после первого отказа. Я также обнаружил серию шагов для воспроизведения и выхода из состояния «отказано в разрешении»:

1) Повторное попадание на страницу PHP до тех пор, пока не произойдет сбой (после сбоя он останется «сбойным»)

2) После сбоя выполнение ls /Volumes в командной строке завершится неудачей.

3) Выполнение sudo ls /Volumes действительно работает (то есть root может видеть каталог). Попытка ls как обычного пользователя все еще не удается, хотя ...

4) Однако ( это интересная часть ), выполняющая sudo ls -l /Volumes на самом деле ремонтирует крепление. Другими словами, после этой команды и PHP, и командная строка как обычный пользователь снова начинают работать.

ЗАКЛЮЧЕНИЕ

Похоже, что доступ к точке монтирования через PHP / apache (см. Код выше) нарушает монтирование, изменяя права доступа, что блокирует пользователя. Тогда root может восстановить разрешения, выдав sudo ls -l /Volumes !!!

Что здесь происходит. Это довольно простой код. Конечно, кто-то видел это раньше ...



Возможно, это связано? https://superuser.com/questions/100746/osx-10-6-give-apache2-readwrite-access-to-mounted-windows-share/152473#152473


ОБНОВЛЕНИЕ: 2010-06-15: Обновлен мой компьютер до 10.6.4, который утверждал, что помогает с проблемами монтирования SMB. Однако это не решило проблему, которую я вижу. Все больше и больше похоже на проблему с Apache ...


ОБНОВЛЕНИЕ: 2010-06-16 : Если код изменен на:
$cmd = "ls -a /Volumes/ 2>&1";
(удалена опция -l) это не дает сбоя. Другими словами, флаг "-l" приводит к возникновению сбоев ...


ОБНОВЛЕНИЕ 2: 2010-06-16 : Поскольку это похоже на проблему Apache (на Mac?), Я разместил на форуме Apache: http://forums.digitalpoint.com/showthread.php?t=1839935

0 голосов
/ 22 августа 2010

Возможно, не ответ, но некоторые данные.Я попал на эту страницу при исследовании аналогичной проблемы.Мой Mac запускает скрипт Automator, когда я вхожу в систему как пользователь, чтобы подключить том NAS (FileShare) в / Volumes.Я попытался найти ссылку FileShare в / Library / WebServer / Documents и после включения WebSharing не смог просмотреть его из-за разрешений (ошибка 403).Разрешения выглядели нормально (755).

Провел некоторое исследование и выяснил, что процесс httpd запущен от имени пользователя _www (ps -ef из Terminal).Попытка ls моего директора с символическими ссылками как _www (sudo -i -u _www ls FileShare) показала, что пользователь _www получил разрешение «Отказано».

В итоге я не исправил разрешения (казалось, ничего не работает), но скорее пошелв / etc / apache2 и изменил httpd.conf, чтобы сервер httpd работал как пользователь (персонал) вместо _www (_www) (в настройках пользователя / группы).

Остановка и перезапуск веб-сервера сделали это сейчасзапускать как пользователь вместо _www - и теперь он смог перейти в каталог с символическими ссылками ...

0 голосов
/ 16 июня 2010

Я согласен с моим ИТ-парнем, и я почти уверен, что это не проблема SMB. Я знаю это, потому что когда я запускаю tcpdump, во время сбоев отсутствует сетевое соединение. Другими словами, что происходит:

1) Apache неправильно изменяет права доступа к файловой системе (то есть изменяет права доступа для монтирования).

2) Будущие попытки получить доступ к монтированию не удастся на уровне ОС / файловой системы, даже до обращения к SMB.

3) Разрешения файловой системы можно восстановить с помощью трюка sudo ls -la /Volumes.

0 голосов
/ 15 июня 2010

Можете ли вы проверить логи этого SMB-сервера? Появляется как ошибка SMB, а не ваша.

...