Дозвіл на користування Samba заборонено користувачеві писати файл, але все одно показується


12

Дуже дивне питання ...

Частка Samba на дистанційному:

[javaerpm]
    path = /u/abas/erpm/java
    force user = erpm
    guest ok = yes
    read only = no
    writeable = yes

Встановити команду на локальний за допомогою root:

root@crunchbang:/mnt/abas# mount -t cifs -o username=guest,rw,exec,auto //10.0.0.2/javaerpm ./javaerpm

Корінь може читати / писати / cd взагалі без проблем:

root@crunchbang:/mnt/abas# cd javaerpm
root@crunchbang:/mnt/abas/javaerpm# touch test
root@crunchbang:/mnt/abas/javaerpm# ll
total 1
-rw-r--r--  1  501 users   0 Sep 24 09:55 test
root@crunchbang:/mnt/abas/javaerpm# rm test

Але якщо я переходжу до звичайного користувача і роблю те саме, я отримую це:

shawn@crunchbang:/mnt/abas/javaerpm$ touch test
touch: cannot touch `test': Permission denied

Я можу llі бачу, що він все одно записав файл:

shawn@crunchbang:/mnt/abas/javaerpm$ ll
total 1
-rw-r--r--  1  501 users   0 Sep 24 09:55 test

Я навіть rmне можу мати проблем:

shawn@crunchbang:/mnt/abas/javaerpm$ rm test
shawn@crunchbang:/mnt/abas/javaerpm$

Я спробував різні варіанти кріплення. uid=501нічого не змінює. Спробував, nounixале тоді це зовсім не працює, і я нічого не бачу, використовуючи root або shawn користувача.


Цей Q виглядає майже точно такою ж проблемою: unix.stackexchange.com/questions/71896/… .
slm

Не зовсім те саме питання.
креветки

Я сказав майже 8-). Цей коментар був більше спрямований на мене, пов'язуючи загальні потоки Q та A разом для майбутніх відвідувачів, але я подумав, що ви можете це перевірити.
slm

Відповіді:


7

Примітка: я просто здогадуюсь тут, я не гуру самби.

Samba / CIFS, принаймні так, як ви тут його використовуєте, не відтворює облікові дані між сервером і клієнтом. Через force userдирективу на сервері всі операції виконуються як користувач erpmна сервері. Однак, оскільки і клієнт, і сервер працюють в системі Unix, вони автоматично домовлялися про розширення CIFS POSIX . Це робить, що дозволи дозволу Unix працюють до певної точки, але лише наскільки це дозволяє сервер, і ви натрапили на випадок, коли вимоги дозволів Unix та те, що дозволяє сервер, відрізняються.

Ви помітите, що всі файли відображаються як ідентифікатор користувача 501. Це їхнє uid на сервері.

Коли ви намагаєтеся створити або видалити файл, для цього потрібен дозвіл на запис у каталог. Весь доступ відображається на одному сервері на сервері, тому дозвіл на запис зводиться до того, чи erpmдозволено писати до цього каталогу на сервері. Відповідь - так.

Під час запуску touchвін створює файл, а потім змінює час його модифікації. Зміна часу модифікації файлу вимагає права власності, і це перевіряється загальним кодом файлової системи на стороні клієнта.

Якщо ви запустите strace touch test, то помітите, що тоді openвиклик (який створює файл) успішний, тоді utimesвиклик (а точніше в Linux utimensatсистемний виклик) не може встановити час.

Це насправді трохи дивно, оскільки utimes має бути успішним, оскільки touchвикликає його аргументом NULL (що означає "встановити часову позначку на поточний час"), і це, як передбачається, може бути дозволено будь-якому абоненту, який може записати у файл, і не тільки власникові, як встановити довільну часову позначку. Я підозрюю, що utimensatнасправді робить перевірку на основі дозволів і визначає, що дозволи дозволяють записати у цей файл, навіть якщо файлова система дозволить операцію запису незалежно від фактичних дозволів.

Основна перевага розширень CIFS POSIX, коли сторона сервера працює з дозволами некорінного користувача, полягає у перенесенні виконуваного біта та, можливо, групового володіння. Це може бути менш заплутаним, якщо ви налаштовуєте право власності на одного користувача на стороні клієнта за допомогою forceuidпараметра mount.


3
Дуже дякую за ретельну відповідь. Зрештою я спробував, username=guest,defaults,nopermі це повністю вирішило проблему. Я не знаю, яку відповідь прийняти на цю, оскільки, username=guest,defaults,nopermмабуть, це не найкраща відповідь, і я просто не маю більше часу, щоб спробувати вашу відповідь. Ще раз дякую вам!
shrimpwagon

@shrimpwagon Дякуємо за ваше оновлення. Це вирішило мою проблему ... Я давно забув про необхідність трубоукладки за замовчуванням і ніпермом під час монтажу.
Метью
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.