Автор Тема: SAMBA проблемы с разрешениями на файлы.  (Прочитано 21146 раз)

Оффлайн Alexandr

  • Завсегдатай
  • *
  • Сообщений: 366
  • Кризис, что сказать...
    • Email
Добрый день! Есть следующая проблема, хочу расшарить папку в общий гостевой доступ и у меня это получается. Затем я использую маски создания файлов и папок, чтобы когда пользователь по сети создавал в папке общий файл, ему автоматически назначались права для всех:

[global]
        dos charset = CP866
        unix charset = UTF8
        display charset = LOCALE
        workgroup = WORKGROUP
        netbios name = tech
        server string =
        printcap name = cups
        load printers = yes
        printing = cups
        log file = /var/log/samba/log.%m
        max log size = 50
        dns proxy = no
        ldap ssl = no
        preferred master = no
        os level = 0
        use sendfile = yes
        security = share
        guest account = nobody
        invalid users = root
        map to guest = Bad User

[printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = yes
        guest ok = yes
        writable = no
        printable = yes
        create mode = 0700

[share]
        path = /var/share
        create mask = 0777
        directory mask = 0777
        browseable = yes
        public = yes
        writable = yes

Но когда пользователь создает в общей папке файл, права на нее либо не меняутся, либо ставяться к примеру "только запсиь, для группы" и "только запись, для остальных" - получается что параметр create mask = 0777 не отрабатывает как должен. Пробовал добавлять параметр         force create mode = 0777 - не помогает. Разрешения на папку /var/share стоят как 777. Полазил по интернету, там попадалась подобная проблема, правда решение там как то не появлялось. Может это просто такая сборка или версия самой самбы, или я просто что-то не так делаю....

Заранее спасибо :)
« Последнее редактирование: 16.02.2009 11:46:37 от Alexandr »
Логика и здравый смысл победит! фанатские инсинуации, словоблудие и прочий необоснованный детский лепет. Это не про вас? Тогда вам сюда: http://lleo.aha.ru/na/

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Кстати пока гуглил - нашёл полезную ссылку http://smb-conf.ru/

http://smb-conf.ru/obyasnenie-kazhdogo-parametra-c.html#create mask

Параметр create mask - это не права доступа по-умолчанию, а маска, которая складывается с значением umask

Оффлайн Alexandr

  • Завсегдатай
  • *
  • Сообщений: 366
  • Кризис, что сказать...
    • Email
Цитировать
Параметр create mask - это не права доступа по-умолчанию, а маска, которая складывается с значением umask

И это читал и пробовал. Я даже пробовал вот-так: 07 оставлял, а две другие семерки менял, т.е. получал create mask 0711 create mask 0722 .... В итоге, с файла который имеет маску 0644 в шаровой папке я получал либо 0722 либо 0744 либо 0700  ??? Че за... и как же теперь делать гостевой доступ. Да, пользователи могут создавать и удалять файлы, но копировать или открывать их не могут, т.к. на файле стоит в качестве хозяина nobody, в качестве группы nobody, а права для всех остальных менять масками не получается...
Логика и здравый смысл победит! фанатские инсинуации, словоблудие и прочий необоснованный детский лепет. Это не про вас? Тогда вам сюда: http://lleo.aha.ru/na/

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Сделайте что-бы гость имел права nobody

Оффлайн Alexandr

  • Завсегдатай
  • *
  • Сообщений: 366
  • Кризис, что сказать...
    • Email
Цитировать
Сделайте что-бы гость имел права nobody

Чтобы гость имел права пользователя nobody, нужно чтобы он назывался nobody:) Или я что-то путаю....

Кстати, в интернете выложено достаточно конфигов, где параметры:

        create mask = 0777
        directory mask = 0777

отробатывают норамльно.
Логика и здравый смысл победит! фанатские инсинуации, словоблудие и прочий необоснованный детский лепет. Это не про вас? Тогда вам сюда: http://lleo.aha.ru/na/

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Цитировать
т.к. на файле стоит в качестве хозяина nobody, в качестве группы nobody, а права для всех остальных менять масками не получается...
о каких других пользователях тогда речь ?

