Уже много лет как я не настраивал сервер Samba, типа а зачем, если один раз сделал и забыл? Но вот на днях возникла такая необходимость. На моих samba-шарах есть симлинки и вот тут я наступил по полной программе! Оказывается с тех пор так много воды утекло, что надо садиться и разбираться со всем этим хозяйством по новой! Итак. У меня есть шара: /mnt/free, в которой симлинками подключены несколько каталогов/разделов с других жётских дисков. На сервере это имеет следующий внешний вид: # ls -al /mnt/free/ итого 8 drwxrwxr-x. 2 victor users 4096 Май 6 17:32 . drwxr-xr-x. 10 root root 4096 Май 6 17:31 .. lrwxrwxrwx. 1 victor users 14 Май 6 17:32 vol1 -> /mnt/sdb1/free lrwxrwxrwx. 1 victor users 14 Май 6 17:32 vol2 -> /mnt/sdc1/free lrwxrwxrwx. 1 victor users 14 Май 6 17:32 vol3 -> /mnt/sdd1/free В smb.conf я как белый человек вписал на шару: follow symlinks = yes пытаемся это дело монтирвать на клиенте той же самой командой, которой я делал это несколько лет назад: mount -t cifs -o uid=victor,username=victor,password=xxxx //router/free /mnt/free после чего смотрим в каталог на клиенте и охреневаем: там пусто! В логах samba на сервере ничего путного нет! Зная, что может так непредстказуемо вести себя в системе смотрим SELinux - это оно! Либо отключите SELinux вообще (что в общем-то здравая идея если вы понимаете, что вы делаете), либо установите следующие настройки в момент загрузки системы: setsebool samba_enable_home_dirs=on setsebool samba_export_all_ro=on setsebool samba_export_all_rw=onЯ далёк от мысли, что вам не может понадобится что-то ещё, так что смотрите: getsebool -a |grep samba getsebool -a |grep smbИтак, снова монтируем на клиенте и снова охреневаем: символьные ссылки видны как ЛОКАЛЬНЫЕ символьные ссылки (битые), т.е. вместо каталогов, которые я бы должен был получить, на клиенте вот такая картина: # ls -al /mnt/free итого 4 drwxrwxr-x 2 victor users 0 май 6 17:32 . drwxr-xr-x. 5 root root 4096 май 8 17:47 .. lrwxrwxrwx 1 victor users 14 май 6 17:32 vol1 -> /mnt/sdb1/free lrwxrwxrwx 1 victor users 14 май 6 17:32 vol2 -> /mnt/sdc1/free lrwxrwxrwx 1 victor users 14 май 6 17:32 vol3 -> /mnt/sdd1/free Естественно на клиенте таких точек монтирования как /mnt/sdb1/free, /mnt/sdc1/free, /mnt/sdd1/free не было и в помине! Тупо глядя в монитор спрашиваю себя "какогого х...???" Начинаю разбираться, гуглить и вот что выясняется. Некоторое время назад в samba появилась глобальная опция unix extensions = yes включенная по умолчанию. Из-за этой опции, клиент начинает считать, что встретившиеся на шаре симлинки должны обрабатываться ЛОКАЛЬНО! Т.е. сервер не разруливает эти ссылки на своём уровне, а просто транслирует их клиенту! Посмотрев man на mount.cifs я даже нашёл опцию на клиенте, отключающую это поведение и команда монтирования приняла такой вид: mount -t cifs -o nounix,uid=victor,username=victor,password=xxxx //router/free /mnt/free перестартовал smbd, перемонтировал шару и опять впал в ступор. Каталоги вместо симлинков появились, но теперь при заходе в них было пусто! Включил в глобальной секции smb.conf логгирование log level = 2перестартовал smbd и увидел следующщее сообщение в логе: symlink outside the share path Снова полез гуглить и нашёл, что есть ещё одно нововведение. Оказалось, что некоторое время назад, в samba нашли дыру, благодаря которой при определённых значениях опций, включенных по умолчанию, можно было получить через симлинки практически любой файл на файловой системе сервера. И они эту дыру прикрыли. Работа с symlinks (символьными ссылками) поменялась координально. Теперь, чтобы обеспечить старое поведение samba нужно выполнить следующее:
Благодарности как всегда принимаются на почту. Ваш Виктор Вислобоков.
|
|||