4 апреля 2009 01:26 дп
Скрипт для управления пользователями VSFTPD

Один из читателей моего блога любезно предоставил свой скрипт для работы с пользователями фтп сервера VSFTPD настроенного на работу с базой данных MYSQL для хранения логинов и паролей пользователей. Прочитать статью об установке и настройке фтп сервера VSFTPD вы можете по ссылке http://sudouser.com/ustanovka-i-nastrojka-vsftpd-mysql-ubuntu-debian. Скрипт позволяет создавать, изменять, удалять пользователей (с созданием резервной копии домашней директории), работать с их домашними каталогами, менять пароли, просматривать всех пользователей. Скрипт полностью настраиваеся под ваши нужды, а именно имя базы, корневая директория для каталогов пользователей, минимальная длинна паролей, и тд. Посмотреть и скачать скрипт вы сможете в продолжении поста.
Ниже представлен код скрипта, в конце поста ссылка на скачивание архива с ним. По вопросам связанным со скриптом вы можете написать его автору на электрическую почту, найти ее вы сможете в коде скрипта в самом начале, зовут автора Александр Астапов.
Код:
#!/bin/bash
#Скрипт управляет виртуальными пользователями vsftpd
#По вопросам, предложениям и замечаниям по данному скрипту пишите по адресу: 0--0@list.ruftp_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
fidone
}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_usrif [ "$?" -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}
donemysql -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
echochpass="Изменить_пароль_пользователя"
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”
Leave a Reply
You must be logged in to post a comment.
Объясните ломаке как прикрутить данный скрипт к тому что предложено здесь:http://sudouser.com/ustanovka-i-nastrojka-vsftpd-mysql-ubuntu-debian ?
и как он запускаестся.
Буду особенно благодарен за наиболее информативный ответ))
В начале скрипта измените пути к домашним директриям, а так же имя базы, пользователя к ней и пароль. Потом просто запустите скрипт, и следуйте подсказкам.
спасибо, вроде разобрался. Жалко только маунтить приходится руками нужные директории пользователям (( не знаете средств автоматизации данных процессов? И как некоторым пользователям можно давать права на запись и выход из домашней директории?
Директории создаются скриптом, поменяйте путь в нем, что бы создавались где надо, и не надо маунтить будет. Включить запись для юзеров можно добавив в директорию для конфигов юзеров (смотри в посте где она) файл с названием соответствующим логину юзера, туда строку write_enable=YES
Про выход из домашней директории не помню, почитайте ман к vsftpd.
Все работает.. супер!
Большое спасибо автору!
Вот только я не разобрался какие права доступа и какого юзера и группу нужно назначить директории /home/vsftpd ?
Подскажите пожалуйста.
директория нового юзера создается почему-то с root:root.
И еще меня интересует такое… я так понимаю что для каждого нового юзера, которого я создам с помощью скрипта, директория будет принадлежать тому же юзеру? Можно уточнить этот момент.
Например я создаю юзера Vasya… создается каталог /home/vsftpd/Vasya который имеет имя владельца это имя входа в БД mysql , а не Vasya.
Так что суть моего вопроса еще и в том, имя владельца и группы всех каталогов в /home/vsftpd должны быть разными?… или у всех одинаковые?
Благодарю за разъяснение!
Я создал юзера в системе, такого же как в mysql и задал в Вашем скрипте принадлежность к групе vsftpd — все отлично работает. Большущее спасибо разработчику!!!
А вот как бы научится ограничивать физическое пространство для каждого новоиспеченного юзверя? И чтоб для каждого из них то пространство можно было изменить….
Это уже надо ставить квоты, об этом в статье не написано. Поищите в гугле.
Права на директории менять руками можно, должно быть владелец vsftpd а группа nogroup, у всех юзеров эти права одинаковые.
Подскажите, где ошибся я, ибо при запуске скрипта выдаёт
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)
Подробнее, на какие действия ошибки выдает?
Качаю скрипт, добавляю в начале логин, группу, папку, сохраняю. выполняю
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
Пароль нулевой длинны не допустим
Введите другой пароль
и т.д. пока не прервёшь.
А это что? ERROR 1045 (28000): Access denied for user ‘vsftpd’@’localhost’ (using password: NO)
Грамотный скрипт.
[…] Для создания и администрирования пользователей вашего фтп сервера вы можете использовать скрипт любезно предоставленный Александром Астаповым, скачать его и почитать о возможностях можно в отдельном посте,http://sudouser.com/skript-dlya-upravleniya-polzovatelyami-vsftpd.html […]
Пробую на 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»)
Помогите!
Запускайте скрипт в bash.
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» если этот файл там есть!?
chmod x vsftpd_script.sh
./vsftpd_script.sh
то же самое…..
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.»
#!/bin/bash
Это строка с комментарием, она не должна читаться интерпритатором, у вас что то со скриптом, лишние символы возможно.
Да, вы правы. Сейчас wget’om слил скрипт по ссылке, заработало! 🙂 А до этого я вручную скопировал скрипт из статьи в файл *.sh, и оно почему то не хотело стартовать… Кстати, когда открываю файл *.sh созданный вручную, там все строки ровненькие. А когда скачанный скрипт — там всё наперекосяк, изза чего это?
Возможно дело в редакторе.
[…] Для создания и администрирования пользователей вашего фтп сервера вы можете использовать скрипт любезно предоставленный Александром Астаповым, скачать его и почитать о возможностях можно в отдельном посте, http://sudouser.com/skript-dlya-upravleniya-polzovatelyami-vsftpd.html […]
[…] Тут скрипт управления пользователямиhttp://sudouser.com/skript-dlya-upravleniya-polzovatelyami-vsftpd.html […]
Огромное спасибо автору скрипта!
Экономит очень много времени!
TrEK on 09 Июл 2009 at 17:39 # Я создал юзера в системе, такого же как в mysql и задал в Вашем скрипте принадлежность к групе vsftpd — все отлично работает. Большущее спасибо разработчику!!! А вот как бы научится ограничивать физическое пространство для каждого новоиспеченного юзверя? И чтоб для каждого из них то пространство можно было изменить….
Stepanoff on 09 Июл 2009 at 22:26 # Это уже надо ставить квоты, об этом в статье не написано. Поищите в гугле. Права на директории менять руками можно, должно быть владелец vsftpd а группа nogroup, у всех юзеров эти права одинаковые.
и всё же можно по подробней как это сделать было бы не плохо с примерами.
плюс я хочу чтоб этот скрипт работал для заливания инфы на сайт, а не просто файлопомойка.
нужно чтоб он ещё умел сразу добавлять записи в апач и nginx.
ну и бинд наверное, но это такое буду сам ковырять.
вот как с квотами быть?