апреля 4 2009 01:26 дп

Скрипт для управления пользователями VSFTPD

WoBD-Terminal_256x256.png

Один из читателей моего блога любезно предоставил свой скрипт для работы с пользователями фтп сервера VSFTPD настроенного на работу с базой данных MYSQL для хранения логинов и паролей пользователей. Прочитать статью об установке и настройке фтп сервера VSFTPD вы можете по ссылке http://sudouser.com/ustanovka-i-nastrojka-vsftpd-mysql-ubuntu-debian. Скрипт позволяет создавать, изменять, удалять пользователей (с созданием резервной копии домашней директории), работать с их домашними каталогами, менять пароли, просматривать всех пользователей. Скрипт полностью настраиваеся под ваши нужды, а именно имя базы, корневая директория для каталогов пользователей, минимальная длинна паролей, и тд. Посмотреть и скачать скрипт вы сможете в продолжении поста.

Ниже представлен код скрипта, в конце поста ссылка на скачивание архива с ним. По вопросам связанным со скриптом вы можете написать его автору на электрическую почту, найти ее вы сможете в коде скрипта в самом начале, зовут автора Александр Астапов.

Код:


#!/bin/bash
#Скрипт управляет виртуальными пользователями vsftpd
#По вопросам, предложениям и замечаниям по данному скрипту пишите по адресу: 0--0@list.ru

ftp_login= #Логин пользователя базы данных vsftpd
mysqlbase=vsftpd #Имя базы данных vsftpd
ftp_path="/srv/vsftpd/" #Путь к директориям пользователей vsftpd
ftp_backup_dir="/srv/vsftpd_back/" #Путь к резервной копии директорий пользователей
ftp_group= #Группа vsftpd
passdigit=6 #Минимальная длинна пароля пользователя в символах

function input_correct_pass { #Функция проверяет корректность пароля сервера vsftpd
corr=1
while [ "$corr" -ne 0 ];
do
echo "Введите пароль пользователя базы ftp"
read -s ftp_pass
mysql -u $ftp_login --password=$ftp_pass -e exit &> /dev/null
corr=$?
if [ "$corr" -ne 0 ]; then
clear
echo "Вы ввели неправильный пароль!"
echo
fi

done
}

