Як правильно змонтувати cifs (ubuntu) з доступом на запис для nginx

  • Ubuntu server
  • Samba
  • CIFS

У мене якесь замкнуте коло, не можу нагугліть відповідь вже другий день.

дано:
  • Є мережевий NAS на основі якогось Лінукса, який роздає папку як розшарений папку windows - доступ для всіх на запис
  • Ця мережева папка добре видно і працює на запис для windows desktop клієнтів
  • Налаштовую Ubuntu Server 14.04 на якому буде працювати web-додаток під nginx + php-fpm - звичайнісінькі настройки, запускаються під користувачем www-data
завдання:
PHP веб-додаток іноді має створювати вкладені папки і файли всередині тієї самої расшаренной папки на NAS. Наприклад, писати файли за допомогою file_put_contents.
З іншого боку, я хочу сидячи на ubuntu сервері по ssh під своїм користувачем також мати доступ на запис в цю розшарений папку (буду іноді вручну запускати всякі скпріти, які будуть туди писати).

пробую вирішити
Спроба номер 1:
Пишу в / etc / fstab наступний рядок:


Зверніть увагу на опції dir_mode = 0777, file_mode = 0777 - про них кожен другий відповідь на stackoverflow, що варто їх додати і все запрацює саме! (Ха-ха)

Монтую $ sudo mount -a

Перевіримо як змонтувати:


Подивимося які права вийшли у папки:


Начебто є доступ на запис для всіх: drwxrwxrwx. Спробуємо записати новий файл:

Що інетерсно, сам файл створився, але він порожній:


Перевіримо, чи можу я писати файли з веб-додатки? Пишемо php скрипт, який буде запускатися при заході на сторінку


Відкриваємо в браузері 192.168.20.149/test.php (це мій ubuntu сервер із запущеним nginx + php-fpm, де ми совбственно намагаємося монтувати) і отримуємо:


Тобто з скрипта теж ніякого доступу на запис немає :(

Якщо подивитися в консолі, то виявимо, що файл створився, тільки він порожній - цього я ніяк не розумію


Спроба номер 2:
Погуглити, дізнався, що потрібно при монтуванні cifs кулі вказувати uid і gid.
Спробуємо. Для початку дізнаємося мої uid і gid.


Дізналися: я користувач ad і моя основна група ad
Спочатку отмонтіруем: $ sudo umount -l / mnt / filesfolder
Потім міняємо fstab: $ sudo nano / etc / fstab


Монтуємо заново: $ sudo mount -a
Дивимося на папку:


Тепер owner став ad / ad (раніше був nobody / nogroup)

Запис нового файлу в папку заробила:


Спробуємо наш php скрипт через браузер (попередньо видаляю старий порожній test.txt за допомогою windows машини):
Відкриваємо браузер 192.168.20.149/test.php і бачимо старе знайоме повідомлення:


При цьому файл test_from_php.txt створюється:

і тепер у нього owner чомусь ad / ad

До речі, треба б перевірити, що мій nginx + php-fpm працюють як www-data, для цього пишу такий простий php скпріт і відкриваю його в браузері:


Виводить текст в браузері: www-data

Виходить я з консолі тепер можу писати в цю розшарений папку, але моє веб-додаток все ще не може.

Спроба номер 3:
Размонтіруем, міняємо fstab, вказуючи uid = www-data, gid = www-data, монтуємо обрабтно, перевіряємо:

Пробуємо записати файл через консоль - знову відмова (як і в спробі номер 1, але я не розумію чому, адже права на папку drwxrwxrwx)


Зате php-скрипт через браузер не видёт ніяких помилок і файл test_from_php.txt записується успішно!


Увага, питання:
Як мені примонтировать папку так, щоб я і з консолі міг в неї записувати і з web-додатки, яке під користувачем www-data?
І чому в експериментах вище у мене взагалі проблеми з записом в папку, якщо вона виглядає як drwxrwxrwx - тобто доступна на запис для всіх користувачів усіх груп?

Схожі статті