- 论坛徽章:
- 0
|
[color="#295200"]vsftp全功略(转)
一、资料参考与准备:
本文参考了vsftpd安装文档,vsftpd的EXAMPLE及引用网上众多网友的文章。
FTP
(File Transfer
Protocol)是文件传输协议的简称。主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)察看远程计算机有哪些文件,
然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。Vsftp(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器
和其他很多的服务器程序一样,vsftpd 可以为 inetd 或者 xinetd
这两个超级服务器(个么就是服务器的服务器嘛!)启用(这种方式启动较慢,但是对于不频繁使用并且机器的内存紧张的情况还是有用的),也可以作为
standalone 的启用。这个 standalone 模式需要在配置文件中使用 listen=YES 。主配置文件只有一个
vsftpd.conf 。启用的命令行很简单vsftpd [configuration-file]vsftp.conf配置文件的风格基本都是 option=value 的模式。那么,我们看看有哪些值得我们试用的 options 。这些是 bool 值(YES 或者 NO):options 解释 默认值allow_anon_ssl 当 ssl_enable 时,允不允许匿名用户使用 ssl 连接。 NOanon_mkdir_write_enable 当 anonymous 可写目录时是否允许创建子目录 NOanon_other_write_enable 是否允许 anonymous 进行除了 upload 和 mkdir 之外的 deletion 和 renaming 操作。 NOanon_upload_enable 当允许 write_enable 时,是否允许 upload 。 NOanon_world_readable_only anonymous 是否可以下载全部可读文件。 YESanonymous_enable 使用允许是用 anonymous 和 ftp 用户匿名登录。 YESascii_download_enable 允许使用 ASCII 方式下载 NOascii_upload_enable 允许使用 ASCII 方式上载 NOasync_abor_enable 某些 ftp client 使用的特性 NObackground 在 Listen 态,该选项决定是否在后台执行监听 NOcheck_shell 在 vsftpd 是编译时支持 PAM 则该选项决定是否根据 /etc/shell 判断用户是否具有合法的 shell YESchmod_enable 给 local users 以 SITE CHMOD 权限,anonymous 不会收到影响(没有这个权限) YESchown_uploads anonymous 上传文件是否 chown 为 chown_username 所设置用户 NOchroot_list_enable 是否启用将 chroot_list_file 中用户限制仅在用户目录中 NOchroot_local_user 是否将 local user 限制在用户目录中 NOconnect_from_port_20 是否用 20 端口传输数据 NOdeny_email_enable 使得使用 banned_email_file 中作为 anonymous 的用户无法登录 NOdirlist_enable 是否取消 list 命令 NOdirmessage_enable 是否列出目录消息,每个目录的 .message 可以被此处的 message_file 所设定的覆盖 NOdownload_enable 是否允许下载 YESdual_log_enable 是否在 /var/log/xferlog 和 /var/log/vsftpd.log 两处记录日志 NOforce_dot_files 是否使用 .. 和 . 文件 NOforce_anon_data_ssl anonymous 是否数据通过 ssl 传送 NOforce_anon_logins_ssl 强制 anonymous 使用 ssl 登录 NOforce_local_data_ssl local users 强制使用 ssl 传输数据 NOforce_local_logins_ssl local users 强制使用 ssl 登录 NOguest_enable 非匿名登录被映射成为 guest_username 对应用户 NOhide_ids 将所有目录文件的属主都显示为 ftp 以掩盖 id NOlisten 使用 standalone 模式 NOlisten_ipv6 使用 ipv6 的 standalone 模式 NOlocal_enable 允许本地用户登录 NOlog_ftp_protocol 是否记录所有的 ftp 交互过程 NOls_recurse_enable 是否允许使用 ls -R NOno_anon_password anonymous 用户是否不需要密码 NOno_log_lock log 文件是否加锁(排除其他进程的文件写) NOone_process_model 每次连接仅允许一个进程 NOpasswd_chroot_enable 将 chroot_local_user 中用户依照 /etc/passwd 中使用 ./ 技术指明的目录禁闭 NOpasv_enable 开启 PASV 模式 YESpasv_promiscuous 是否进行 PASV 安全检查,这主要和 FXP 使用的模式相关,我不懂 NOport_enable 允许使用 PORT 命令获得传输端口 YESport_promiscuous 是否进行 PORT 安全检查 NOrun_as_launching_user 以启用 vsftpd 的用户身份执行,这会使得需要 root 权限的某些功能不能完成 NOsecure_mail_list_enable 使得 anonymous 账户只能用 email_password_file 中密码登陆 NOsession_support 在会话期间只需要一次输入密码,仅在支持 PAM 的情况下有用 NOsetproctitle_enable 显示系统状态 NOssl_enable 支持使用 ssl 的连接,但是 vsftpd 必须连接到 Open SSL 库。 NOssl_sslv2 支持 SSL v2 协议 NOssl_sslv3 支持 SSL v3 协议 NOssl_tslv1 支持 TLS v1 协议 YESsyslog_enable 原先记录到 /var/log/vsftpd.log 转为系统日志。 NOtcp_wrappers 如果编译时支持 tcp_wrappers ,则可利用基于 IP 地址的控制来处理连接 NOtext_userdb_names 使用用户名组名而不是 UID 和 GID NOtilde_user_enable 支持 ~name 方式访问用户主目录 NOuse_localtime 使用本地时间(默认为 GTM) NOuse_sendfile 使用系统 sendfile() 调用 YESuserlist_deny 当 user_list_enable 时,仅仅允许在 userlist_file 文件中指明用户方可登陆 YESuserlist_enable 如果启用将使 userlist_file 内用户不能登陆 NOvirtual_use_local_privs 虚拟用户是否享用 local user 相同的权利(默认是 anonymous 的权利) NOwrite_enable 影响 STOR、DELE、RNFR、RNTO、MKD、RMD、APPE、SITE NOxferlog_enable 是否记录日志到 vsftpd_log_file 指定的文件中(默认为 /var/log/vsftpd.log) NOxferlog_std_format 使用标准的 xferlog 格式记录 NO下表是一些数值形式的变量:options 说明 默认值accept_timeout 建立 session 超时,单位 s 60anon_max_rate 匿名用户下载限制,单位 bytes/s 0anon_umask 匿名用户上传的 umask 077connect_timeout 连接超时,单位 s 60data_connection_timeout 传输数据超时,单位 s 300file_open_mode 上文件的 umask 0666ftp_data_port 当 connect_from_port_20 激活时使用的端口号 20idle_session_timeout idle 超时,单位 s 300litsten_port 监听端口 21local_max_rate 本地用户最大传输限额,单位 bytes/s 0local_umask 本地用户上传 umask 077max_clients 最大连接用户数 0max_per_ip 每个 ip 连接的最大数目 0pasv_max_port 使用 PASV 时使用的 port 号的最大值 0pasv_min_port 使用 PASV 时使用的 port 号的最小值 0trans_trunk_size 每段数据块大小(最好根据网络特性来设置) 0字符串类型的选项options 说明 默认值anon_root anonymous 的用户目录位置 (none)banned_email_file /etc/vsftpd.banned_emailsbanner_file 连接时显示出的文字,如果设置将会覆盖 ftpd_banner 设置的字符串 (none)chown_username rootchroot_list_file /etc/vsftpd.chroot_listcmds_allowed 值为允许使用的 ftp 命令,用逗号分割。一般可用的有 USER,PASS,QUIT,其余的可以用该命令添加 (none)deny_file 该命令将会过滤掉匹配上的所有文件名,可使用正则表达式 (none)dsa_cert_file 使用 SSL 连接时的证书 (none-use rsa)dsa_private_key_file SSL 连接时 DSA 的 private key (none)email_password_file /etc/vsftpd.email_passwordsftp_username ftpftpd_banner (none)guest_username ftphide_file 匹配上的文件将被隐藏 (none)listen_address Listen 模式下监听的地址,应写一个合法的 IP 地址 (none)listen_address6 同上但是为 IP v6 (none)local_root 本地用户登陆后自动转到该目录下 (none)message_file .messagenon-priv_user 不需特权时执行任务的用户名 nobodypam_service_name 如其意 vsftpdpasv_address 使用 PASV 模式下传输使用的 IP 地址 (none)rsa_cert_file 使用 SSL 的 RSA 的证书 /usr/share/ssl/certs/vsftpd.pemrsa_private_key_file 使用 SSL 的 RSA 的 private key 位置 (none)secure_chroot_dir 多为一个空目录,用户没有写权限 /var/run/vsftpdssl_ciphers SSL 使用的加密算法 DES-CBC3-SHAuser_config_dir 允许对每个用户使用独立的配置文件,配置文件所放的目录为此变量声明,该目录中任意文件名和对应的用户名相同 (none)user_sub_token 虚拟用户名,没看明白怎么用 -,- (none)userlist_file /etc/vsftpd.user_listvsftpd_log_file /var/log/vsftpd.logxferlog_file /var/log/xferlogFTP 数字代码的意义 110 重新启动标记应答。 120 服务在多久时间内ready。 125 数据链路埠开启,准备传送。 150 文件状态正常,开启数据连接端口。 200 命令执行成功。 202 命令执行失败。 211 系统状态或是系统求助响应。 212 目录的状态。 213 文件的状态。 214 求助的讯息。 215 名称系统类型。 220 新的联机服务ready。 221 服务的控制连接埠关闭,可以注销。 225 数据连结开启,但无传输动作。 226 关闭数据连接端口,请求的文件操作成功。 227 进入passive mode。 230 使用者登入。 250 请求的文件操作完成。 257 显示目前的路径名称。 331 用户名称正确,需要密码。 332 登入时需要账号信息。 350 请求的操作需要进一部的命令。 421 无法提供服务,关闭控制连结。 425 无法开启数据链路。 426 关闭联机,终止传输。 450 请求的操作未执行。 451 命令终止:有本地的错误。 452 未执行命令:磁盘空间不足。 500 格式错误,无法识别命令。 501 参数语法错误。 502 命令执行失败。 503 命令顺序错误。 504 命令所接的参数不正确。 530 未登入。 532 储存文件需要账户登入。 550 未执行请求的操作。 551 请求的命令终止,类型未知。 552 请求的文件终止,储存位溢出。 553 未执行请求的的命令,名称不正确。
二、安装与配置vsftpd安装篇:环境:匿名及本地用户:REDhat9+vsftpd1.1.3(或vftpd2.0.1)。虚拟用户:vsftpd1.1.3+mysql3.23.54+pam_mysql0.5不适用于vsftpd2.0.1+mysql4+pam0.5。1、rpm安装:代码:[root@Linux_win vsftpd]#rpm -ivh vsftpd-1.1.3-8.i386.rpm2、tar.gz的安装解压后查看README和INSTALL文档安装前的条件:进入vsftpd目录编辑 "builddefs.h"文件,里面定义了pam功能,tcp_wrappers功能,ssl功能,根据需要定义pam或tcpwrapper功能,以消ssl功能然后键入 "make" .将编译出相应的二进制文件,你可以用以下命令查看[chris@localhost vsftpd]$ ls -l vsftpd-rwxrwxr-x 1 root root 61748 Sep 27 00:26 vsftpda、增加“nobody”用户。在系统中添加此用户,如果用户已经存在,useradd命令有相应提示。代码:[root@Linux_win vsftpd]# useradd nobodyuseradd: user nobody existsb、建立“/usr/share/empty”目录。在系统中此目录,如果目录已经存在,mkdir命令有相应提示。代码:[root@hpe45 root]# mkdir /usr/share/empty/mkdir: cannot create directory '/usr/share/empty': File existsc、匿名服务帐号:“ftp”用户和一个有效的匿名目录(默认为/var/ftp)。代码:[root@Linux_win vsftpd]# mkdir /var/ftp/[root@Linux_win vsftpd]# useradd -d /var/ftp ftpd、更改目录的所有者为root,并让ftp用户对自己的主目录不可写代码:[root@Linux_win vsftpd]# chown root.root /var/ftp[root@Linux_win vsftpd]# chmod og-w /var/ftp编译VSFTPD代码:[root@Linux_win vsftpd]# tar zxvf vsftpd-1.2.0.tar.gz[root@Linux_win vsftpd]# cd vsftpd-1.2.0[root@Linux_win vsftpd]# make安装编译好的VSFTPD执行“make,make install”将编译好的二进制文件、手册等复制到相应目录。可能需要手动执行以下复制:代码:[root@Linux_win vsftpd]# cp vsftpd /usr/local/sbin/vsftpd[root@Linux_win vsftpd]# cp vsftpd.conf.5 /usr/local/share/man/man5[root@Linux_win vsftpd]# cp vsftpd.8 /usr/local/share/man/man8如果不存在man5和man8目录,要先建立这两个目录代码:[root@Linux_win vsftpd]#mkdir /usr/local/share/man/man5[root@Linux_win vsftpd]#mkdir /usr/local/share/man/man8make不会自己copy配置文件,如果make install有错,则必须手工更改[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf /etc为本地用户设置PAM如果允许本地用户登录VSFTPD,执行以下操作:代码:[root@Linux_win vsftpd]# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd3、pam_mysql安装如果使用mysql的二进制包,那么必须加个开始包,且要修改Makefile文件,指定mysql的lib位置。代码:[root@Linux_win vsftpd]# tar xvzf pam_mysql-0.5.tar.gz[root@Linux_win vsftpd]# cd pam_mysql[root@Linux_win vsftpd]# make[root@Linux_win vsftpd]# cp pam_mysql.so /lib/security4、mysql安装。请查看其它文档vsftpd启动篇vsftpd 有两种运行方式,一种是standalone 一种是 via an inetd (或者 inetd or xinetd).1、如何启动1)系统自带的代码:[root@Linux_win software]# service vsftpd restart2)源包安装:[root@Linux_win software]# /安装路径/vsftpd &代码:[root@Linux_win vsftpd]# /sbin/service xinetd restart 或 [root@Linux_win vsftpd]# /usr/local/sbin/vsftpd &2、standlone启动具体的运行方式由参数listen决定。当listen参数值为YES时,VSFTPD单独运行,我们可以使用脚本/etc/rc.d/init.d/vsftpd来启动、关闭以及重启VSFTPD。命令如下: 代码:/etc/rc.d/init.d/vsftpd start|stop|restart3、xinetd启动,首先要将vsftpd.conf配置文件中的listen参数值改为NO。其次,生成一个/etc/xinetd.d/vsftpd文件代码:[root@Linux_win vsftpd]#vi /etc/vsftpd/vsftpd.conf或vi /etc/vsftp.conflisten=NO 码:[root@Linux_win vsftpd]vi /etc/xinetd.d/vsftpd内容如下:service vsftpd{disable = nosocket_type = streamwait = nouser = rootserver = /usr/sbin/vsftpdport = 21log_on_success += PID HOST DURATIONlog_on_failure += HOST}通过修改disable值为no或yes,并重新启动xinetd,从而启动或停止VSFTPD。配置安全匿名服务器所要做的就是用vi修改vsftpd.conf文件代码:[root@Linux_win vsftpd]#vi /etc/vsftpd.conf或/etc/vsftpd/vsftpd.conf修改后的vsftpd.conf文件看附件:引用:#使用单独模式,并指定监听的IP地址listen_address=ip address#只允许匿名访问,不允许本地用户访问anonymous_enable=YESlocal_enable=NO#取消写权限write_enable=NOanon_upload_enable=NOanon_mkdir_write_enable=NOanon_other_write_enable=NO#启用详细的日志记录格式,设定记录传输日志的文件名。默认值为/var/log/vsftpd.log。xferlog_enable=YESxferlog_file=/var/log/vsftp.log#对连接进行控制,还有超时时间,那就根据具体情况再说了。connect_from_port_20=YESpasv_min_port=50000pasv_max_port=60000#控制FTP最大并发数,限定每个IP地址的并发数。max_clients=numerical valuemax_per_ip=numerical value#限定下载速度anon_max_rate=80000#使用ftpd_banner取代VSFTPD默认的欢迎词,免得泄漏相关信息ftpd_banner=Welcome to xuanfei’s FTP Server#只让匿名用户浏览可阅读的文件,不可以浏览整个系统anon_world_readable_only=YES#隐藏文件的所有者和组信息,匿名用户看到的文件的所有者和组全变为ftphide_ids=YES 代码:附:vsftpd.conf[root@Linux_win vsftpd]# cat vsftpd.conflisten=YESlisten_address=192.168.1.2anonymous_enable=YESlocal_enable=NOwrite_enable=NOanon_root=/homeanon_upload_enable=NOanon_other_write_enable=NOanon_mkdir_write_enable=NOanon_world_readable_only=YES#dirmessage_enable=YESftpd_banner=welcome to xuanfei’s FTP serverxferlog_enable=YES#xferlog_file=/var/log/vsftpd.logconnect_from_port_20=YES#pasv_mix_port=50000#pasv_max_port=60000#xferlog_std_format=YESmax_clients=10max_per_ip=10hide_ids=YES#chroot_list_enable=YES#chroot_list_file=/etc/vsftpd/chroot_list#chroot_local_user=NO#pam_service_name=/etc/pam.d/vsftpd#guest_enable=YES#guest_username=vsftpdvirtual#virtual_use_local_privs=NO#user_config_dir=/etc/vsftpd/vsftpd_user_conf配置可上传匿名服务器[root@Linux_win vsftpd]#vi /etc/vsftpd/vsftpd.conf修改文件,改后如下代码:[root@Linux_win ftp]# cat /etc/vsftpd/vsftpd.conflisten=YESlisten_address=192.168.1.2anonymous_enable=YESlocal_enable=NOwrite_enable=YES#anon_root=anon_upload_enable=YESanon_other_write_enable=YESanon_mkdir_write_enable=YES#anon_world_readable_only=YES#dirmessage_enable=YESftpd_banner=welcome to xuanfei’s FTP serverxferlog_enable=YES#xferlog_file=/var/log/vsftpd.logconnect_from_port_20=YES#pasv_mix_port=50000#pasv_max_port=60000#xferlog_std_format=YESmax_clients=10max_per_ip=10hide_ids=YES#chroot_list_enable=YES#chroot_list_file=/etc/vsftpd/chroot_list#chroot_local_user=NO#pam_service_name=/etc/pam.d/vsftpd#guest_enable=YES#guest_username=vsftpdvirtual#virtual_use_local_privs=NO#user_config_dir=/etc/vsftpd/vsftpd_user_conf 代码:[root@Linux_win ftp]# mkidr /var/ftp/upload[root@Linux_win ftp]# chmod o+w /var/ftp/uploadanon_root参数指定的目录或默认的/var/ftp主目录,ftp匿名用户不可有写权限,否则会出错。办法是在/var/ftp下建立一个新目录,使得该目录对ftp匿名用户可写。才能上传。或不用匿名上传,而使用本地用户或虚拟用户 。关于匿名上传下载的实现;关于匿名上传,其实也比较简单,首先我们要修改一下vsftpd.conf ,此文件位于 /etc/目录下,可能是/etc/vsftpd.conf,也可能是/etc/vsftpd/vsftpd.conf文件。以您的系统环境为准;首先:我们要改一下vsftpd.conf,确保有以下几行;anonymous_enable=YESanon_upload_enable=YESanon_mkdir_write_enable=YESanon_umask=022 其次:在ftp用户家目录的下建一个文件夹,并修改其权限为完全开放;ftp用户的家目录在哪?我们前面已经说了,要通过/etc/passwd来查看;也可以通过finger ftp来查看;# finger ftpLogin: ftp Name: FTP UserDirectory: /var/ftp Shell: /sbin/nologin这
说明ftp用户的家目录在/var/ftp
,我们要在这个目录下建一个目录,然后把他的权限设置为任何用户可读可写可执行就行了;一般的情况下,在发行版中,有一个/var/ftp/pub的目
录,如果没有,您也可以自己建一个;把配置文件改好后,只要把/var/ftp下的任何一个目录的权限打开,都可以用来匿名上传和下载;比如您想让匿名用户上传和下载都在/var/ftp/pub,就可以把/var/ftp/pub的权限打开,如果没有这个目录,您要自己建一个;[root@localhost ~]# mkdir /var/ftp/pub[root@localhost ~]# chmod 777 /var/ftp/pub这样上传的时候传到pub目录就OK了配置本地用户修改vsftpd.conf代码:[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd.conflisten=YESlisten_address=192.168.1.2anonymous_enable=NOlocal_enable=YES#local_root=write_enable=YES#anon_root=#anon_upload_enable=YES#anon_other_write_enable=YES#anon_mkdir_write_enable=YES#anon_world_readable_only=YES#anon_umask=777#dirmessage_enable=YESftpd_banner=welcome to xuanfei’s FTP serverxferlog_enable=YES#xferlog_file=/var/log/vsftpd.logconnect_from_port_20=YES#pasv_mix_port=50000#pasv_max_port=60000#xferlog_std_format=YESmax_clients=10max_per_ip=10hide_ids=YES#limit all users in it's owner dir#chroot_local_user=YES#or limit somechroot_local_user=NOchroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_list#use ownwer conf fileuser_config_dir=/etc/vsftpd/vsftpd_user_confpam_service_name=/etc/pam.d/vsftpd#guest_enable=YES#guest_username=vsftpdvirtual#virtual_use_local_privs=NO由于上面了用户列表,因此须建立chroot_list文件,代码:[root@Linux_win vsftpd]# touch /etc/vsftpd/chroot_list并加入以下内容,查看chroot_list文件内容,结果如下代码:[root@Linux_win vsftpd]# cat /etc/vsftpd/chroot_listsamgem配置文件中指定了用户配置文件,因此建立此文件代码:[root@Linux_win vsftpd]# mkdir /etc/vsftpd/vsftpd_user_conf并根据用户名建立文件代码:[root@Linux_win vsftpd]# touch sam[root@Linux_win vsftpd]# touch gem[root@Linux_win vsftpd]# ls -l /etc/vsftpd/vsftpd_user_conf总用量 8-rw-r--r-- 1 root root 21 1月 8 00:25 sam-rw-r--r-- 1 root root 25 1月 8 00:17 gem并在sam,gem文件加加入以下内容,可用vi编辑并保存,下面的虚拟用户也一样,不过只须更改文件内容就可以了代码:[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd_user_conf/samlocal_root=/home/sam 代码:[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd_user_conf/gemlocal_root=/home/gem本地用户验证要用pam文件,内容是默认的。代码:[root@Linux_win vsftpd]# cat /etc/pam.d/vsftpd#%PAM-1.0auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusersonerr=succeedauth required pam_stack.so service=system-authauth required pam_shells.soaccount required pam_stack.so service=system-authsession required pam_stack.so service=system-auth关于添加本地用户及打开读写权限示例;FTP
用户一般是不能登录系统的,这也是为了安全。在系统中,没有权限登录系统的用户一般也被称之为虚拟用户;虚拟用户也是要写进
/etc/passwd中;这只是一种虚拟用户的方法,但说实在的并不是真正的虚拟用户,只是把他登录SHELL的权限去掉了,所以他没有能力登录系统;如果我们想把beinan这个用户目录定位在/opt/beinan这个目录中,并且不能登录系统;我们应该如下操作# adduser -d /opt/beinan -g ftp -s /sbin/nologin beinan# passwd beinanChanging password for user beinan.New password:Retype new password:passwd: all authentication tokens updated successfully.其实这还是不够的,还要改一下配置文件vsftpd.conf ,以确保本地虚拟用户能有读写权限;local_enable=YESwrite_enable=YESlocal_umask=022 配置虚拟用户(mysql) VSFTPD的本地用户本身是系统的用户,除了可以登录FTP服务器外,还可以登录系统使用其他系统资源,而VSFTPD的虚拟用户则是FTP服务的专用用户,虚拟用户只能访问FTP服务器资源。对于只需要通过FTP对系统有读写权限,而不需要其他系统资源的用户或情况来说,采用虚拟用户方式是很适合的。 VSFTPD的虚拟用户采用单独的用户名/口令保存方式,与系统账号(passwd/shadow)分离,这大大增强了系统的安全性。VSFTPD可以采用数据库文件来保存用户/口令,如hash;也可以将用户/口令保存在数据库服务器中,如MySQL等。VSFTPD验证虚拟用户,则采用PAM方式。由于虚拟用户的用户名/口令被单独保存,因此在验证时,VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是guest用户,这正如同匿名用户也需要有一个系统用户ftp一样。当然,guest用户也可以被认为是用于映射虚拟用户。 配置虚拟用户分为几部分:guest用户的创建、用户/口令的保存、PAM认证配置、vsftpd.conf文件设置等。在后面的例子中,假定存在虚拟用户win和wingger.1、在系统中添加vsftpdvirtual用户,作为虚拟用户在系统中的代表。代码:[root@Linux_win vsftpd]# useradd vsftpdvirtual 当虚拟用户登录后,所在的位置为vsftpdvirtual的自家目录/home/vsftpdvirtual。2、配置文件vsftpd.conf: 加入以下内容guest_enable=YESguest_username=vsftpdvirtualvirtual_use_local_privs=YES|NO3、虚拟用户的权限配置。virtual_use_local_privs参数,当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。所有虚拟用户的权限使用local参数。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限,所有虚拟用户的权限使用anon参数。这两者种做法相比,后者更加严格一些,特别是在有写访问的情形下。默认情况下此参数是关闭的(NO)。由于本人的vsftpd为1.1.3,只好用virtual_use_local_privs=NO了:因此匿名用户的设置即是虚拟用户的设置,在改参数权限时,同时也要修改目录权限如:让用户不能浏览目录,但仍可以对文件操作且虚拟用户目录的权限改为只能由vsftpdvirtual操作:代码:[root@Linux_win vsftpd]# chown vsftpdvirtual.vsftpdvirtual /home/vsftpdvirtual[root@Linux_win vsftpd]# chmod 700 /home/vsftpdvirtual由于这些设置对匿名用户生效。最好是禁止匿名用户登录。在VSFTPD-1.2.0以上版本,当virtual_use_local_privs=YES时,只需write_enable=YES,虚拟用户就可以就拥有写权限。应该与本地用户使用相同,有兴趣的可以去验证。如果不同用户使用不同的目录,须加入权限代码:chown vsftpdvirtual.vsftpdvirtual /home/winchown vsftpdvirtual.vsftpdvirtual /home/wingger4、用MySQL保存虚拟用户 1、虚拟用户的用户名/口令的保存。这部分在MySQL数据库中完成。首先,创建数据库vsftpdvirtual以及表users,并插入虚拟用户win、wingger。执行以下命令:代码:[root@Linux_win vsftpd]# #mysql -uroot -pmysql>create database vsftpdvirtual;mysql>use vsftpdvirtual;mysql>create table users(name char(16) binary,passwd char(16) binary);mysql>insert into users (name,passwd) values ('win',password('123456'));mysql>insert into users (name,passwd) values ('wingger',password('123456'));mysql>quit然后,授权vsftpdvirtual只能读vsftpdvirtual数据库的users表。执行以下命令:代码:[root@Linux_win vsftpd]# mysql -u root mysql -pmysql>grant select on vsftpdvirtual.users to vsftpdvirtual@localhost identified by '123456';mysql>quit验证刚才的操作是否成功可以执行下面命令:代码:[root@Linux_win vsftpd]# mysql -u vsftpdvirtual -p123456 ftpdvirtualmysql>select * from users;如果成功,将会列出wing、wingger和加密后的密码。如下所示:引用:mysql> select * from users;+---------+------------------+| name | passwd |+---------+------------------+| win | 23932fe477657768 || wingger | 23932fe477657768 |+---------+------------------+2 rows in set (0.00 sec) 2、设置PAM认证。这里我们要用到一个利用mysql进行pam验证的开源项目(http://sourceforge.net/projects/pam-mysql/)。首先从网站下载它的程序包pam_myql-0.5.tar.gz。在编译安装之前,要确保mysql-devel的RPM包已经安装在你的机器上,如果没有请从RHL安装光盘中安装该包。然后,执行以下命令:代码:[root@Linux_win vsftpd]# tar xvzf pam_mysql-0.5.tar.gz[root@Linux_win vsftpd]# cd pam_mysql[root@Linux_win vsftpd]# make[root@Linux_win vsftpd]# cp pam_mysql.so /bli/security接下来,我们要设置vsftpd的PAM验证文件。打开/etc/pam.d/vsftpd文件,加入以下内容:引用: auth required pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost db=vsftpdvirtualtable=users usercolumn=name passwdcolumn=passwd crypt=2 account required pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhostdb=vsftpdvirtual table=users usercolumn=name passwdcolumn=passwd crypt=2具体可查看vsftpd源包里的EXAMPLE中的例子。附:虚拟用户文档1、vsftpd.conf配置文件代码:[root@Linux_win vsftpd]# cat vsftpd.conflisten=YESlisten_address=192.168.1.2anonymous_enable=NOlocal_enable=YESwrite_enable=YES#anon_root=anon_upload_enable=YESanon_other_write_enable=YESanon_mkdir_write_enable=YES#anon_world_readable_only=YES#anon_umask=777#dirmessage_enable=YESftpd_banner=welcome to xuanfei’s FTP serverxferlog_enable=YES#xferlog_file=/var/log/vsftpd.logconnect_from_port_20=YES#pasv_mix_port=50000#pasv_max_port=60000#xferlog_std_format=YESmax_clients=10max_per_ip=10hide_ids=YES#limit all users in it's owner dir#chroot_local_user=YES#or limit somechroot_local_user=NOchroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_list#use ownwer conf fileuser_config_dir=/etc/vsftpd/vsftpd_user_confpam_service_name=/etc/pam.d/vsftpdguest_enable=YESguest_username=vsftpdvirtual#virtual_use_local_privs=NO 代码:2、[root@Linux_win vsftpd]# cat /etc/pam.d/vsftpd#%PAM-1.0#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusersonerr=succeed#auth required pam_stack.so service=system-auth#auth required pam_shells.so#account required pam_stack.so service=system-auth#session required pam_stack.so service=system-authauth required /lib/security/pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost db=vsftpdvirtual table=users usercolumn=name passwdcolumn=passwd crypt=2account required /lib/security/pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost db=vsftpdvirtual table=users usercolumn=name passwdcolumn=passwd crypt=2 代码:3、[root@Linux_win vsftpd]# cat /etc/vsftpd/chroot_listwinwingger 代码:4、[root@Linux_win vsftpd]# ls -l /etc/vsftpd/vsftpd_user_conf总用量 8-rw-r--r-- 1 root root 21 1月 8 00:25 win-rw-r--r-- 1 root root 25 1月 8 00:17 wingger 代码:5、[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd_user_conf/winlocal_root=/home/win[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd_user_conf/winggerlocal_root=/home/wingger 代码:6、drwx------ 6 vsftpdvirtual vsftpdvirtual 4096 1月 8 00:16 vsftpdvirtualdrwxrwxrwx 5 vsftpdvirtual vsftpdvirtual 4096 1月 8 01:47 windrwxrwxrwx 3 vsftpdvirtual vsftpdvirtual 4096 1月 8 20:19 wingger7、版本:(vsFTPd 1.1.3)、pam_mysql-0.5.tar.gz、mysql3.23.548、[root@Linux_win vsftpd]# mysql -u vsftpdvirtual -pchenwy vsftpdvirtualmysql> select * from users;+---------+------------------+| name | passwd |+---------+------------------+| win | 23932fe477657768 || wingger | 23932fe477657768 |+---------+------------------+2 rows in set (0.00 sec) 下
面我们使用quota为ftpuser加入磁盘限额,避免恶意用户用垃圾数据塞满你的硬盘.
假设/var/ftp在根分区/(/dev/hda5)中,则将/etc/fstab中根分区的记录的第4个字段改成defaults,
usrquota,这样这条记录看起来类似这样:LABEL=/ / ext3 defaults,usrquota 1 1接着重启系统后输入下列命令:quotacheck -acu #检查启用了配额的文件系统,并为每个文件系统建立一个当前磁盘用来的表quotacheck -avu #生成每个启用了配额的文件系统的当前磁盘用量表edquota ftpuser #为用户ftpuser设置磁盘配额这时系统会在默认文本编辑器(vi)中打开配额文件,显示类似这样:Disk quotas for user ftpuser (uid 501):Filesystem blocks soft hard inodes soft hard/dev/hda5 0 0 0 0 0 0第
一列是启用了配额的文件系统的名称。第二列显示了用户当前使用的块数。随后的两列用来设置用户在该文件系统上的软硬块限度。inodes
列显示了用户当前使用的i节点数量。最后两列用来设置用户在该文件系统上的软硬i节点限度.硬限是用户或组群可以使用的磁盘空间的绝对最大值。达到了该限
度后,磁盘空间就不能再被用户或组群使用了。软限定义可被使用的最大磁盘空间量。和硬限不同的是,软限可以在一段时期内被超过。这段时期被称为过渡期
(grace period)。过渡期可以用秒钟、分钟、小时、天数、周数、或月数表示。如果以上值中的任何一个被设置为
0,那个限度就不会被设置.按你的需要修改后存盘推出. 要校验用户的配额是否被设置,使用以下命令:quota testuser接着使用edquota -t来设置过渡期(grace period) 和另一个 edquota 命令相似,这个命令也会在文本编辑器中打开当前的文件系统配额:Grace period before enforcing soft limits for users:Time units may be: days, hours, minutes, or secondsFilesystem Block grace period Inode grace period/dev/hda5 7days 7days按你的需要修改后存盘退出这样我们就成功的为ftpuser增添了磁盘配额.而一个比较完整的FTP站点也配置完成了。 三、启用与测试也可以用下面的方法来启动vsFTPd# /etc/init.d/vsftpd start重新启动vsFTPd用下面的命令;#/etc/init.d/vsftpd restart关掉vsFTPd服务器,应该用下面的命令;# /etc/init.d/vsftpd stop您要设置一下防火墙,可以把防火墙关掉,或者在自定义中让ftp “通过”防火墙和SELINUX,进行设置命令:# system-config-securitylevel 测试:无论是LINUX环境还是windows环境都可以用浏览器里边网址前边的http:换成ftp即可以或者都可用FTP命令工具来测试。 感谢wingger和demonstrate的原作
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/31663/showart_348121.html |
|