Samba, AFP and OS X
Настраивал файлохранилище. В качестве эксперимента – добавил поддержку AFP. Поставить самбу – нетяжело, и особо вдаваться в детали я не стану. Все коробочное, кроме общей шары:
[storage] 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. Кроме того, файл создастся от имени залогиненого пользователя. То есть пользователи не смогут удалить файлы оставленные им другими пользователями. Я долго копался, и благодаря Роману нашел решение:
[global] ... unix extensions = no ...
Это решает проблему с правами. Но чуть позже я вернул unix extensions и добавил в шару опцию
force user = nobody
Но на OS X 10.6.3 внезапно явилась проблема: при загрузке папки она ставит на нее расширенные аттрибуты. Ругается, и не дает загрузить файлы. Вручную же файлы именно вовнутри папки загружаются. Все это сопровождается сообщением “operation can’t be completed because you don’t have permission to access…” (раз, два). Решением стало добавление
[global] ... acl check permissions = no ...
С AFP в Ubuntu 10.04 все хорошо – пакет пересобирать не надо, он собран уже с шифрованой передачей пароля.
Однако конфиг подровнять пришлось. В /etc/netatalk/afpd.conf в конце пишем:
- -transall -uamlist uams_dhx.so,uams_dhx2.so,uams_guest.so -nosavepassword
Кроме варианта по-умолчанию сюда добавлен uams_guest.so для доступа к анонимной свалке.
Рядом в файле /etc/netatalk/AppleVolumes.default пишем:
~/ "Home Directory" options:usedots /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!