Предоставление разрешения www-data в подпапку Dropbox?

Я хочу предоставить моему веб-сайту разрешение на чтение файлов и папок из подпапки Dropbox.

Я думаю, что добавил правильные разрешения, но я не могу заставить пользователя www-data получить доступ к папкам.

 $ cd /home/edent/Dropbox $ ls -la total 9944 drwxrwxr-x 6 edent edent 4096 Aug 14 2012 . drwx------ 67 edent edent 20480 Feb 27 09:11 .. drwxrwxr-x+ 772 edent www-data 118784 Jan 29 20:45 Foo drwxrwxr-x 4 edent edent 4096 Aug 14 2012 Bar 

Все подпапки и файлы Foo также являются drwxrwxr-x+ edent www-data

Таким образом, я переключаюсь на пользовательские www-data но у него нет разрешения на доступ к этим файлам и папкам!

 $ sudo su www-data $ groups www-data $ id uid=33(www-data) gid=33(www-data) groups=33(www-data) $ cd /home/edent/Dropbox/Foo sh: 3: cd: can't cd to /home/edent/Dropbox/Foo 

Однако, если я начну с /home/edent/Dropbox/Foo я могу получить доступ к файлам, но не к каталогам.

 $ cd ~/Dropbox/Foo/ $ sudo su www-data $ ls (file listing) $ tail example.txt (file displayed) $ cd Bar/ sh: 4: cd: can't cd to Bar 

Что я делаю не так? Все, что я хочу, – это доступ Apache к ограниченному набору папок – я не хочу открывать всю свою файловую систему.

2 Solutions collect form web for “Предоставление разрешения www-data в подпапку Dropbox?”

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

Например:

 chmod 710 /home/$USER chmod 710 /home/edent/Dropbox chmod 750 /home/edent/Dropbox/Foo 

Но для этого вам понадобится группа для всех этих уровней, чтобы быть www-data . Это несколько неопрятно, так как нужно изменить группу своего домашнего каталога только для одного конкретного сценария, который может конфликтовать с другими вещами, которые вы хотите сделать позже.

Если у вас есть root на хосте, более подходящим решением является использование привязки. В /etc/fstab добавить что-то вроде:

 /home/edent/Dropbox/foo /var/www/html/foo none bind 0 0 

Это должно привести к тому, что каталог в Dropbox появится в каталоге /var/www/html , не относящийся к каким-либо другим разрешениям файловой системы. Теперь вам нужно только беспокоиться о разрешениях файлов в этом каталоге, а не в иерархии выше этого. Вы можете думать об этом как о суперсимволе, которая может охватывать файловые системы. Например, я использую это в машине с небольшим диском SSD для / и все мои большие медиафайлы находятся на отдельном диске большего размера. Я создаю впечатление, что эти медиафайлы находятся в моем домашнем каталоге:

 /media/bigdrive/media /home/me/media none bind 0 0 

Это потому, что ваши / домашние атрибуты

  drwx------ 67 edent edent 20480 Feb 27 09:11 .. 

нет x для группы или другой, поэтому

cd /home/.... не удастся

Но когда уже в домашней директории edent,

cd ./Dropbox/...

будет работать, потому что вы не используете / home

изменить 1

chmod o+x /home позволит работать cd.

Вот документация Apache, чтобы настроить псевдоним каталога

  • Apache дает мне 403 на виртуальном хосте
  • Является ли параметр ModPagespeedSlowFileLatencyUs игнорированным?
  • Как связать URL-адреса файлов?
  • Запуск действия при посещении URL-адреса
  • Как установить несколько экземпляров PHP и настроить для Apache
  • Установите apache, php и mysql на CentOS VPS
  • Apache не прослушивает порт 443
  • Apache 2.4 SSL Config - сервер отклоняет запросы с HTTP 400
  • Все еще уязвим после отключения SSLv3
  • Почему моя CMS работает очень медленно на моей рабочей станции (Ubuntu)
  • Apache - 403 Запрещено
  • nginx proxy - 502 плохой шлюз
  • Linux и Unix - лучшая ОС в мире.