function cor_usr_pass { #Функция проверяет корректность пароля пользователя
numb=${#usr_pass}
while [ -z "$usr_pass" ] || [ "$numb" -lt "$passdigit" ]
do
if [ -z "$usr_pass" ]; then
echo  "Пароль нулевой длинны не допустим"
elif [ "$numb" -lt "$passdigit" ]; then
echo "Длинна пароля должна быть не менее $passdigit символов"
fi
echo "Введите другой пароль"
read -s  usr_pass
numb=${#usr_pass}
done
}

function usr_add { # Функция добавляет нового пользователя в базу vsftpd и создает рабочую директорию
clear
read -p "Введите логин нового пользователя ftp: " ftp_usr
# Данный участок кода проверяет корректность вводимых данных========================================================================================
ctrl_login=`mysql -e "SELECT username FROM accounts WHERE username='$ftp_usr';" -u $ftp_login --password=$ftp_pass -D $mysqlbase`
ctrl_login=${ctrl_login:9}
while [ -z "$ftp_usr" ] || [ "$ctrl_login" == "$ftp_usr" ]
do
if [ -z "$ftp_usr" ]; then
echo "логин не может быть пустым"
elif [ "$ctrl_login" == "$ftp_usr" ]; then
echo "Пользователь существует"
fi
read -p "Введите логин заново: " ftp_usr
ctrl_login=`mysql -e "SELECT username FROM accounts WHERE username='$ftp_usr';" -u $ftp_login --password=$ftp_pass -D $mysqlbase`
ctrl_login=${ctrl_login:9}
done
#====================================================================================================================================================
echo "Введите пароль для нового пользователя ftp:"
read -s usr_pass
cor_usr_pass
mysql -e "INSERT INTO accounts (username, pass) VALUES('$ftp_usr', PASSWORD('$usr_pass'));" -u $ftp_login --password=$ftp_pass -D $mysqlbase&&
mkdir $ftp_path$ftp_usr&&
chown $ftp_login:$ftp_group $ftp_path$ftp_usr&&
chmod 770 $ftp_path$ftp_usr

if [ "$?" -eq 0 ]; then
clear
echo "Пользователь $ftp_usr добавлен успешно"
else
echo "Ошибка добавления пользователя $ftp_usr"
fi

}

function change_pass { #Функция меняет пароль пользователя
read -p "для какого пользователя менять пароль: " ftp_usr
ctrl_login=`mysql -e "SELECT username FROM accounts WHERE username='$ftp_usr';" -u $ftp_login --password=$ftp_pass -D $mysqlbase`
ctrl_login=${ctrl_login:9}
while [ -z "$ftp_usr" ] || [ "$ctrl_login" != "$ftp_usr" ]
do
if [ -z "$ftp_usr" ]; then
echo "логин не может быть пустым"
elif [ "$ctrl_login" != "$ftp_usr" ]; then
echo "Пользователь не существует"
fi
read -p "Введите логин заново: " ftp_usr
ctrl_login=`mysql -e "SELECT username FROM accounts WHERE username='$ftp_usr';" -u $ftp_login --password=$ftp_pass -D $mysqlbase`
ctrl_login=${ctrl_login:9}
done
echo "Введите новый пароль для пользователя $ftp_usr"
read -s usr_pass
cor_usr_pass
mysql -e "UPDATE vsftpd . accounts SET pass=PASSWORD('$usr_pass') WHERE (accounts . username='$ftp_usr');" -u $ftp_login --password=$ftp_pass -D $mysqlbase
if [ "$?" -eq 0 ]; then
clear
echo "Пароль пользователя $ftp_usr успешно изменен"
else
echo "Ошибка изменения пароля для пользователя $ftp_usr"
fi
}

function del_usr { #Функция удаляет существуюсего пользователя, его директорию и делает резервную копию
read -p "Введите логин удаляемого пользователя: " ftp_usr
ctrl_login=`mysql -e "SELECT username FROM accounts WHERE username='$ftp_usr';" -u $ftp_login --password=$ftp_pass -D $mysqlbase`
ctrl_login=${ctrl_login:9}
while [ -z "$ftp_usr" ] || [ "$ctrl_login" != "$ftp_usr" ]
do
if [ -z "$ftp_usr" ]; then
echo "логин не может быть пустым"
elif [ "$ctrl_login" != "$ftp_usr" ]; then
echo "Пользователь не существует"
fi
read -p "Введите логин заново: " ftp_usr
ctrl_login=`mysql -e "SELECT username FROM accounts WHERE username='$ftp_usr';" -u $ftp_login --password=$ftp_pass -D $mysqlbase`
ctrl_login=${ctrl_login:9}
done

mysql -e "DELETE FROM accounts WHERE (username='$ftp_usr');" -u $ftp_login --password=$ftp_pass -D $mysqlbase&&
tar -cvf $ftp_path$ftp_usr$(date +%d%m%Y%).tar $ftp_path$ftp_usr&&
rm -r $ftp_path$ftp_usr&&
mv $ftp_path$ftp_usr$(date +%d%m%Y%).tar $ftp_backup_dir
if [ "$?" -eq 0 ]; then
clear
echo "Пользователь $ftp_usr успешно удален"
else
echo "Ошибка удаления пользователя $ftp_usr"
fi
}

function show_all_users { #Функция показывает всех существующих пользователей vsftpd
clear
mysql -e "SELECT username FROM accounts;" -u $ftp_login --password=$ftp_pass -D $mysqlbase
}

input_correct_pass
clear
echo

chpass="Изменить_пароль_пользователя"
new_usr="Создать_нового_пользователя"
rmusr="Удалить_пользователя"
dback="Удалить_резервную_копию_каталогов_пользователей"
show_users="Показать_список_всех_пользователей"
ext="Выход"

select opt in $chpass $new_usr $rmusr $dback $show_users $ext ; do
if [ "$opt" = "Изменить_пароль_пользователя" ]; then
change_pass
elif [ "$opt" = "Создать_нового_пользователя" ]; then
usr_add
elif [ "$opt" = "Удалить_пользователя" ]; then
del_usr
elif [ "$opt" = "Удалить_резервную_копию_каталогов_пользователей" ]; then
clear&&rm -rfv $ftp_backup_dir*
elif [ "$opt" = "Показать_список_всех_пользователей" ]; then
show_all_users
elif [ "$opt" = "Выход" ]; then
clear
exit
else
clear
echo "Допускаются цифры от 1 до 6"
echo "Для возврата в меню нажмите Enter"
fi
done

Скачать скрипт vsftpd_user_control.tar.bz2




27 комментариев »


27 комментариев to “Скрипт для управления пользователями VSFTPD”

  1. stolz on 11 Июн 2009 at 22:06 #

    Объясните ломаке как прикрутить данный скрипт к тому что предложено здесь: http://sudouser.com/ustanovka-i-nastrojka-vsftpd-mysql-ubuntu-debian ?
    и как он запускаестся.
    Буду особенно благодарен за наиболее информативный ответ))

  2. Stepanoff on 11 Июн 2009 at 22:09 #

    В начале скрипта измените пути к домашним директриям, а так же имя базы, пользователя к ней и пароль. Потом просто запустите скрипт, и следуйте подсказкам.

  3. stolz on 11 Июн 2009 at 23:46 #

    спасибо, вроде разобрался. Жалко только маунтить приходится руками нужные директории пользователям (( не знаете средств автоматизации данных процессов? И как некоторым пользователям можно давать права на запись и выход из домашней директории?

  4. Stepanoff on 12 Июн 2009 at 12:06 #

    Директории создаются скриптом, поменяйте путь в нем, что бы создавались где надо, и не надо маунтить будет. Включить запись для юзеров можно добавив в директорию для конфигов юзеров (смотри в посте где она) файл с названием соответствующим логину юзера, туда строку write_enable=YES
    Про выход из домашней директории не помню, почитайте ман к vsftpd.

  5. TrEK on 09 Июл 2009 at 12:38 #

    Все работает.. супер!
    Большое спасибо автору!

  6. TrEK on 09 Июл 2009 at 13:04 #

    Вот только я не разобрался какие права доступа и какого юзера и группу нужно назначить директории /home/vsftpd ?
    Подскажите пожалуйста.

    директория нового юзера создается почему-то с root:root.

  7. TrEK on 09 Июл 2009 at 14:32 #

    И еще меня интересует такое… я так понимаю что для каждого нового юзера, которого я создам с помощью скрипта, директория будет принадлежать тому же юзеру? Можно уточнить этот момент.

    Например я создаю юзера Vasya… создается каталог /home/vsftpd/Vasya который имеет имя владельца это имя входа в БД mysql , а не Vasya.

    Так что суть моего вопроса еще и в том, имя владельца и группы всех каталогов в /home/vsftpd должны быть разными?… или у всех одинаковые?

    Благодарю за разъяснение!

  8. TrEK on 09 Июл 2009 at 17:39 #

    Я создал юзера в системе, такого же как в mysql и задал в Вашем скрипте принадлежность к групе vsftpd — все отлично работает. Большущее спасибо разработчику!!!
    А вот как бы научится ограничивать физическое пространство для каждого новоиспеченного юзверя? И чтоб для каждого из них то пространство можно было изменить….

  9. Stepanoff on 09 Июл 2009 at 22:26 #

    Это уже надо ставить квоты, об этом в статье не написано. Поищите в гугле.
    Права на директории менять руками можно, должно быть владелец vsftpd а группа nogroup, у всех юзеров эти права одинаковые.

  10. WiZ_Ed on 01 мая 2010 at 14:19 #

    Подскажите, где ошибся я, ибо при запуске скрипта выдаёт
    scripts/vsftpd_user_control.sh: 13: function: not found
    Введите пароль пользователя базы ftp
    read: 27: Illegal option -s
    scripts/vsftpd_user_control.sh: 28: Syntax error: «}» unexpected
    eduard@eduard-desktop:~$ ERROR 1045 (28000): Access denied for user ‘vsftpd’@’localhost’ (using password: NO)

  11. Максим Степанов on 01 мая 2010 at 23:03 #

    Подробнее, на какие действия ошибки выдает?

  12. WiZ_Ed on 05 мая 2010 at 10:50 #

    Качаю скрипт, добавляю в начале логин, группу, папку, сохраняю. выполняю

    eduard@eduard-desktop:~$ sudo sh scripts/vsftpd_user_control.sh
    scripts/vsftpd_user_control.sh: 13: function: not found
    Введите пароль пользователя базы ftp
    read: 27: Illegal option -s
    scripts/vsftpd_user_control.sh: 28: Syntax error: «}» unexpected
    eduard@eduard-desktop:~$ ERROR 1045 (28000): Access denied for user ‘vsftpd’@’localhost’ (using password: NO)
    ^C

    выдаёт это сразу я даже ничего не ввожу. если удалить ключ -s и закоментить } в 28 строке, то спрашивает пасс, ввожу, при этом пасс виден, нажимаю ввод и
    read: 42: Illegal option -s
    Пароль нулевой длинны не допустим
    Введите другой пароль
    read: 42: Illegal option -s
    Пароль нулевой длинны не допустим
    Введите другой пароль
    read: 42: Illegal option -s
    Пароль нулевой длинны не допустим
    Введите другой пароль
    и т.д. пока не прервёшь.

  13. Максим Степанов on 05 мая 2010 at 11:49 #

    А это что? ERROR 1045 (28000): Access denied for user ‘vsftpd’@’localhost’ (using password: NO)

  14. military on 12 Окт 2010 at 21:06 #

    Грамотный скрипт.

  15. Установка и настройка VSFTPD + MYSQL (Ubuntu & Debian) | Linux and Open Source on 23 Ноя 2010 at 14:51 #

    […] Для создания и администрирования пользователей вашего фтп сервера вы можете использовать скрипт любезно предоставленный Александром Астаповым, скачать его и почитать о возможностях можно в отдельном посте, http://sudouser.com/skript-dlya-upravleniya-polzovatelyami-vsftpd.html […]

  16. uname-a on 28 Дек 2010 at 13:38 #

    Пробую на Ubuntu Server 10, выдает ошибки!

    -rwxr-хr-х 1 user user 6533 2010-12-28 13:13 vsftpd_script.sh

    user@ubuntu: sudo sh ./vsftpd_script.sh
    : not foundript.sh: 1: #!/bin/bash
    : not foundript.sh: 4:
    : not foundript.sh: 11:
    ./vsftpd_script.sh: 12: function: not found
    ./vsftpd_script.sh: 35: Syntax error: «elif» unexpected (expecting «then»)

    Помогите!

  17. Максим Степанов on 28 Дек 2010 at 13:52 #

    Запускайте скрипт в bash.

  18. uname-a on 28 Дек 2010 at 14:42 #

    root@ubuntu: ls -la vsftpd_script.sh
    -rwхr-хr-х 1 user user 6533 2010-12-28 13:13 vsftpd_script.sh

    root@ubuntu: bash vsftpd_script.sh : No such file or directoryf/bin/bash
    : command not foundine 4:
    : command not foundine 11:
    vsftpd_script.sh: line 35: syntax error near unexpected token ‘elif’
    ‘sftpd_script.sh: line 35: ‘elif [ «$numb» -lt «$passdigit» ]; then

    Блин, почему выдает «No such file or directoryf/bin/bash» если этот файл там есть!?

  19. Максим Степанов on 28 Дек 2010 at 14:46 #

    chmod x vsftpd_script.sh
    ./vsftpd_script.sh

  20. uname-a on 28 Дек 2010 at 14:58 #

    то же самое…..

    user@ubuntu: sudo chmod x vsftpd_script.sh

    user8ubuntu: ls -la vsftpd_script.sh
    -rwхr-хr-х 1 user user 6533 2010-12-28 13:13 vsftpd_script.sh

    user@ubuntu: ./vsftpd_script.sh
    : No such file or directory #!/bin/bash
    : command not foundine 4:
    : command not foundine 11:
    ./vsftpd_script.sh: line 35: syntax error near unexpected token ‘elif’
    ‘/vsftpd_script.sh: line 35: ‘elif [ «$numb» -lt «$passdigit» ]; then

    когда выполняю «sudo apt-get install bash» то говорит «bash is already the newest version.»

  21. Максим Степанов on 28 Дек 2010 at 15:02 #

    #!/bin/bash
    Это строка с комментарием, она не должна читаться интерпритатором, у вас что то со скриптом, лишние символы возможно.

  22. uname-a on 28 Дек 2010 at 15:25 #

    Да, вы правы. Сейчас wget’om слил скрипт по ссылке, заработало! 🙂 А до этого я вручную скопировал скрипт из статьи в файл *.sh, и оно почему то не хотело стартовать… Кстати, когда открываю файл *.sh созданный вручную, там все строки ровненькие. А когда скачанный скрипт — там всё наперекосяк, изза чего это?

  23. Максим Степанов on 28 Дек 2010 at 15:36 #

    Возможно дело в редакторе.

  24. Vsftpd с виртуальными пользователями | MUHIEV.RU on 02 Янв 2011 at 10:57 #

    […] Для создания и администрирования пользователей вашего фтп сервера вы можете использовать скрипт любезно предоставленный Александром Астаповым, скачать его и почитать о возможностях можно в отдельном посте, http://sudouser.com/skript-dlya-upravleniya-polzovatelyami-vsftpd.html […]

  25. Проставляемся on 11 Фев 2011 at 16:47 #

    […] Тут скрипт управления пользователями http://sudouser.com/skript-dlya-upravleniya-polzovatelyami-vsftpd.html […]

  26. djrust on 17 Июл 2012 at 21:18 #

    Огромное спасибо автору скрипта!
    Экономит очень много времени!

  27. cfifua on 12 Июл 2013 at 15:25 #

    TrEK on 09 Июл 2009 at 17:39 # Я создал юзера в системе, такого же как в mysql и задал в Вашем скрипте принадлежность к групе vsftpd — все отлично работает. Большущее спасибо разработчику!!! А вот как бы научится ограничивать физическое пространство для каждого новоиспеченного юзверя? И чтоб для каждого из них то пространство можно было изменить….
    Stepanoff on 09 Июл 2009 at 22:26 # Это уже надо ставить квоты, об этом в статье не написано. Поищите в гугле. Права на директории менять руками можно, должно быть владелец vsftpd а группа nogroup, у всех юзеров эти права одинаковые.

    и всё же можно по подробней как это сделать было бы не плохо с примерами.
    плюс я хочу чтоб этот скрипт работал для заливания инфы на сайт, а не просто файлопомойка.
    нужно чтоб он ещё умел сразу добавлять записи в апач и nginx.
    ну и бинд наверное, но это такое буду сам ковырять.

    вот как с квотами быть?

Trackback URI | Comments RSS

Leave a Reply

You must be logged in to post a comment.


« | »

  • Реклама

  • Ссылки



    Двери стеклянные для саун http://www.rem-sovet.ru
    rem-sovet.ru

    лучшие таблетки виагра цена ниже аптечной
    vsegda-gotov.com.ua

  • Теги



Server load average: 0.00, 0.00, 0.00
Server uptime: 358 days, 20:34
Your IP is: 54.162.236.133.