[Devel] noperm и монтирование samba
Evgeny Sinelnikov
=?iso-8859-1?q?sin_=CE=C1_etersoft=2Eru?=
Сб Янв 17 02:10:46 MSK 2009
16 января 2009 г. 22:32 пользователь Vitaly Lipatov <lav на etersoft.ru> написал:
> В сообщении от 16 января 2009 Evgeny Sinelnikov написал(a):
> ...
>> > Как сервер проверяет права, если пользователи с разными UID на локальной
>> > машине будут обращаться к одной точке монтирования?
>> на основании uid'а пользователя на сервере, на который мапится
>> вошедший пользователь... Для force user = User - работа ведётся
> Откуда взялась идея, что uid мапится на что-то другое? У нас по умолчанию
> включен LinuxExtensions, и uid соответствует на сервере и клиенте. Разве при
> LinuxExtensions может быть проблема с несоответствием? Или я недопонял?
Идея маппинга относится не к маппингу uid'a на что-то, а имени - на
uid, и не к клиентской части, где включены или выключены
LinuxExtensions, а к samba-серверу. Если я обращаюсь на самбу под
пользователем guest, то я в системе, на самбе, аутентифицируюсь тем
пользователем на кого этот guest маппиться... Обычно это nobody, хотя
где как настроено, по умолчанию...
Так вот далее, войдя под пользователм guest, я пройду или не пройду
аутентификацию и получу или не получу права на запись на уровне шары
(это я назвал первым уровнем)... Допустим, что получу.... Но, чтобы
иметь возможность писать в этой шаре... У пользователя nobody должны
быть права на запись в каталог, куда эта шара определена (это я назвал
вторым уровнем)...
Пример:
[shara]
path = /var/ftp
guest ok = yes
так вот, если у пользователя nobody не будет прав писать в каталог
/var/ftp, то и записать он туда не сможет...
Далее возьмём клиента:
смонтируем каталог из под анонимного пользователя, который будт
замаплен на nobody
$ cifsmount //base/shara shara
Password:
[sin на base ~]$ ls -l shara/
итого 16
drwxr-sr-x 18 sin ftpadmin 0 Сен 17 22:42 ALTLinux
drwxr-x--- 18 sin ftpadmin 0 Авг 4 02:53 Backup
-rw-r--r-- 1 sin sin 15866 Сен 18 2007 COPYING
drwxrws--- 4 sin users 0 Янв 20 2008 Documents
drwxr-sr-x 9 sin ftpadmin 0 Сен 29 14:39 Etersoft
drwxrwxr-x 47 sin ftpadmin 0 Янв 11 03:51 library
drwxrwsr-x 15 root ftpadmin 0 Янв 27 2008 Local
drwx------ 2 root root 0 Июн 23 2007 lost+found
drwxr-sr-x 2 root ftpadmin 0 Июн 26 2007 Maps
drwxr-sr-x 5 sin ftpadmin 0 Окт 26 18:16 old
drwxrwsr-x+ 9 sin ftpadmin 0 Окт 17 10:32 Photo
drwxr-sr-x 7 sin ftpadmin 0 Авг 29 2007 Projects
drwxr-xr-x 3 root root 0 Апр 28 2008 pub
lrwxrwxrwx 1 sin ftpadmin 4 Авг 9 2007 srv -> /srv
drwxr-sr-x 5 sin ftpadmin 0 Авг 10 2007 System
drwxr-sr-x 2 sin ftpadmin 0 Окт 19 21:18 tmp
drwxr-sr-x 3 sin ftpadmin 0 Дек 26 2007 tst
drwxr-sr-x 8 sin ftpadmin 0 Янв 8 00:54 Work
drwxr-sr-x 2 sin ftpadmin 0 Апр 27 2008 Папка
[sin на base ~]$ ls -ld shara/
drwxr-xr-x 20 root root 0 Окт 26 18:16 shara/
[sin на base ~]$ mkdir shara/tdt
mkdir: невозможно создать каталог `shara/tdt': Отказано в доступе
[sin на base ~]$ touch shara/tmp/tetst
touch: невозможно выполнить touch для `shara/tmp/tetst': Отказано в доступе
Досадно... не прописывать же везде nobody... А хотелось бы анонимный
доступ без пароля...
Ну, что ж... Сделаем-ка force user = sin... Тогда всё действительно
будет работать...
Но у клиента есть ещё один уровень проверки - локальный на уровне
cifs. Назовём его нулевой... Если sin на другом хосте будет иметь
другой uid, то подмонтированная шара покажет не локальное имя sin, а а
то имя которое будет соответсвовать uid'у с сервера... и клиент будет
думать, что писать право не имеет ещё до попытки отправки команды на
сервер... Таким образом это нулевой уровень не будет соответствовать
реальности... Писать можно, а клиент думает, что нельзя...
Как быть? Отключить нулевой уровень проверок и предоставить серверу
самому решать можно или нельзя... Для этого используется параметр
монтирования noperm. Похожего преследуют и попыткой вручную задать
опции uid=sin,gid=users,file_mode=0644.
Но есть разница, поскольку noperm честно не пытается себя
ограничивать, отдавая запросы серверу... А вариант uid,gid,file_mode
пытается обмануть самого себя... Иногда удачно, иногда - нет...
Последнее, вероятно, ещё и некорректно...
>
>
>> именно под этим пользователем... Если force user не установлен, то
>> работа ведётся из под того, под кем залогинились... его uid
> Да, сам процесс smbd для шары под ним запускается.
>
>> используется при вычислении прав на файловой системе сервера поверх
>> тех прав, которые прописаны в настройках шары.
>>
>> То есть ограничения двухуровневые:
>> - на уровне доступа к шаре
>> - на уровне доступа к файлам на файловой системе для вошедшего
>> пользователя...
>>
>> именно поэтому не удобно давать без force user шару в хомячке, ибо
>> тогда нужно права на запуск в домашний каталог давать всем, либо всех,
> Что за шара в хомячке?
Ну, вот захотел я расшарить по самбе для всех без разбора каталог
/home/sin/Documents/Photo
А у меня:
$ ls -ld /home/sin/
drwxr-x--- 201 sin sin 20480 Янв 17 01:31 /home/sin/
И если не задать для это шары force user, что в общем-то логично, то
произвольный guest доступа к ней, даже на просмотр каталога, не
получится.
> Я правильно понимаю, что одной точкой монтирования невозможно
> подключить /home, содержащий каталоги разных пользователей, с тем, чтобы на
> локальной машине они все могли работать в своих каталогах?
>
Это вполне возможно, но для этого uid/gid должны совпадать на всех
машинах, и хаками uid=user,gid=group,file_mode=0XYZ или noperm
пользоваться уже нельзя.... всё должно проходить в чистую... клиент
должен видеть ФС именно так, как её видит сервер, чтобы не возникала
коллизий.
>> >> Если синхронизации по uid, gid нет (и по тому в какие группы входит
>> >> пользователь тоже, то есть по всей авторизационной информации), то
>> >> клиент не может правильно рассчитать права. Получается ситуация, что
>> >
>> > Допустим, она есть. При этом проблемы не будет?
>>
>> Да, синхронизация даст много плюсов... Эта часть в первую очередь
>> отличает Tartarus от AD... У AD есть ряд костылей, но в целом
>> однозначно мапить sid'ы всё равно не удастся... Самый прямой путь -
>> держать соответствие в LDAP, а для этого схему расширять нужно, чна
>> что не все готовы пойти....
> Эта идея о использовании CIFS совместно с Tartarus появилась вчера, или она
> уже может быть сформулирована на wiki?
>
Эта идея заключается в необходимости интеграции cifs с kerberos на
уровне проброса ключей из userspace и предполагалась всегда... Вопрос
в том, чтобы научить самбу аутентифицировать через kerberos не только
для AD, но и для Tartarus. Это ключевой вопрос и решать его иначе, чем
патчами для сабы пока не ясно как... Разве, что воспользоваться
механизмами бекендов для Samba4...
>> >> некоторые действия, разрешены на сервере, но CIFS-модуль считает, что
>> >> они запрещены и выдает permission denied, а некоторые считает, что
>> >> разрешены, а сервер выдает запрет. Сервер контролирует права в любом
>> >
>> > А почему в наших экспериментах ошибка зависит от интервала между
>> > операциями?
>>
>> Я думаю, что это бага CIFS при использовании uid'ов... На самом деле
>> всё должно работать... такое ощущение, что сразу после создания
>> каталога uid=user некорректно отдаёт реальный uid, вместо
>> подставного....
--
Sin (Sinelnikov Evgeny)
Подробная информация о списке рассылки devel