Назад | Перейти на главную страницу

Как заставить Samba создать каталог

Мне нужна помощь с Samba конфигурация.

Я хочу достичь конфигурации, в которой пользователь Windows на общем ресурсе видит только свои файлы. Это просто достигается с помощью такой конфигурации:

Пользователи авторизованы Windows AD Server

[BACKUP]
  comment = BACKUP STORAGE LOCATION
  path = /storage/BACKUP
  read only = no
  browseable = yes
  writable = yes
  create mode = 0600
  directory mode = 0700
  force directory mode = 0700
  force create mode = 0600
  access based share enum = yes
  hide unreadable = yes
  valid users = "@DOMAINNAME+SOMEUSERGROUP"

Работает нормально, но ... На стороне сервера все в каталоге /storage/BACKUP хранит файлы каждого пользователя.

Поэтому я хотел бы создать здесь каталог для каждого пользователя (я не могу использовать [home], потому что он уже используется)

Итак, я хотел бы сохранить это так:

/storage/BACKUP/username/

Поэтому, когда я меняю путь и добавляю %U в итоге все почти ок.

Проблема в том, что мне нужно вручную создать каталог /storage/BACKUP/username.

Так что мне нужно как-то сила Samba чтобы создать этот каталог до того, как пользователь получит доступ к этому общему ресурсу.

Я пробовал добавить add user script = /path/to/mkdir /storage/BACKUP/%U Но это не работает, потому что:

  1. Не знаю почему;)
  2. У меня уже были пользователи, входящие в систему раньше
  3. Он должен запускаться для новых созданных пользователей, для меня это будет нормально, но не работает.

Я не создаю пользователей в Linux после их входа в систему, поэтому я не использую скрипт добавления пользователя / машины где-либо еще.

Так что я хочу заставить Samba для создания каталога для пользователя, когда этот пользователь пытается подключиться. Я ищу в Google пару часов и не нашел способ сделать это, что подойдет мне.

Мне нужно сохранить местоположение / server / BACKUP для всех, но на стороне сервера необходимо хранить файлы в отдельных каталогах для каждого пользователя, поэтому создание нового общего ресурса также не является решением.

Вы можете использовать preexec или root preexec варианты для этого. Они указывают сценарий, который запускается при подключении к общему ресурсу. В случае preexec общий ресурс запускается как подключающийся пользователь и как root с root preexec.

В вашей доле:

[BACKUP]
root preexec = /etc/samba/gendir.sh %u

где /etc/samba/gendir.sh выглядит примерно так:

#!/bin/bash 
DIRECTORY=/storage/BACKUP/$1
if [ ! -d "$DIRECTORY" ]; then
   mkdir $DIRECTORY
fi

В зависимости от ваших требований добавьте chown и / или chmod заявления к сценарию.