Пользователь Samba не разрешил доступ к файлу записи, но по-прежнему показывает

12

Очень странная проблема ...

Самба поделится на пульте:

[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

Root может читать / писать / 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.

shrimpwagon
источник
Этот вопрос выглядит как почти та же проблема: unix.stackexchange.com/questions/71896/… .
SLM
Не совсем та же проблема.
креветок 26.09.13
Я сказал почти 8-). Этот комментарий был больше направлен на то, чтобы связать общие нити Q и A для будущих посещений, но я подумал, что вы можете проверить это.
SLM

Ответы:

7

Примечание: я просто догадываюсь, я не гуру самбы.

Samba / CIFS, по крайней мере так, как вы используете его здесь, не воспроизводит учетные данные между сервером и клиентом. Из-за force userдирективы на сервере все операции выполняются erpmна сервере как пользователь . Однако, поскольку клиент и сервер работают под управлением Unix-системы, они автоматически связывают расширения CIFS POSIX . Это заставляет разрешения Unix работать до определенного момента, но только в той степени, в которой это позволяет сервер, и вы сталкиваетесь с ситуацией, когда требования Unix и разрешения сервера различаются.

Вы заметите, что все файлы отображаются как ID пользователя 501. Это их uid на сервере.

Когда вы пытаетесь создать или удалить файл, для этого требуется разрешение на запись в каталог. Весь доступ сопоставляется одному пользователю на сервере, поэтому разрешение на запись сводится к тому erpm, разрешена ли запись в этот каталог на сервере. Ответ - да.

При запуске touchон создает файл, а затем меняет время его изменения. Изменение времени модификации файла требует владения, и это проверяется общим кодом файловой системы на стороне клиента.

Если вы запустите strace touch test, вы заметите, что тогда openвызов (который создает файл) завершается успешно, тогда utimesвызов (или, скорее, в Linux utimensatсистемный вызов) не может установить время.

Это на самом деле немного странно, потому что utimes должно сработать, так как touchвызывает его с аргументом NULL (что означает «установить метку времени на текущее время»), и это должно быть разрешено любому вызывающему, который может записать в файл, и не только владельцу нравится устанавливать произвольную метку времени. Я подозреваю, что utimensatна самом деле выполняется проверка на основе разрешений и определение того, что в разрешениях говорится, что вы не можете записать в этот файл, даже если файловая система разрешит операцию записи независимо от фактических разрешений.

Основное преимущество расширений CIFS POSIX, когда сторона сервера работает с разрешениями пользователя без полномочий root, заключается в переносе исполняемого бита и, возможно, владении группой. Это может быть менее запутанным, если вы сопоставите владение пользователем одному клиентскому пользователю с параметром forceuidмонтирования.

Жиль "ТАК - перестань быть злым"
источник
3
Большое спасибо за подробный ответ. В конце концов я попытался, username=guest,defaults,nopermи это полностью решило проблему. Я не знаю, какой ответ принять на этот вопрос, поскольку, username=guest,defaults,nopermвероятно, это не лучший ответ, и у меня просто нет больше времени, чтобы опробовать ваш ответ. Еще раз спасибо!
креветок 26.09.13
@shrimpwagon Спасибо за ваше обновление. Это решило мою проблему ... Я давно забыл о необходимости использовать трубы по умолчанию и noperm при монтаже.
Мэтью