Оффлайн Andrey

  • Завсегдатай
  • *
  • Сообщений: 734
Попробуйте оставить только
force create mode = 0777

Оффлайн Alexandr

  • Завсегдатай
  • *
  • Сообщений: 366
  • Кризис, что сказать...
    • Email
Цитировать
о каких других пользователях тогда речь

Вот именно, что не о каких. Пользователи цепляются, под этим логином - по умолчанию, с его правами создают файлы, а когда приходит время их читать - тут почиму-то вдруг оказывается, что они на самом деле не nobody. Тут либо добавить параметр force user, но тогда опять-же, не о каком гостевом доступе речи не идет.

Цитировать
force create mode = 0777

Да оставлял вроде только его.... Завтро еще раз попробую :)
Логика и здравый смысл победит! фанатские инсинуации, словоблудие и прочий необоснованный детский лепет. Это не про вас? Тогда вам сюда: http://lleo.aha.ru/na/

Оффлайн Alexandr

  • Завсегдатай
  • *
  • Сообщений: 366
  • Кризис, что сказать...
    • Email
Собственно, сам и нашел решение своей проблемы. Вот пример, как сделать полностью гоставую папку:

[share]
        path = /var/share
        force user = имя_пользователя
        force create mode = 0666
        force directory mode = 0777
        browseable = yes
        read only = no
        public = yes
        writable = yes

Попробую обьяснить почиму так. Когда пользователь подключается к общей папке в качестве гостя и к примеру записывает туда файл, то этот файл получает в качестве владельца - имя создавшего его пользователя, но его настоящее имя, а не имя гостевой учетки. Параметр force create mode = 0666 прописывает этому файлу разрешения "чтение и запись" владельцу, группе, всем остальным. Когда второй пользователь, с другим именем, подключается к этой папке как гость, то он может читать этот файл, может в него записывать, копировать его себе - но удалить он его не может, т.к. не является его владельцем. Так же человек, который локально сидит за этим ПК, так же как второй пользователь - может читать, писать, но... не не удалять. Для того, чтобы любой пользователь из локальной сети создавал в нашей папке файл, а любой другой пользователь его оттуда мог удалить - мы добавляем параметр force user = имя_пользователя. С этим параметром - любой кто авторизовался как гость и пишет или читает файл, любой виртуально становиться тем пользователем, которого мы указали в качестве force user =. Тоесть уже получаем гостевой доступ. Но! Наш локальный пользователь все еще не может удалить этот файл из папки, т.к. на него параметр force user = имя_пользователя не действует, он за пределами САМБА (правда он еще может поднять свои права до root, но мы не будем об этом думать). Зато он может делать с файлами этой папки что хочет, если зайдет в папку не локально а по сети, можно даже с локальной машины. Значит мы смело можем написать вот так: force user = nobody и это будет правильно отчасти. Но если мы работаем за нашем компьютером одни, мы можем сделать еще хитрее, а именно вот так: force user = имя_нашей_локальной_учетки. Тогда будут счастливы все:)
Логика и здравый смысл победит! фанатские инсинуации, словоблудие и прочий необоснованный детский лепет. Это не про вас? Тогда вам сюда: http://lleo.aha.ru/na/

MisHel64

  • Гость
Собственно, сам и нашел решение своей проблемы. Вот пример, как сделать полностью гоставую папку:
Извени, тут мого умных слов, и похоже я все не осилил.
Любой пользователь, авторизованный или нет, зайдя на папку share, станет пользователем "имя_пользователя", и созданный им файл будет иметь права 0x666, а каталоги 0x777, и владельцем будет "имя_пользователя". Читать и совершать прочии операции над каталогом, он будет исходя из ограничений наложеннных именно на учетку "имя_пользователя". Если эта и была твоя цель, что бы любой пользователь имел равные права на содержимое шары, то ты этого достиг.
И маленкое замечание, "read only = no" и "writable = yes" это синонимы, и использовать досточно только один.
И если я правильно помню умолчания для самбы, то луюбой созданый/измененый файл с WIndows машины на твоей шаре получит права 0x766, что может быть потом сильно черевато.

