Автор Тема: Автоматизация настройки SAMBA  (Прочитано 3269 раз)

Оффлайн rits

  • Участник
  • *
  • Сообщений: 1 233
  • ITS
Предлагаю попробовать скрипт настройки пользователей и пользовательских каталогов для 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

« Последнее редактирование: 12.11.2020 14:59:56 от rabochyITs »

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
Re: Автоматизация настройки SAMBA
« Ответ #1 : 12.11.2020 10:29:33 »
Спасибо, полезный скрипт.  :-)

Оффлайн rits

  • Участник
  • *
  • Сообщений: 1 233
  • ITS
Re: Автоматизация настройки SAMBA
« Ответ #2 : 13.11.2020 13:46:12 »
После того, как созданы пользователи и каталоги, можно сгруппировать пользователей по группам и создать общие папки назначив  на них групповые права.  Оказалось не так просто раскидать (перенести пользователей) взятых из одной системы в другую.
Выдернул сотню пользователей из сервера Windows  разбросанных по разным группам в файл csv в формате  ГРУППА|ПОЛЬЗОВАТЕЛЬ.
Теперь можно залить в систему Linux группы с пользователями в них:

#!/bin/bash

# Список csv, где два поля
# ГРУППА|ПОЛЬЗОВАТЕЛЬ
LIST="/mnt/shared/temp/GroupUsers.csv"

# Разделитель полей в списке
DELIM="|"

# Разделитель полей для цикла for
IFS=$'\n'

for GROUP in $(cut -d $DELIM -f 1,2 --output-delimiter="|" "$LIST")
do

# Выделить из переменной поля разделенные "|"
# Команда tr -d [:cntrl:] позволяет удалить управляющие символы из переменной
# Иногда при экспорте в csv могут попадать управляющие символы и usermod сыплет ошибки
GRP1=`echo ${GROUP,,} | tr -d [:cntrl:] | cut -d "|" -f 1`
USR1=`echo ${GROUP,,} | tr -d [:cntrl:] | cut -d "|" -f 2`

#echo -e "$GRP1 | $USR1"

# Добавить группу и пользователя в группу
groupadd -f $GRP1
usermod --append --groups ${GRP1,,} ${USR1,,}

done