Предоставление разрешения 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 к ограниченному набору папок – я не хочу открывать всю свою файловую систему.

  • Необходимо захватить IP-адреса посетителей из журналов Apache
  • Почему Firefox 33 не использует GCM на нашем веб-сервере?
  • Поток аудио из скрипта bash cgi
  • Что такое символическая ссылка? Понимание структуры символических ссылок
  • httpd и mysqld используют память
  • Базовая конфигурация Apache2 vhost не работает
  • Проблемы с остановкой / ожиданием MySQL; "Невозможно соединить ... через сокет"
  • Установите ssl на CentOS Apache server
  • 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, чтобы настроить псевдоним каталога

    Linux и Unix - лучшая ОС в мире.