Posterous theme by Cory Watilo

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!

Plesk and virtual FTP users

В Plesk для каждого домена заводится FTP путем создания обычного системного юзеря. Дополнительный фтп можно сделать не иначе как через под-домен. Но иногда возникает необходимость дать ftp-доступ в под-папку домена.

Так как плеск использует proftpd, то конфигурация чертовски проста.

Создаем /etc/proftpd.authuserfile.

Правим /etc/proftpd.include и добавляем:

AuthUserFile /etc/proftpd.authuserfile

Правим /etc/proftpd.authuserfile и добавляем записсь вида:

username:crypted_pass:uid:gid:gekos:home:shell

Пример:

someacc:xhppo.NGU0Fjw:10065:2523::/var/www/vhosts/example.org/private/someacchome:/bin/false

crypted_pass можно получить вызвав

openssl passwd -crypt passwordhere

Или просто вызвав системный crypt.

Подсмотреть UID/GID можно в /etc/passwd. Нужен он для раздачи прав, чтобы владелец домена также мог править/удалять файлы, загруженные виртуальным пользователем.

UPD:

На cybercity упоминается утилита ftpasswd, при помощи которой легко генерируются записи:

ftpasswd --passwd --name {username} --file /etc/ftpd.passwd --uid {UID} --gid {GID} --home {HOME} --shell /bin/false