vsftpd架设匿名FTP.docx
《vsftpd架设匿名FTP.docx》由会员分享,可在线阅读,更多相关《vsftpd架设匿名FTP.docx(19页珍藏版)》请在冰豆网上搜索。
![vsftpd架设匿名FTP.docx](https://file1.bdocx.com/fileroot1/2023-1/26/da61487f-86b4-4229-b1fd-a91caa60027f/da61487f-86b4-4229-b1fd-a91caa60027f1.gif)
vsftpd架设匿名FTP
vsftpd架设匿名FTP,本地用户和虚拟用户mysql登录
本文参考了vsftpd安装文档,vsftpd的EXAMPLE及网上众多网友的文章。
环境:
匿名及本地用户:
REDhat9+vsftpd1.1.3(或vftpd2.0.1)。
虚拟用户:
vsftpd1.1.3+mysql3.23.54+pam_mysql0.5
不适用于vsftpd2.0.1+mysql4+pam0.5。
[/b]
请注意:
不要直接copy我这里的配置文件,可以造成ftp启动不正常,所以还是多费点事,自己输入吧
本文对本地用户、虚拟用户目录进行了限制,每个用户拥有自己独立的目录。
本文中所使用的参数具体意义请参数回贴。
配置不外就是修改vsftpc.conf,并指定用户目录,权限等。
对虚拟用户则用pam验证方式。
另:
mkdir建立目录,chown更改权限。
vi编辑文件。
这些命令请参考man文档
vsftpd类别:
1、PORTFTP
首先会建立控制频道,默认值是port21,也就是跟port21建立联机,并透过此联机下达指令。
第二,由FTPserver端会建立数据传输频道,默认值为20,也就是跟port20建立联机,并透过port20作数
据的传输。
2、PASVFTP
首先会建立控制频道,默认值是port21,也就是跟port21联机,并透过此联机下达指令。
第二,会由client端做出数据传输的请求,包括数据传输port的数字。
3、差别:
PORTFTP当中的数据传输port是由FTPserver指定,
而PASVFTP的数据传输port是由FTPclient决定。
通常我们使用PASVFTP,是在有防火墙的环境之下,透过client与server的沟通,决定数据传输的port。
vsftpd安装篇:
1、rpm安装:
代码:
[root@Linux_winvsftpd]#rpm-ivhvsftpd-1.1.3-8.i386.rpm
2、tar.gz的安装
解压后查看README和INSTALL文档
安装前的条件:
进入vsftpd目录
编辑"builddefs.h"文件,里面定义了pam功能,tcp_wrappers功能,ssl功能,根据需要定义pam或tcpwrapper功能,以消ssl功能
然后键入"make".将编译出相应的二进制文件,你可以用以下命令查看
[chris@localhostvsftpd]$ls-lvsftpd
-rwxrwxr-x1rootroot61748Sep2700:
26vsftpd
a、增加“nobody”用户。
在系统中添加此用户,如果用户已经存在,useradd命令有相应提示。
代码:
[root@Linux_winvsftpd]#useraddnobody
useradd:
usernobodyexists
b、建立“/usr/share/empty”目录。
在系统中此目录,如果目录已经存在,mkdir命令有相应提示。
代码:
[root@hpe45root]#mkdir/usr/share/empty/
mkdir:
cannotcreatedirectory'/usr/share/empty':
Fileexists
c、匿名服务帐号:
“ftp”用户和一个有效的匿名目录(默认为/var/ftp)。
代码:
[root@Linux_winvsftpd]#mkdir/var/ftp/
[root@Linux_winvsftpd]#useradd-d/var/ftpftp
d、更改目录的所有者为root,并让ftp用户对自己的主目录不可写
代码:
[root@Linux_winvsftpd]#chownroot.root/var/ftp
[root@Linux_winvsftpd]#chmodog-w/var/ftp
编译VSFTPD
代码:
[root@Linux_winvsftpd]#tarzxvfvsftpd-1.2.0.tar.gz
[root@Linux_winvsftpd]#cdvsftpd-1.2.0
[root@Linux_winvsftpd]#make
安装编译好的VSFTPD
执行“make,makeinstall”将编译好的二进制文件、手册等复制到相应目录。
可能需要手动执行以下复制:
代码:
[root@Linux_winvsftpd]#cpvsftpd/usr/local/sbin/vsftpd
[root@Linux_winvsftpd]#cpvsftpd.conf.5/usr/local/share/man/man5
[root@Linux_winvsftpd]#cpvsftpd.8/usr/local/share/man/man8
如果不存在man5和man8目录,要先建立这两个目录
代码:
[root@Linux_winvsftpd]#mkdir/usr/local/share/man/man5
[root@Linux_winvsftpd]#mkdir/usr/local/share/man/man8
make不会自己copy配置文件,如果makeinstall有错,则必须手工更改
[root@hpe45vsftpd-1.2.0]#cpvsftpd.conf/etc
为本地用户设置PAM
如果允许本地用户登录VSFTPD,执行以下操作:
代码:
[root@Linux_winvsftpd]#cpRedHat/vsftpd.pam/etc/pam.d/vsftpd
3、pam_mysql安装
如果使用mysql的二进制包,那么必须加个开始包,且要修改Makefile文件,指定mysql的lib位置。
代码:
[root@Linux_winvsftpd]#tarxvzfpam_mysql-0.5.tar.gz
[root@Linux_winvsftpd]#cdpam_mysql
[root@Linux_winvsftpd]#make
[root@Linux_winvsftpd]#cppam_mysql.so/lib/security
4、mysql安装。
请查看其它文档
vsftpd启动篇
vsftpd有两种运行方式,一种是standalone一种是viaaninetd(或者inetdorxinetd).
1、如何启动
1)系统自带的
代码:
[root@Linux_winsoftware]#servicevsftpdrestart
2)源包安装:
[root@Linux_winsoftware]#/安装路径/vsftpd&
代码:
[root@Linux_winvsftpd]#/sbin/servicexinetdrestart
或
[root@Linux_winvsftpd]#/usr/local/sbin/vsftpd&
2、standlone启动
具体的运行方式由参数listen决定。
当listen参数值为YES时,VSFTPD单独运行,我们可以使用脚本/etc/rc.d/init.d/vsftpd来启动、关闭以及重启VSFTPD。
命令如下:
代码:
/etc/rc.d/init.d/vsftpdstart|stop|restart
3、xinetd启动,首先要将vsftpd.conf配置文件中的listen参数值改为NO。
其次,生成一个/etc/xinetd.d/vsftpd文件
代码:
[root@Linux_winvsftpd]#vi/etc/vsftpd/vsftpd.conf或vi/etc/vsftp.conf
listen=NO
代码:
[root@Linux_winvsftpd]vi/etc/xinetd.d/vsftpd
内容如下:
servicevsftpd
{
disable=no
socket_type=stream
wait=no
user=root
server=/usr/sbin/vsftpd
port=21
log_on_success+=PIDHOSTDURATION
log_on_failure+=HOST
}
通过修改disable值为no或yes,并重新启动xinetd,从而启动或停止VSFTPD。
配置安全匿名服务器
所要做的就是用vi修改vsftpd.conf文件
代码:
[root@Linux_winvsftpd]#vi/etc/vsftpd.conf或/etc/vsftpd/vsftpd.conf
修改后的vsftpd.conf文件看附件:
引用:
#使用单独模式,并指定监听的IP地址
listen_address=ipaddress
#只允许匿名访问,不允许本地用户访问
anonymous_enable=YES
local_enable=NO
#取消写权限
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
#启用详细的日志记录格式,设定记录传输日志的文件名。
默认值为/var/log/vsftpd.log。
xferlog_enable=YES
xferlog_file=/var/log/vsftp.log
#对连接进行控制,还有超时时间,那就根据具体情况再说了。
connect_from_port_20=YES
pasv_min_port=50000
pasv_max_port=60000
#控制FTP最大并发数,限定每个IP地址的并发数。
max_clients=numericalvalue
max_per_ip=numericalvalue
#限定下载速度
anon_max_rate=80000
#使用ftpd_banner取代VSFTPD默认的欢迎词,免得泄漏相关信息
ftpd_banner=WelcometothisFTPServer
#只让匿名用户浏览可阅读的文件,不可以浏览整个系统
anon_world_readable_only=YES
#隐藏文件的所有者和组信息,匿名用户看到的文件的所有者和组全变为ftp
hide_ids=YES
代码:
附:
vsftpd.conf
[root@Linux_winvsftpd]#catvsftpd.conf
listen=YES
listen_address=192.168.1.2
anonymous_enable=YES
local_enable=NO
write_enable=NO
anon_root=/home
anon_upload_enable=NO
anon_other_write_enable=NO
anon_mkdir_write_enable=NO
anon_world_readable_only=YES
#dirmessage_enable=YES
ftpd_banner=welcometothisFTPserver
xferlog_enable=YES
#xferlog_file=/var/log/vsftpd.log
connect_from_port_20=YES
#pasv_mix_port=50000
#pasv_max_port=60000
#xferlog_std_format=YES
max_clients=10
max_per_ip=10
hide_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_winvsftpd]#vi/etc/vsftpd/vsftpd.conf
修改文件,改后如下
代码:
[root@Linux_winftp]#cat/etc/vsftpd/vsftpd.conf
listen=YES
listen_address=192.168.1.2
anonymous_enable=YES
local_enable=NO
write_enable=YES
#anon_root=
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
#anon_world_readable_only=YES
#dirmessage_enable=YES
ftpd_banner=welcometothisFTPserver
xferlog_enable=YES
#xferlog_file=/var/log/vsftpd.log
connect_from_port_20=YES
#pasv_mix_port=50000
#pasv_max_port=60000
#xferlog_std_format=YES
max_clients=10
max_per_ip=10
hide_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_winftp]#mkidr/var/ftp/upload
[root@Linux_winftp]#chmodo+w/var/ftp/upload
anon_root参数指定的目录或默认的/var/ftp主目录,ftp匿名用户不可有写权限,否则会出错。
办法是在/var/ftp下建立一个新目录,使得该目录对ftp匿名用户可写。
才能上传。
或不用匿名上传,而使用本地用户或虚拟用户。
配置本地用户
修改vsftpd.conf
代码:
[root@Linux_winvsftpd]#cat/etc/vsftpd/vsftpd.conf
listen=YES
listen_address=192.168.1.2
anonymous_enable=NO
local_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=YES
ftpd_banner=welcometothisFTPserver
xferlog_enable=YES
#xferlog_file=/var/log/vsftpd.log
connect_from_port_20=YES
#pasv_mix_port=50000
#pasv_max_port=60000
#xferlog_std_format=YES
max_clients=10
max_per_ip=10
hide_ids=YES
#limitallusersinit'sownerdir
#chroot_local_user=YES
#orlimitsome
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#useownwerconffile
user_config_dir=/etc/vsftpd/vsftpd_user_conf
pam_service_name=/etc/pam.d/vsftpd
#guest_enable=YES
#guest_username=vsftpdvirtual
#virtual_use_local_privs=NO
由于上面了用户列表,因此须建立chroot_list文件,
代码:
[root@Linux_winvsftpd]#touch/etc/vsftpd/chroot_list
并加入以下内容,查看chroot_list文件内容,结果如下
代码:
[root@Linux_winvsftpd]#cat/etc/vsftpd/chroot_list
sam
gem
配置文件中指定了用户配置文件,因此建立此文件
代码:
[root@Linux_winvsftpd]#mkdir/etc/vsftpd/vsftpd_user_conf
并根据用户名建立文件
代码:
[root@Linux_winvsftpd]#touchsam
[root@Linux_winvsftpd]#touchgem
[root@Linux_winvsftpd]#ls-l/etc/vsftpd/vsftpd_user_conf
总用量8
-rw-r--r-- 1root root 21 1月 800:
25sam
-rw-r--r-- 1root root 25 1月 800:
17gem
并在sam,gem文件加加入以下内容,可用vi编辑并保存,下面的虚拟用户也一样,不过只须更改文件内容就可以了
代码:
[root@Linux_winvsftpd]#cat/etc/vsftpd/vsftpd_user_conf/sam
local_root=/home/sam
代码:
[root@Linux_winvsftpd]#cat/etc/vsftpd/vsftpd_user_conf/gem
local_root=/home/gem
本地用户验证要用pam文件,内容是默认的。
代码:
[root@Linux_winvsftpd]#cat/etc/pam.d/vsftpd
#%PAM-1.0
auth required pam_listfile.soitem=usersense=denyfile=/etc/vsftpd.ftpusers
onerr=succeed
auth required pam_stack.soservice=system-auth
auth required pam_shells.so
account required pam_stack.soservice=system-auth
session required pam_stack.soservice=system-auth
配置虚拟用户(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_winvsftpd]#useraddvsftpdvirtual
当虚拟用户登录后,所在的位置为vsftpdvirtual的自家目录/home/vsftpdvirtual。
2、配置文件vsftpd.conf:
加入以下内容
guest_enable=YES
guest_username=vsftpdvirtual
virtual_use_local_privs=