标签为 Vsftp 的文章
分享一个用于管理Vsftp的虚拟用户的脚本[原创实践]
由 mcsrainbow 发表在 Linux&Unix 分类,时间 2011/12/12
由于公司的一台服务器上使用FTP的用户越来越多,为了方便管理和安全考虑,我们将这些用户账号从之前的操作系统用户迁移到了虚拟用户。
但也因此无法像以前对系统用户那样很方便的对虚拟用户进行添加,删除,禁用以及修改密码等操作了,为了解决这个问题,我自己编写了一个Shell脚本,用它可以实现对虚拟用户的的创建,删除,禁用,激活以及修改密码的操作,用起来感觉不错,再次特分享给大家。
首先,关于Vsftp的虚拟用户方式的安装与配置,可以参考:http://heylinux.com/archives/726.html
在以虚拟用户方式配置好Vsftp以后,就可以通过以下方式使用脚本了:
创建用户:./user.vsftpd.sh create jack
删除用户:./user.vsftpd.sh delete jack
禁用用户:./user.vsftpd.sh disable jack
激活用户:./user.vsftpd.sh enable jack
修改密码:./user.vsftpd.sh passwd jack
创建脚本,输入以下内容:
# vim user.vsftpd.sh
# chmod +x user.vsftpd.sh
#!/bin/bash #The script can create,deactivate,activate and delete virtual users of vsftpd. #Author: Dong Guo #Date: December 12 2011 USERFILE=/etc/vsftpd/virtusers USERDB=/etc/vsftpd/virtusers.db CONFBASE=/etc/vsftpd/vconf TMPCONF=/etc/vsftpd/vconf/vconf.tmp FTPBASE=/ftphome FTPHOST=ftphost USERNAME=$2 if [ $# != 2 ];then echo "Usage: $0 {create|disable|enable|passwd|delete} {username}" >&2 exit 1 fi function check_username_exist() { #Check if virtual user already exist USERCOUNT=$(sed -n 'p;n' $USERFILE | grep -w $USERNAME | wc -l) if [ $USERCOUNT -ne 0 ];then echo "User $USERNAME ALREADY exist!" && exit fi } check_username_notexist() { #Check if virtual user not exist USERCOUNT=$(sed -n 'p;n' $USERFILE | grep -w $USERNAME | wc -l) if [ $USERCOUNT -eq 0 ];then echo "User $USERNAME NOT exist!" && exit fi } get_password() { #Get the password echo -n "Input password: " read password #Check if password is empty if [ -z "$password" ];then echo "Empty password!!" && exit fi } update_userdb() { #Delete the virtual user db rm -f $USERDB #Generate the virtual user db db42_load -T -t hash -f $USERFILE $USERDB } case "$1" in 'create' ) check_username_exist get_password #Write the username and password to $USERFILE echo $USERNAME >> $USERFILE echo $password >> $USERFILE update_userdb #Create the configure file of virtual user cp $TMPCONF $CONFBASE/$USERNAME #Replace the home directory name of virtual user sed -i "s/virtuser/$USERNAME/g" $CONFBASE/$USERNAME #Create the home directory of virtual user mkdir $FTPBASE/$USERNAME #Change the owner of home directory to OS user $FTPHOST chown -R $FTPHOST:$FTPHOST $FTPBASE/$USERNAME ;; 'disable' ) check_username_notexist #Change the owner of home directory from $FTPHOST to root chown root:root $FTPBASE/$USERNAME #Change the permissions of home directory to read-only for root chmod 700 $FTPBASE/$USERNAME ;; 'enable' ) check_username_notexist #Change the owner of home directory from root to $FTPHOST to root chown $FTPHOST:$FTPHOST $FTPBASE/$USERNAME #Change the permissions of home directory to 775 for $FTPHOST chmod 775 $FTPBASE/$USERNAME ;; 'delete' ) check_username_notexist #Get the row numbers of username and password of virtual user ROWNUMBER=$(cat -n $USERFILE | sed -n 'p;n' | grep -w $USERNAME | awk '{print $1}' | head -n 1) #Delete the username and password of virtual user from $USERFILE sed -i "${ROWNUMBER}d" $USERFILE sed -i "${ROWNUMBER}d" $USERFILE update_userdb #Delete the configure file of virtual user rm -f $CONFBASE/$USERNAME #Rename the home directory name of virtual user mv $FTPBASE/$USERNAME $FTPBASE/$USERNAME.deleted ;; 'passwd' ) check_username_notexist get_password #Get the row numbers of username and password of virtual user ROWNUMBER=$(cat -n $USERFILE | sed -n 'p;n' | grep -w $USERNAME | awk '{print $1}' | head -n 1) PASSWORDNUMBER=$(expr $ROWNUMBER + 1) sed -i "${PASSWORDNUMBER}d" $USERFILE sed -i "${ROWNUMBER}a $password" $USERFILE update_userdb ;; *) echo "Usage: $0 {create|disable|enable|passwd|delete} {username}" >&2 exit 1 ;; esac
工作笔记—基于虚拟用户方式的Vsftp高级设置
由 mcsrainbow 发表在 Linux&Unix 分类,时间 2011/04/27
如果仅仅是需要简单的上传下载一些文件的话,不建议安装FTP服务器,通过SSH的sftp通道既方便又安全,客户端推荐 FileZilla FTP Client 。
但如果是针对多个用户使用,且对权限等方面有较高的要求,则推荐采用支持虚拟用户的Vsftp服务器。以下是我总结的安装与配置步骤,希望能对大家有所帮助。
1.安装所需软件包
(以下软件包均可从光盘或yum源中获取。)
安装vsftpd软件包
rpm -ivh vsftpd-*
安装pam软件包
rpm -ivh pam-*
rpm -ivh pam-devel-*
安装DB4软件包
rpm -ivh db4-*
rpm -ivh db4-devel-*
2.系统帐户
2.1.建立虚拟宿主用户
useradd -d /ftphome -m ftphost
2.2 修改配置文件:
2.2.1 备份vsftpd.conf
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
2.2.2 编辑vsftpd.conf
vi /etc/vsftpd/vsftpd.conf
阅读全文 »
Vsftp服务器配置详解
由 mcsrainbow 发表在 Linux&Unix 分类,时间 2011/01/26
注:Vsftp作为RHEL的默认FTP服务器,我们有必要对其安装与配置进行更深入的了解,在网络上搜索的资料大多比较零散,但下面这篇文章讲解比较全面,且内容实用。
原文出处:http://www.5ilinux.com
另外,在前段时间我对SUSE的默认FTP服务器 pureftp 进行了一些了解,发现它在功能上更加强大和易用,因此建议大家尝试采用pureftp来作为专业的FTP服务器,我也将对pureftp进行更深一步的学习,并将学习成果分享给大家。
===========================================================
目录
1 Vsftp服务器的安装
1.1 匿名服务器的连接(独立的服务器)
1.2 开启匿名FTP服务器上传权限
1.3 开启匿名服务器下传的权限
1.4 普通用户FTP服务器的连接(独立服务器)
1.5 用户登陆限制进其它的目录,只能进它的主目录
1.6 限制本地用户访问FTP
1.7 安全选项
1.8 查看谁登陆了FTP,并杀死它的进程
2 Vsftp服务器的配置
2.1 配置本地组访问的FTP
2.2 配置独立FTP的服务器的非端口标准模式进行数据连接
2.3 配置单独的虚拟FTP,使用虚拟FTP用户,并使建立的四个帐户中有不同的权限
2.3.1 配置网卡
2.3.2 写入/etc/sysconfig中(为了重起后IP地址不会丢失)
2.3.3 进入vsftpd.conf所在的文件夹
2.3.4 建立logins.txt
2.3.5 建立访问者的口令库文件,然后修改其权限
2.3.6 进如/etc/pam.d/中创建ftp.vu
2.3.7 在/var/ftp/创建目录并改变其属性和它的属主
2.3.8 进入vsftpd2.conf修改其中的信息
2.3.9 在vsftpd.comf所在的目录中创建virtaul文件目录并在文件目录中创建以你用户名命名的配置文件
2.3.10 修改vsftpd2.conf
2.4 vsftpd.conf中的所有配置信息
3 Vsftp服务器的维护
4 Vsftp使用的一些补充
4.1 补充一:如何有选择的把用户限制在家目录中呢?
4.2 补充二:打开vsFTP服务器的日志功能
4.3 补充三:如何让绑定IP到vsFTP?
4.4 补充四:如何让vsFTP服务器限制链接数,以及每个IP最大的链接数??
4.5 补充五:如何限制下载的速度?
4.6 补充六:我的硬盘空间有限,怎么办?
4.7 补充七:如何定制欢迎信息
4.8 补充八:如何实现虚拟路径?
4.9 补充九:如何上匿名访问、上传,并支持下载和执行?
4.10 补充十:通过pam认证方式,添加虚拟用户
4.11 补充十一:如何把系统默认用standalone启动改为用xinetd启动?
阅读全文 »
工作笔记 -- 基于本地用户方式的Vsftp高级设置
由 mcsrainbow 发表在 Linux&Unix 分类,时间 2008/11/06
创建一个专用的FTP数据存储目录:
# mkdir /ftpserver
# vi /etc/vsftpd/vsftpd.conf
设置vsftpd为standalone工作模式
listen=YES
tcp_wrappers=YES
启用本地用户:
local_enable=YES
禁用匿名用户:
anonymous_enable=NO
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
更改FTP默认监听端口21:
添加
##Set the listen_port
Listen_port=5200
设置FTP的PASV模式传输端口,以配合防火墙通过PASV模式传输数据:
添加
##set the pasv ports
port_enable=NO
pasv_enable=YES
pasv_min_port=10021
pasv_max_port=10025
设置FTP服务器最大的并发连接数,默认值为0,表示不限最大连接数。
添加
max_clients=1000
设置每个IP地址最大的并发连接数目,默认值为0,表示不限制。
添加
max_per_ip=10
启用锁定主目录用户名单功能:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
# touch /etc/vsftpd.chroot_list
启用特定用户独立配置文件功能:
添加
##set the user's private config
user_config_dir=/etc/vsftpd/user_config/
# mkdir /etc/vsftpd/user_config/
创建一个FTP用户,将该用户的主目录指向到/ftpserver,并使其不能登陆shell:
# useradd jacky -d /ftpserver/jacky -s /sbin/nologin
# passwd jacky
锁定jacky用户的主目录
# vi /etc/vsftpd.chroot_list
添加
jacky
创建jacky用户的独立配置文件:
# cd /etc/vsftpd/user_config/
# vi jacky
##Allow this user download?
#download_enable=YES
##Uncomment this to enable any form of FTP write command,such as "STOR,DELE,RNFR,RNTO,MKD,RMD,APPE,SITE ..."
#write_enable=YES
##If you set the "write_enable=YES",but don't want to allow "rename or delete ..."
##You can open "cmds_allowed",and remove the command which you don't allow.
##"delete" = "DELE,RMD" ; "rename" = "RNFR,RNTO" ; "mkdir" = "MKD"
#cmds_allowed=ABOR,ACCT,ALLO,APPE,CDUP,CWD,DELE,EPRT,EPSV,FEAT,
HELP,LIST,MDTM,MKD,MODE,NLST,NOOP,OPTS,PASS,PASV,PORT,PWD,
QUIT,REIN,REST,RETR,RMD,RNFR,RNTO,SITE,SIZE,SMNT,STAT,
STOR,STOU,STRU,SYST,TYPE,USER,XCUP,XCWD,XMKD,XPWD,XRMD,BYE
##Set the max rate for this user,"Bytes/s".
#local_max_rate=204800
##Set the root directory for this user.
#local_root=
使jacky用户仅具有下载、上传和创建目录的权限,而没有删除和重命名的权限:
download_enable=YES
write_enable=YES
cmds_allowed=ABOR,ACCT,ALLO,APPE,CDUP,CWD,EPRT,EPSV,FEAT,
HELP,LIST,MDTM,MKD,MODE,NLST,NOOP,OPTS,PASS,PASV,PORT,PWD,
QUIT,REIN,REST,RETR,SITE,SIZE,SMNT,STAT,
STOR,STOU,STRU,SYST,TYPE,USER,XCUP,XCWD,XMKD,XPWD,XRMD,BYE
限制jacky用户的最大下载速度为200KB左右
local_max_rate=204800
重启vsftpd以使配置生效:
# /etc/init.d/vsftpd restart
修改防火墙以使FTP通过:
# vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5200 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10021 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10023 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10024 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10025 -j ACCEPT
重启防火墙以使策略生效:
# /etc/init.d/iptables restart
OK! The end.
PS(根据实际需要):
开放root用户的FTP权限:
# vi /etc/vsftpd.ftpusers
#root
# vi /etc/vsftpd.user_list
#root
禁止jacky用户的FTP权限
# vi /etc/vsftpd.ftpusers
添加
jacky
# vi /etc/vsftpd.user_list
添加
jacky
如何在端口过滤后通过pasv模式连接FTP服务器
由 mcsrainbow 发表在 Linux&Unix 分类,时间 2008/10/22
了解下FTP协议原理,对我们深入理解和排查问题都是有好处的。
维基百科的链接:http://zh.wikipedia.org/wiki/FTP%E5%AE%A2%E6%88%B6%E7%AB%AF
为了保障服务器的安全,一般都会对服务器进行端口过滤;
windows服务器一般采用通过TCP/IP筛选,而Linux则通过iptables防火墙。
因为FTP服务器默认都会使用pasv模式进行数据传输,在连接时,服务器端会根据连接过来的IP计算出一个特定的端口来传输数据,这样可以实现每个IP地址连接过来之后都通过一个不同的端口进行数据的传输;
如果这个端口不能打开,将无法连接到该服务器传输数据(即使在ftp登陆信息中看到已经成功登陆)。
一些优秀的FTP传输工具在此时会自动切换到port模式进行传输,以达到使用监听端口(如默认的数据流端口20)来传输数据的目的。
但这样会造成一些麻烦,比如我们直接使用IE的FTP功能,或很简单的一些FTP客户端,都无法正常连接上来;即使通过FlashFXP和CuteFTP这样的工具,也仍然不是很顺利。
所以,在进行了端口的过滤之后,我们一般采用固定设置几个端口作为pasv的数据传输端口(一般设置5个以上),并开放这几个端口。
Windows下使用Serv-U搭建FTP服务器,然后在“设置”中有一项可以设置数据传输端口,保存后再到TCP/IP筛选中添加允许这些端口即可。
而Linux下常用的VSFTP服务器,需要在配置文件/etc/vsftpd.conf中添加以下几行配置,然后在iptables中开放这些端口即可。
port_enable=NO
pasv_enable=YES
pasv_min_port=10021
pasv_max_port=10025
这样,就可以在进行了端口过滤后通过pasv模式连接FTP服务器了。
近期评论(Recent Comments)
感谢提供解决问题的思路。我的情况是因为文件有损坏,使用hotcopy 会出现“svnadmin: Can't open file '/SVN_PATH/db/revprops/24/24685'...
大神,您好。 你的博客 都是使用什么软件和主题搭建的哈?关注你的博客很久了。 也想自己搭建一个 总结 反思自己。谢谢大神...
int result = 0; for (int i = 0; i < 101; i++) { result ^= data[i]; ...
如果确认所有的表都是INNODB引擎,没有任何MyISAM表,还可以加上--no-lock参数。...
讲的不错, mark
答案无疑是本地端口转发了,它的命令格式是: ssh -L :: 原来是这个原理...
博主您好,我想咨询你一个问题,我现在想实现这样一个需求: haproxy 本身提供ssl 证书,后面的web 服务器走正常的http 协议 就是ssl证书就放在前端的haproxy上,后端4...