Advertisement
D0cEvil

Bash - User account creation for border FTP server

Jan 4th, 2023
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 9.72 KB | Cybersecurity | 0 0
  1. #!/bin/bash
  2.  
  3. ########## Создание нового пользователя ##########
  4.  
  5. ###### Основные переменные ######
  6.  
  7. # c - Комментарий
  8. # n - Имя пользователя
  9. # PASS - Пароль
  10. # q - Количество подключений пользователя
  11. # e -Адрес электронной почты, куда отправлять логин/пасс
  12.  
  13. homedir='/var/data'     # Корневой каталог FTP-сервера
  14. logdir='/var/log/usergen'   # Каталог, в котором будут храниться протоколы работы скрипта
  15. g='ftpusers'            # g - Основная группа
  16. s='/usr/sbin/nologin'       # s - Шелл пользователя. По умолчанию /usr/sbin/nologin
  17. basedir='/root/ftp'     # Каталог с базой пользователей
  18. basename='users'
  19. basenamec='users.cpt'
  20.  
  21.  
  22. ###### Проверка наличия директорий и файлов ######
  23.  
  24. # Проверка наличлия корневой директории FTP-сервера
  25.  
  26. if ! [ -d /var/data ]; then
  27.     echo 'No ftp-root directory!'
  28. fi
  29.  
  30. # Проверка наличия директории лог-файлов
  31.  
  32. #if ! [ -d /var/log/usergen ]; then
  33. #   echo 'No log directory!'
  34. #fi
  35.  
  36. ##### Ввод пользовательских данных ######
  37.  
  38. ##### Текстовое меню #####
  39.  
  40. clear
  41. echo "Создать пользователя для внутреннего использования?"
  42. echo "Y/n"
  43. read f1
  44.  
  45. #### Проверка ввода ###
  46.  
  47. if [ -z f1 ];
  48. then
  49. clear
  50. echo
  51. echo "### ОШИБКА!!! ###"
  52. echo
  53. echo "Пустой ввод!"
  54. echo
  55. exit 1
  56. fi
  57. if [ "`echo $n | sed 's/[y,n]*//'`" = "" ];
  58. then
  59. echo
  60. echo "Ok, продолжаем!"
  61. else
  62. clear
  63. echo
  64. echo "### ОШИБКА!!! ###"
  65. echo
  66. echo "введите или y или n !"
  67. exit 1
  68. fi
  69.  
  70. if [ $f1 == y ]; ## Начало ветвления "Внутренний пользователь"
  71. then
  72.  
  73.     echo 'Введите имя пользователя'
  74.     read n
  75.  
  76.     ## Проверка корректности ввода ##
  77.     ## Пустой ввод
  78.  
  79.     if [ -z $n ];
  80.     then
  81.         clear
  82.         echo
  83.         echo "### ОШИБКА!!! ###"
  84.         echo
  85.         echo "Не введен логин пользователя"
  86.         echo
  87.         exit 1
  88.     fi
  89.  
  90.     ## Допустимые символы ##
  91.  
  92.     if [ "`echo $n | sed 's/[a-z,0-9,_,-]*//'`" = "" ];
  93.     then
  94.         echo
  95.         echo "Ok, продолжаем!"
  96.     else
  97.         clear
  98.         echo
  99.         echo "### ОШИБКА!!! ###"
  100.         echo
  101.         echo "Введите корректный логин пользователя!"
  102.         exit 1
  103.     fi
  104.  
  105.     ###### Проверка существования пользователя ######
  106.  
  107.     grep "$n:" /etc/passwd # >/dev/null
  108.     if [ $? -ne 1 ];
  109.     then
  110.         echo 'User exist!'
  111.         exit 1
  112.     fi
  113.     echo 'ВНИМАНИЕ! Пользователь будет добавлен в группу ftpusers'
  114.     echo 'Shell по умолчанию /usr/sbin/nologin'
  115.     echo 'Введите описание пользователя'
  116.     read c
  117.  
  118.     # Генерируется пароль
  119.  
  120.     echo "Генерация пароля..."
  121.  
  122.     PASS=`pwgen -n1 -A`
  123.  
  124.     ######## Создание пользователя #########
  125.  
  126.     # -b - базовый каталог. В нем будет создан каталог пользователя
  127.     # -g - основная группа. Для пользователей FTP основной группой явзялется ftpusers
  128.     # -G - Дополнительные группы
  129.     # -m - Создать каталог пользователя
  130.     # -s - оболочка пользователя
  131.     # -N - Не  создавать группу с таким же именем, что и у пользователя
  132.  
  133.     useradd -b $homedir -c "$c" -g $g -G users -m -N -s $s $n
  134.  
  135.     #Изменение пароля пользователя
  136.  
  137.     echo "$n:$PASS"| chpasswd
  138.  
  139.     #Установка корректных прав на каталог
  140.  
  141.     chown root.ftpusers $homedir/$n
  142.     chmod g+w $homedir/$n
  143.  
  144.     #Удаление скрытых файлов
  145.  
  146.     rm -rf $homedir/$n/.*
  147.     clear
  148.     echo
  149.     echo "Создан пользователь $n с паролем $PASS Комментарий: $c"
  150.     echo
  151. exit 0
  152.  
  153. fi ## Конец ветвления "Внутренний пользователь"
  154.  
  155. #### Расшифровываем базу пользователей
  156.  
  157. echo 'Снимите защиту базы пользователей'
  158. echo 'Введите пароль'
  159.  
  160. read pass1
  161.  
  162. ccrypt -d -K "$pass1" $basedir/$basenamec
  163. if [ ! -e $basedir/$basename ];
  164. then
  165.     echo 'Защита базы данных не снята!'
  166.     exit 1
  167. fi
  168.  
  169. echo 'Введите имя пользователя'
  170. read n
  171.  
  172. ## Проверка корректности ввода ##
  173.  
  174. ## Пустой ввод
  175.  
  176. if [ -z $n ]; then
  177. clear
  178. echo
  179. echo "### ОШИБКА!!! ###"
  180. echo
  181. echo "Не введен логин пользователя"
  182. echo
  183. exit 1
  184. fi
  185.  
  186. ## Допустимые символы ##
  187.  
  188. if [ "`echo $n | sed 's/[a-z,0-9,_,-]*//'`" = "" ]; then
  189. echo
  190. echo "Ok, продолжаем!"
  191. else
  192. clear
  193. echo
  194. echo "### ОШИБКА!!! ###"
  195. echo
  196. echo "Введите корректный логин пользователя!"
  197. exit 1
  198. fi
  199.  
  200. ###### Проверка существования пользователя ######
  201.  
  202. grep "$n:" /etc/passwd # >/dev/null
  203. if [ $? -ne 1 ]; then
  204. echo 'User exist!'
  205. exit 0
  206. fi
  207. echo 'ВНИМАНИЕ! Пользователь будет добавлен в группу ftpusers'
  208. echo 'Shell по умолчанию /usr/sbin/nologin'
  209. echo 'Введите описание пользователя'
  210. read c
  211. echo 'Количество подключений'
  212. read q
  213.  
  214. ## Проверка корректности ввода ##
  215.  
  216. ## Пустой ввод
  217.  
  218. if [ -z $q ]; then
  219. clear
  220. echo
  221. echo "### ОШИБКА!!! ###"
  222. echo
  223. echo "Значение не введено!"
  224. echo
  225. exit 1
  226. fi
  227.  
  228. ## Допустимые символы ##
  229.  
  230. if [ "`echo $q | sed 's/[0-9]*//'`" = "" ]; then
  231. echo
  232. echo "Ok, продолжаем!"
  233. else
  234. clear
  235. echo
  236. echo "### ОШИБКА!!! ###"
  237. echo
  238. echo "Некорректный ввод!"
  239. exit 1
  240. fi
  241.  
  242. echo 'Адерс электронной почты Организации'
  243. read e
  244.  
  245. ## Проверка корректности ввода ##
  246.  
  247. ## Пустой ввод
  248.  
  249. if [ -z $e ]; then
  250. clear
  251. echo
  252. echo "### ОШИБКА!!! ###"
  253. echo
  254. echo "Адрес электронной почты не введен!"
  255. echo
  256. exit 1
  257. fi
  258.  
  259. ## Допустимые символы ##
  260.  
  261. if [ "`echo $LOGIN | sed 's/[a-z,0-9,_,-,@,.]*//'`" = "" ]; then
  262. echo
  263. echo "Ok, продолжаем!"
  264. else
  265. clear
  266. echo
  267. echo "### ОШИБКА!!! ###"
  268. echo
  269. echo "Введите корректный адрес!"
  270. exit 1
  271. fi
  272.  
  273. clear
  274. echo "Использовать блокировку учетной записи по сроку давности?"
  275. echo "Y/n"
  276. read f2
  277.  
  278. #### Проверка ввода ###
  279.  
  280. if [ -z f2 ];
  281. then
  282. clear
  283. echo
  284. echo "### ОШИБКА!!! ###"
  285. echo
  286. echo "Пустой ввод!"
  287. echo
  288. exit 1
  289. fi
  290. if [ "`echo $f2 | sed 's/[y,n]*//'`" = "" ];
  291. then
  292. echo
  293. echo "Ok, продолжаем!"
  294. else
  295. clear
  296. echo
  297. echo "### ОШИБКА!!! ###"
  298. echo
  299. echo "введите или y или n !"
  300. echo "Пользователь НЕ СОЗДАН!"
  301. exit 1
  302. fi
  303.  
  304. if [ $f2 == y ];
  305. then
  306. echo "Введите дату истечения срока действия пароля $n"
  307. echo "в формате ДД/ММ/ГГГГ"
  308.  
  309. read datb
  310.  
  311. else
  312. datb="00/00/0000"
  313. fi
  314.  
  315. # Генерируется пароль
  316.  
  317. echo "Генерация пароля..."
  318.  
  319. PASS=`pwgen -n1 -A`
  320.  
  321. ######## Создание пользователя #########
  322.  
  323. # -b - базовый каталог. В нем будет создан каталог пользователя
  324. # -g - основная группа. Для пользователей FTP основной группой явзялется ftpusers
  325. # -G - Дополнительные группы
  326. # -m - Создать каталог пользователя
  327. # -s - оболочка пользователя
  328. # -N - Не  создавать группу с таким же именем, что и у пользователя
  329.  
  330. useradd -b $homedir -c "$c" -g $g -G users -m -N -s $s $n
  331.  
  332. #Изменение пароля пользователя
  333.  
  334. echo "$n:$PASS"| chpasswd
  335.  
  336. #Установка даты истечения срока действия аккаунта, если она была задана. Проверка переменной f2
  337.  
  338. echo $f2
  339. echo $datab
  340. echo $n
  341.  
  342. if [ $f2 == y ];
  343. then
  344.     chage -E "$datb" $n
  345. fi
  346.  
  347. #Установка корректных прав на каталог
  348.  
  349. chown root.ftpusers $homedir/$n
  350. chmod g+w $homedir/$n
  351.  
  352. #Удаление скрытых файлов
  353.  
  354. rm -rf $homedir/$n/.*
  355.  
  356. #Запись в базу
  357.  
  358. tme=`date +%H:%M:%S`
  359. dte=`date +%d.%m.%Y`
  360.  
  361. echo "$n $PASS $q $e $tme $dte blocked $datb comment: $c " >> $basedir/$basename
  362.  
  363. #### Защита базы пользователей
  364.  
  365. echo 'Шифрование базы данных...'
  366.  
  367. if [ -e $basedir/$basenamec ];
  368. then
  369.     echo "ВНИМАНИЕ! База уже зашифрована!"
  370.     echo "Выход..."
  371.     exit 1
  372. fi
  373.  
  374. ccrypt -e -K "$pass1" $basedir/$basename
  375. if [ ! -e $basedir/$basenamec ];
  376. then
  377.         echo 'ВНИМАНИЕ! База не зашифрована!'
  378.         exit 1
  379. fi
  380.  
  381. #### Отправка пароля на почту
  382.  
  383. #Отправка по заявленному адресу
  384.  
  385. #mail -s "STORAGE: User created" $e < "Password: $PASS"
  386.  
  387. #Отрпавка на мыло мне
  388.  
  389. #mail -s "STORAGE: User created" $admaddr < "Password: $PASS"
  390.  
  391. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement