#!/bin/bash p=`pwd` function proverka_ustanovlennogo_PO { samba=`rpm -qa | grep samba | head -1 | awk -F '-' '{print $1}'` } versiaos=`cat /etc/redhat-release | awk -F 'release' '{print $2}' | awk -F '.' '{print $1}'` IP=`ip a| grep inet| grep global | awk -F '/' '{print $1}' | awk '{print $2}'` if [[ "$veriaos" == ' 6' ]]; then versiaOS=centos6 fi if [[ "$veriaos" == ' 7' ]]; then versiaOS=centos7 fi function ustanovka_samba { proverka_ustanovlennogo_PO if [[ "$samba" != 'samba' ]]; then yum -y install samba samba-common cups-libs samba-client if [[ "$versiaos" == "centos6" ]]; then chkconfig smb on chkconfig nmb on service nmb start service smb start fi if [[ "$versiaos" == "centos7" ]]; then systemctl enable smb systemctl enable nmb service nmb start service smb start fi mv /etc/samba/smb.conf /etc/samba/smb.conf.Backup echo "[global] workgroup = WORKGROUP server string = Samba Server %v netbios name = `hostname` security = user map to guest = bad user dns proxy = no unix password sync = yes socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192 SO_SNDBUF=8192 local master = yes preferred master = yes log file = /var/log/samba/log.%m max log size = 50 wins enable=yes local master = yes domain master = yes ntlm auth = yes " > /etc/samba/smb.conf echo "" echo "Укажи имя рабочей группы для всего сервера" read otv_samba_raboch_gruppa sed -i "s|.*workgroup.*|workgroup = ${otv_samba_raboch_gruppa}|" /etc/samba/smb.conf fi } function dobavlenie_direktorij_k_samba { ustanovka_samba echo "_____________________________________________" echo "Директория должна быть запороленная или шара?" echo "1 = Запороленная" echo "2 = Шара" read otv_samba_parol echo "" echo "Список имеющихся директорий:" cat /etc/samba/smb.conf | grep path | awk -F '=' '{print $2}' | sed 's/^[ \t]*//' echo "" echo "_____________________________________________" echo "Укажи полный путь до директории" read otv_samba_dir if ! [ -d $otv_samba_dir ]; then mkdir -p $otv_samba_dir fi if [[ "$otv_samba_dir" == "$(cat /etc/samba/smb.conf | grep path | awk -F '=' '{print $2}' | sed 's/^[ \t]*//' | grep $otv_samba_dir)" ]] ; then echo "такая директория уже существует, работа скрипта завершается, перезапустите его" exit 1; fi echo "" echo "_____________________________________________" echo "Укажи имя которое будет отображаться в сетевом окружении" read otv_imya_setev_okruz echo "" if [[ "$otv_samba_parol" == "1" ]]; then echo "_____________________________________________" echo "Укажи группу от которой будет доступ к директории "$otv_samba_dir"" read otv_samba_gruppa echo "" echo "_____________________________________________" echo "Укажи пользователя у которого будет доступ к директории "$otv_samba_dir"" read otv_samba_user proverka_usera=`awk -F ":" '{print $1}' /etc/passwd | grep "^$otv_samba_user$"` if [[ "$proverka_usera" != "$otv_samba_user" ]]; then adduser $otv_samba_user fi proverka_gruppi=`awk -F ":" '{print $1}' /etc/group | grep "^$otv_samba_gruppa$"` if [[ "$proverka_gruppi" != "$otv_samba_gruppa" ]]; then groupadd $otv_samba_gruppa fi usermod -G $otv_samba_gruppa $otv_samba_user echo "_____________________________________________" echo "Создадим пароль для входа в директорию "$otv_samba_dir"" echo "для пользователя "$otv_samba_user"" echo "" smbpasswd -a $otv_samba_user smbpasswd -e $otv_samba_user fi if [[ "$otv_samba_parol" == "1" ]]; then echo " [$otv_imya_setev_okruz] comment = Only password access path = $otv_samba_dir valid users = @$otv_samba_gruppa browsable = yes writable = yes guest ok = no create mode = 0755 directory mask = 0755 " >> /etc/samba/smb.conf fi if [[ "$otv_samba_parol" == "2" ]]; then echo " [$otv_imya_setev_okruz] comment = Everybody has access path = $otv_samba_dir browsable = yes writable = yes guest ok = yes create mode = 0755 directory mask = 0755 " >> /etc/samba/smb.conf fi if [[ "$otv_samba_parol" == "1" ]]; then chown -R $otv_samba_user:$otv_samba_gruppa $otv_samba_dir chmod -R 775 $otv_samba_dir echo "_____________________________________________" echo "Зайти в запароленную директорию вы можете через проводник следующим образом:" echo "\\\\"$IP"\\"$otv_imya_setev_okruz"" echo "" echo "В качестве логина укажите:" workgrp=`grep workgroup /etc/samba/smb.conf | awk -F "=" '{print $2}' | sed 's/^[ \t]*//'` echo "$workgrp\\$otv_samba_user" echo "" service nmb restart service smb restart fi if [[ "$otv_samba_parol" == "2" ]]; then chown -R nobody:nobody $otv_samba_dir chmod -R 777 $otv_samba_dir echo "_____________________________________________" echo "Зайти на шару вы можете через проводник \\\\"$IP"\\"$otv_imya_setev_okruz"" echo "" service nmb restart service smb restart fi } function dobavlenie_polzovatelej_k_zaporolennoj_direktorii { imya_setev_okruz=`cat /etc/samba/smb.conf | grep workgroup | awk -F '=' '{print $2}' | sed 's/^[ \t]*//'` echo "" echo "_____________________________________________" echo "Для какой директории вы хотите добавить нового пользователя с паролем:" cat /etc/samba/smb.conf | grep -a2 'Only password access' |grep -E '\[|path|valid users' > $p/vse_zaparollennie_dorecktorii cat $p/vse_zaparollennie_dorecktorii | grep path |awk -F '=' '{print $2}' | sed 's/^[ \t]*//' echo "" read dir_parol echo "" gpr=`cat $p/vse_zaparollennie_dorecktorii | grep -A1 "$dir_parol" | grep 'valid users' | awk -F '@' '{print $2}'` echo "Общая группа для директории "$gpr" к ней уже добавлены следующие пользователи:" cat /etc/group | grep $gpr | awk -F ':' '{print $4}' echo "" echo "_____________________________________________" echo "Укажи дополнительного пользователя для директории $dir_parol" echo "" read dop_user proverka_usera=`awk -F ":" '{print $1}' /etc/passwd | grep "^$dop_user$"` if [[ "$proverka_usera" != "$dop_user" ]]; then adduser $dop_user fi usermod -G $gpr $dop_user echo "" echo "_____________________________________________" echo "Установим для пользователя $dop_user пароль:" echo "" smbpasswd -a $dop_user smbpasswd -e $dop_user echo "" echo "_____________________________________________" echo "Зайти в запароленную директорию вы можете через проводник следующим образом:" echo "\\\\"$IP"\\"$imya_setev_okruz"" echo "" echo "В качестве логина укажите:" echo "$imya_setev_okruz\\$dop_user" rm -rf $p/vse_zaparollennie_dorecktorii echo "" service nmb restart service smb restart } function udalenie_direktorii { echo "Какую директорию необходимо удалить из доступа:" cat /etc/samba/smb.conf | grep path | awk -F '=' '{print $2}' | sed 's/^[ \t]*//' echo "" read dir_udal echo "" nomer_dir_udal_nachalo=`cat -n /etc/samba/smb.conf | grep -B2 "$dir_udal$" | grep '\[' | awk '{print $1}'` nomer_dir_udal_konec=`cat -n /etc/samba/smb.conf | grep -A8 "$dir_udal$" | grep 'directory mask' | awk -F '=' '{print $1}' | awk '{print $1}'` sed -i "${nomer_dir_udal_nachalo},${nomer_dir_udal_konec}d" /etc/samba/smb.conf service nmb restart service smb restart } function udalenie_polzovatelya_iz_zaporollenoj_directorii { echo "Для какой директории вы хотите удалить пользователя с паролем:" cat /etc/samba/smb.conf | grep -a2 'Only password access' |grep -E '\[|path|valid users' > $p/vse_zaparollennie_dorecktorii cat $p/vse_zaparollennie_dorecktorii | grep path |awk -F '=' '{print $2}' | sed 's/^[ \t]*//' echo "" read dir_parol echo "" gpr=`cat $p/vse_zaparollennie_dorecktorii | grep -A1 "$dir_parol" | grep 'valid users' | awk -F '@' '{print $2}'` echo "Общая группа для директории "$gpr" к ней уже добавлены следующие пользователи:" cat /etc/group | grep $gpr | awk -F ':' '{print $4}' echo "" echo "_____________________________________________" echo "Укажи пользователя которого необходимо удалить для директории $dir_parol" echo "" read dop_user gpasswd -d $dop_user $gpr smbpasswd -d $dop_user smbpasswd -x $dop_user service nmb restart service smb restart rm -rf $p/vse_zaparollennie_dorecktorii } function pokaz_kakie_directorii_zaporoleni_kakie_net { echo "" echo "_____________________________________________" echo "Запороленные директории:" echo "" cat /etc/samba/smb.conf | grep -a2 'Only password access' |grep -E '\[|path|valid users' | grep path |awk -F '=' '{print $2}' | sed 's/^[ \t]*//' echo "" echo "_____________________________________________" echo "Расшаренные директории:" echo "" cat /etc/samba/smb.conf | grep -a1 'Everybody has access' |grep -E '\[|path' | grep path |awk -F '=' '{print $2}' | sed 's/^[ \t]*//' } echo "Что необходимо сделать:" echo "1 = Добавить директорию" echo "2 = Удалить директорию" echo "3 = Добавить нового пользователя к запароленной директории" echo "4 = Удалить пользователя у запароленной директории" echo "5 = Показать запароленные директории и шары" echo "6 = Выход" read otv_dejstv case $otv_dejstv in 1) ustanovka_samba dobavlenie_direktorij_k_samba ;; 2) udalenie_direktorii ;; 3) dobavlenie_polzovatelej_k_zaporolennoj_direktorii ;; 4) udalenie_polzovatelya_iz_zaporollenoj_directorii ;; 5) pokaz_kakie_directorii_zaporoleni_kakie_net ;; 6|*) echo "" ;; esac