Предлагаю попробовать скрипт настройки пользователей и пользовательских каталогов для SAMBA сервера.
Проверял на пяти пользователях, но думаю и на сотне потянет.
Задача простая, из списка пользователей в csv формате ОТДЕЛ|ЛОГИН|ОРГАНИЗАЦИЯ|ПАРОЛЬ|ОПИСАНИЕ:
-создать системных пользователей;
-создать smb пользователей;
-создать структуру каталогов по принципу /mnt/Документы/Отдел/Папка_с_файлами_по_имени_логина;
-назначить права на структуру каталогов;
Цель:
-в локальной сети поднять samba сервер (громко сказано )) ) ;
-пользователи windows должны иметь доступ к файлам без авторизации, если логин и пароль на системах сервера-клиента совпадают;
-linux пользователи вводят логин и пароль или настраивают autofs;
-каждый пользователь имеет доступ только в свой каталог;
#!/bin/bash
# Имя netbios name в файле
NBNAME="altnas"
# Список csv, где первые два поля отдел и логин, а четвертое пароль
# ОТДЕЛ|ЛОГИН|ОРГАНИЗАЦИЯ|ПАРОЛЬ|ОПИСАНИЕ
LIST="/mnt/shared/temp/usersmb.csv"
# Разделитель полей в списке
DELIM="|"
# Разделитель полей для цикла for
IFS=$'\n'
# Путь к каталогу в котором создать структуру каталога в виде ОТДЕЛ/ЛОГИН
DIRS="/mnt/Documents"
for LOGINPW in $(cut -d $DELIM -f 1,2,4 --output-delimiter="|" "$LIST")
do
# Выделить из переменной поля разделенные "|"
OTDEL=`echo "$LOGINPW" | cut -d "|" -f 1`
LOGIN=`echo "$LOGINPW" | cut -d "|" -f 2`
PASSW=`echo "$LOGINPW" | cut -d "|" -f 3`
# Добавить пользователя без домашнего каталога
# и присвоить пароль. Шаблон ${user,,} - нижний регистр
adduser -M ${LOGIN,,} && echo "${LOGIN,,}:$PASSW" | chpasswd
# Добавить системного пользователя в базу smb пользователей. Шаблон ${user,,} - нижний регистр
HOMEDIR="\\\\$NBNAME\\$OTDEL\\$LOGIN"
PROFILEDIR="\\\\$NBNAME\\$OTDEL\\$LOGIN\\profile"
(echo $PASSW; echo $PASSW) | pdbedit -a ${LOGIN,,} -h $HOMEDIR -p $PROFILEDIR
done
# Создать структуру каталогов
# создать корневой каталог общей папки самбы и назначить права
mkdir -p $DIRS && chmod 755 $DIRS
for PATHDIR in $(cut -d $DELIM -f 1,2 --output-delimiter="/" "$LIST")
do
mkdir -p "$DIRS/$PATHDIR"
# Выделить из переменной поля разделенные "/"
LOGIN=`echo "$PATHDIR" | cut -d "/" -f 2`
# Применить права к каталогу
chown ${LOGIN,,}:${LOGIN,,} "$DIRS/$PATHDIR" && chmod 750 "$DIRS/$PATHDIR"
# Создать список валидных пользователей для добавления в smb.conf
VALIDUSER="$VALIDUSER ${LOGIN,,}"
done
# Если пользователей много, можно создать список валидных
# пользователей, закоментировать и поместить в файл конфигурации самбы
VALIDUSER="#valid users = $VALIDUSER"
#echo $VALIDUSER >> /etc/samba/smb.conf
Место расположение файла со списком пользовательских данных LIST="/mnt/shared/temp/usersmb.csv"
ОТДЕЛ|ЛОГИН|ОРГАНИЗАЦИЯ|ПАРОЛЬ|ОПИСАНИЕ
Описание не задействовал, чтобы не усложнять скрипт.
# cat /mnt/shared/temp/usersmb.csv
Агрономы|user1|OOO "1"|5cvb94|OOO "1"; АГРО; гл. агроном;
Агрономы|user2|OOO "1"|9rty19|OOO "1"; АГРО; агроном по защите растений;
Агрономы|user3|OOO "1"|ww7388|OOO "1"; АГРО; агроном;
Агрономы|user4|OOO "1"|5ty549|OOO "1"; АГРО; агроном;
Агрономы|user5|OOO "1"|4sss45|OOO "1"; АГРО; агроном;
Файл конфигурации smb сервера:
# cat /etc/samba/smb.conf
[global]
workgroup = WORK
netbios name = altnas
printing = CUPS
printcap name = CUPS
show add printer wizard = No
wins support = yes
[Documents]
comment = Documents
path = /mnt/Documents
valid users = user1 user2 user3 user4 user5
read only = No
browseable = yes
create mask = 0660
directory mask = 0770
Скрипт запускается под root (su -l).
Регистр букв логина не влияет на авторизацию пользователей windows (User1=user1) (Возможно от настроек зависит)
опробовано на startkit sysv-server p9 c до установленной LXDE оболочкой.
# service smb start