Samba, AFP and OS X
May 24th, 2010Настраивал файлохранилище. В качестве эксперимента – добавил поддержку AFP.
Поставить самбу – нетяжело, и особо вдаваться в детали я не стану. Все коробочное, кроме общей шары:
comment = General storage area
path = /home/storage
guest ok = yes
browseable = yes
create mask = 0666
directory mask = 0777
read only = no
Попробуйте на такую шару скопировать файл из-под винды. Правильно, права будут 0666. А теперь из-под линукса/мака. Права совсем не 0666, а скорее 0644 или 600. Кроме того, файл создастся от имени залогиненого пользователя. То есть пользователи не смогут удалить файлы оставленные им другими пользователями.
Я долго копался, и благодаря Роману нашел решение:
...
unix extensions = no
...
Это решает проблему с правами. Но чуть позже я вернул unix extensions и добавил в шару опцию
Но на OS X 10.6.3 внезапно явилась проблема: при загрузке папки она ставит на нее расширенные аттрибуты. Ругается, и не дает загрузить файлы. Вручную же файлы именно вовнутри папки загружаются. Все это сопровождается сообщением “operation can’t be completed because you don’t have permission to access…” (раз, два).
Решением стало добавление
...
acl check permissions = no
...
С AFP в Ubuntu 10.04 все хорошо – пакет пересобирать не надо, он собран уже с шифрованой передачей пароля. Однако конфиг подровнять пришлось.
В /etc/netatalk/afpd.conf в конце пишем
Кроме варианта по-умолчанию сюда добавлен uams_guest.so для доступа к анонимной свалке.
Рядом в файле /etc/netatalk/AppleVolumes.default пишем
/home/storage/ "Common storage" dperm:0777 fperm:0666 options:usedots
Как принудительно заставить писать от имени nobody в storage я не нашел, потому выставил соответствующие права.
Опция usedots не дает преобразовывать точку в “:2e“.
Финальным шагом был анонс сервисов через бонжур при помощи avahi-daemon.
/etc/avahi/services/afpd.service
<?xml version="1.0" standalone='no'?><!--*-nxml-*--> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <name replace-wildcards="yes">%h</name> <service> <type>_afpovertcp._tcp</type> <port>548</port> </service> <service> <type>_device-info._tcp</type> <port>0</port> <txt-record>model=Xserve</txt-record> </service> </service-group>
/etc/avahi/services/samba.service
<?xml version="1.0" standalone='no'?><!--*-nxml-*--> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <name replace-wildcards="yes">%h</name> <service> <type>_smb._tcp</type> <port>139</port> </service> </service-group>
Enjoy!