У меня несколько другая проблема. Есть шара. Доступ к которой четко ограничен "host allow =1.1.1.2/32". Но, пользователь с ip 1.1.1.3 спокойно заходит в эту папку и делает все что хочет. То есть получается, что если не запещен доступ с конкретных адресов, то он разрешон?
Значит мне нужно дописать в свойство папки что-то типа "host deny=0.0.0.0/0"?
Авторизации у меня нет.
« Последнее редактирование: 18.02.2009 00:41:48 от MisHel64 »

Оффлайн Andrey

  • Завсегдатай
  • *
  • Сообщений: 734
Без маски указывать пробовали?

MisHel64

  • Гость
Без маски указывать пробовали?
Извени, уточню.
1) Есть подозрение что самба не понимает масок?
2) Или что она не понимает маску /32?
3) Или она не правильно трактует маску /32?
тогда я совсем запутался. Допустим на шару должны заходить только владельцы ипов 1.1.1.1-1.1.1.127 (1.1.1.0/25), кроме 1.1.1.3. Как тогда правильнее расписать allow и deny? И какой алгоритм вычисления самбой, пускать или не пускать? И если ип не попадает не под одно правило, что должна сделать самба? Пустить или не пустить?

Оффлайн German

  • Начинающий
  • *
  • Сообщений: 3
Только что решал такую же проблему.  В конфиге было "crete mask = 0777",
а реально на создаваемые файлы получалось 0766. Всегда.
Мне помогла замена "crete mask = 0777" на "force create mode = 0777".
Но должен сказать, что samba у меня контроллер домена.

Оффлайн Andrey

  • Завсегдатай
  • *
  • Сообщений: 734
Без маски указывать пробовали?
Извени, уточню.
1) Есть подозрение что самба не понимает масок?
2) Или что она не понимает маску /32?
3) Или она не правильно трактует маску /32?
тогда я совсем запутался. Допустим на шару должны заходить только владельцы ипов 1.1.1.1-1.1.1.127 (1.1.1.0/25), кроме 1.1.1.3. Как тогда правильнее расписать allow и deny? И какой алгоритм вычисления самбой, пускать или не пускать? И если ип не попадает не под одно правило, что должна сделать самба? Пустить или не пустить?
Посмотрите по ссыле выше, только после #hosts allow
а про маску 32 у одного ип не знаю как объяснить, но видимо попадает 1.1.1.3 в этот диапозон.

MisHel64

  • Гость
В конфиге было "crete mask = 0777", а реально на создаваемые файлы получалось 0766. Всегда.
У меня файлы по умолчанию создаются  с 0x744.
Вот мои размышления, почему так происходит.
1) Windows естественно не знает о атрибутах юних, по этому атрибут 0x000.
2) Самба подправляет этот атрибут до 0x644
3) Полученный атрибут умнажается на описанный в "mask" (Операция AND, по умолчанию 744, получаем 0x644)
4) Полученный атрибут складывается с описанным в "force" (Операция OR, по умолчанию 0x000, получаем 0x644)
5) Самба мапит DOS атрибут "Архивировать" в Юникс атрибут "исполняемый владельцем" 0x100. (Получаем 0x744)
На счет 5го пунткта не уверен, что он выполняется именно 5тым, а не перед другим.
Если я прав, то теперь у всех создаваемых у тебя файлов стал атрибут 0x777.
После установки  "force create mode = 0777", на 4м пункте маска установится в 0x777, для всех создаваемых файлов.
2 Andrey FYI Под диапазон 1.1.1.2/32 короме IP 1.1.1.2 ни какой другой адрес кроме 1.1.1.2 попасть не может.
« Последнее редактирование: 18.02.2009 13:04:28 от MisHel64 »