Advertisement
D0cEvil

Bash - User account creation for border FTP server

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