在redhat5部署FTP服务
实验环境介绍:
操作系统:Redhat5.8_X64bit
实验平台:VMware Workstation
一、基于匿名用户的FTP服务部署
1、匿名FTP
访问匿名的FTP服务器时不需要密码,只需要用户名"ftp"和"anonymous"。
2、安装vsftpd软件
#yum install vsftpd #rpm -ql vsftpd
3、启动vsftpd服务
#service vsftpd start #chkconfig vsftpd on
4、测试ftp服务是否可以访问
[root@localhost ~]# ftp 192.168.3.3 Connected to 192.168.3.3. 220 (vsFTPd 2.0.5) 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (192.168.3.3:root): ftp //使用匿名用户登录(ftp或者anonymous) 331 Please specify the password. Password: -->密码“空” 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
5、调整匿名上传目录权限,并准备下载测试文件。
# ls -ld /var/ftp/pub/ -->查看修改前的权限 drwxr-xr-x 2 root root 4096Dec 5 2011 /var/ftp/pub/ # chown ftp /var/ftp/pub -->将pub目录属主设置为ftp You have new mail in/var/spool/mail/root # ls -ld /var/ftp/pub/ -->确认修改后的权限 drwxr-xr-x 2 ftp root 4096Dec 5 2011 /var/ftp/pub/ # cp /etc/inittab /var/ftp/ -->复制一个文件到“/var/ftp/”目录,已提供下载测试使用。
6、修改vsftpd.conf配置文件,开放匿名用户访问、上传许可
# vim /etc/vsftpd/vsftpd.conf anonymous_enable=YES //允许匿名用户访问 local_enable=NO //若不需要启用本地用户,可将此配置项设为NO write_enable=YES //允许开放写权限 anon_umask=022 //设置匿名用户上传建立文件时的权限掩码 anon_upload_enable //允许匿名上传文件 anon_mkdir_write_enable=YES //允许匿名用户创建目录 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES pam_service_name=vsftpd userlist_enable=NO //未启用本地用户时,可以将用户列表功能禁用 tcp_wrappers=YES
#service vsftpd restart
[root@localhost ~]# ftp192.168.3.3 //登录vsftpd服务器 Connected to 192.168.3.3. 220 (vsFTPd 2.0.5) 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (192.168.3.3:root): ftp //以匿名用户进行认证,密码可为空或任意字符 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls //查看FTP根目录下的文件、目录列表 227 Entering Passive Mode (192,168,3,3,20,191) 150 Here comes the directory listing. -rw-r--r-- 1 0 0 1666 Nov 25 07:57 inittab drwxr-xr-x 2 14 0 4096 Nov 25 07:57 pub 226 Directory send OK. ftp> get inittab //下载服务器中的inittab文件到本地 local: inittab remote: inittab 227 Entering Passive Mode (192,168,3,3,145,227) 150 Opening BINARY mode data connection for inittab (1666bytes). 226 File send OK. 1666 bytes received in 0.016 seconds (99 Kbytes/s) ftp> cd pub //切换到服务器中用于上传文件的目录 250 Directory successfully changed. ftp> put install.log //上传本地文件到服务器上 local: install.log remote: install.log 227 Entering Passive Mode (192,168,3,3,239,137) 150 Ok to send data. 226 File receive OK. 56895 bytes sent in 0.034 seconds (1.6e+03 Kbytes/s) ftp> ls //查看上传目录中的文件属性 227 Entering Passive Mode (192,168,3,3,149,233) 150 Here comes the directory listing. -rw------- 1 14 50 56895Nov 26 13:04 install.log 226 Directory send OK. ftp> quit //断开FTP连接并退出 221 Goodbye. [root@localhost ~]# ls -lh inittab //查看下载到本地的文件 -rw-r--r-- 1 root root 1.7K Nov 26 21:03 inittab 如果只是下载文件,也可以使用wget工具,指定服务器地址及文件路径即可进行下载 [root@localhost ~]# wget ftp://192.168.3.3/inittab --2015-11-26 21:22:29-- ftp://192.168.3.3/inittab => `inittab' Connecting to 192.168.3.3:21... connected. Logging in as anonymous ... Logged in! ==> SYST ... done. ==> PWD ... done. ==> TYPE I ... done. ==> CWD not needed. ==> SIZE inittab ... 1666 ==> PASV ... done. ==> RETR inittab ... done. Length: 1666 (1.6K) 100%[===================>] 1,666 --.-K/s in0s 2015-11-26 21:22:29 (4.24 MB/s) - `inittab' saved [1666]
注意:由于匿名FTP根目录”/var/ftp/”的默认权限为755,因此不要将目录的属主更改为ftp,否则匿名访问时可能会报错”500 OOPS:vsftpd:refusing to run with writable anonymous root”,导致访问失败。
二、基于本地用户的FTP服务部署
vsftpd可以直接使用Linux系统的本地用户作为FTP用户,提供基于用户名和密码的登录验证。使用本地用户登录FTP服务器后,默认将位于自己的宿主目录中,且在宿主目录中拥有读写权限,并允许切换到其他目录。使用chroot_local_user配置项可以将本地用户禁锢在宿主目录中(不允许切换到其他目录下),使用local_root配置项可以将本地用户的ftp根目录设置为同一个文件夹。
下面配置一个基于本地用户并进行带宽、用户数限制的FTP服务器为例,操作步骤如下:
1、添加FTP测试用户(即本地用户),并准备下载测试文件。
[root@localhost ~]# useradd test1 [root@localhost ~]# passwd test1 [root@localhost ~]# ls -lh /etc/*.conf > /home/test1/etcconf.list
2、修改vsftpd.conf配置文件,开放本地用户。
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf anonymous_enable=NO //若不需要启用匿名访问,可将此配置项设为NO local_enable=YES //允许本地用户访问 write_enable=YES //允许开放写权限 local_umask=022 //设置本地用户上传建立文件时的权限掩码 chroot_local_user=YES //为安全起见,建议将用户禁锢于宿主目录中 max_client=20 //限制并发客户连接数为最多20个 max_per_ip=2 //限制来自同一IP的客户连接数最多为2个 local_max_rate=102400 //本地用户下载、上传限速为100KB/s chroot_local_user=YES //允许被动模式并设置端口范围 max_clients=20 max_per_ip=2 local_max_rate=102400 pasv_enable=YES pasv_min_port=24500 pasv_max_port=24600 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES :wq 保存退出
如果希望vsftpd服务只对特定的本地用户开放,可以使用userlist_enable、userlist_deny配置项并结合用户列表文件'/etc/vsftpd/user_list'实现。
例如:结合user_list文件配置仅允许本地用户test1访问vsftpd服务器。
#vim /etc/vsftpd/user_list test1 //添加此行,并清空其他内容 #vim /etc/vsftpd/vsftpd.conf //修改或添加以下两行配置项 userlist_enable=YES userlist_deny=NO
3、重新启动vsftpd服务
[root@localhost ~]# service vsftpd restart
4、在客户端访问FTP服务器(192.168.3.3),测试下载及上传功能
[root@localhost ~]# ftp 192.168.3.3 //登录vsftpd服务器 Connected to 192.168.3.3. 220 (vsFTPd 2.0.5) 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (192.168.3.3:root): test1 //test1用户登录 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd //查看当前目录 257 "/" ftp> ls //查看FTP根目录下的文件、目录列表 227 Entering Passive Mode (192,168,3,3,95,218) 150 Here comes the directory listing. -rw-r--r-- 1 0 0 2831 Nov 27 12:19 etcconf.list 226 Directory send OK. ftp> get etcconf.list //下载服务器中的etcconf.list文件到本地 local: etcconf.list remote: etcconf.list 227 Entering Passive Mode (192,168,3,3,95,248) 150 Opening BINARY mode data connection for etcconf.list (2831 bytes). 226 File send OK. 2831 bytes received in 0.00064 seconds (4.3e+03 Kbytes/s) ftp> put install.log //上传本地文件到服务器上 local: install.log remote: install.log 227 Entering Passive Mode (192,168,3,3,95,203) 150 Ok to send data. 226 File receive OK. 56895 bytes sent in 0.038 seconds (1.5e+03 Kbytes/s) ftp> ls //查看上传目录中的文件属性 227 Entering Passive Mode (192,168,3,3,95,250) 150 Here comes the directory listing. -rw-r--r-- 1 0 0 2831 Nov 27 12:19 etcconf.list -rw-r--r-- 1 502 502 56895 Nov 27 13:23 install.log 226 Directory send OK. ftp>
三、建立基于虚拟用户的vsftpd服务
1、建立虚拟用户的用户名/密码数据
vsftpd服务的虚拟用户数据库时使用Berkeley DB格式的数据库。建立该数据库文件需要用到db_load命令工具。
[root@localhost ~]# yum install db4-utils //安装此包获得db_load命令
2、建立文本格式的用户名/密码列表文件,奇数行为用户名,偶数行为上一行中的用户所对应的密码。
[root@localhost ~]# vim /etc/vsftpd/vusers.list (文件名可以随便取) mike 123 john 456
3、然后用db_load工具将列表文件转化为DB数据库文件
[root@localhost ~]# cd /etc/vsftpd/ [root@localhost vsftpd]# db_load -T -t hash -f vusers.list vusers.db [root@localhost vsftpd]# file vusers.db //查看文件类型 vusers.db: Berkeley DB (Hash, version 8, native byte-order) [root@localhost vsftpd]# chown 600 /etc/vsftpd/vusers.* //降低文件权限以提高安全性 db_load选项说明: -f:用于指定用户名/密码列表文件 -T:允许非Berkeley DB的应用程序使用从文本格式转换的DB数据文件 -t hash:指定读取数据文件的基本方法 关于db_load命令的详细说明可参阅"cat /usr/share/doc/db4-utils-4.3.29/utility/db_load.html "文件。
4、建立FTP访问的根目录及虚拟用户对应的系统账号
vsftpd虚拟用户需要有一个对应的系统用户账号(该账号无需设置密码及登录shell),该用户账号的宿主目录作为所有虚拟用户登录后的共同FTP根目录。
[root@localhost ~]# useradd -d /var/ftproot -s /sbin/nologin virtual //建立映射账号virtual [root@localhost ~]# chmod 755 /var/ftproot/ //更改FTP根目录权限 [root@localhost ~]# ls -lh /boot >/var/ftproot/vutest.file //建立测试文件
5、建立PAM认证文件
PAM配置文件主要用于为程序提供用户认证控制,vsftpd服务使用默认的PAM配置文件为“/etc/pam.d/vsftpd”,可以参考该文件的格式建立新的PAM配置文件,用于虚拟用户认证控制。
[root@localhost ~]# vim /etc/pam.d/vsftpd.vu //添加下面几行内容 #%PAM-1.0 auth required pam_userdb.so db=/etc/vsftpd/vusers account required pam_userdb.so db=/etc/vsftpd/vusers
注意:db指向的数据库文件vusers(省略.db扩展名)
6、修改vsftpd.conf配置文件,添加虚拟用户支持
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf anonymous_enable=NO local_enable=YES //使用虚拟用户需要启用本地用户 write_enable=YES anon_umask=022 //设置虚拟用户所上传文件的默认权限掩码 guest_enable=YES //启用用户映射功能 guest_username=virtual //将映射用户指定为virtual dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES pam_service_name=vsftpd.vu //修改使用PAM文件位置 userlist_enable=YES tcp_wrappers=YES
7、为不同的虚拟用户建立独立的配置文件
通过前面几个步骤,实际上已经可以重新启动vsftpd并提供服务,使用虚拟用户账号可以登陆FTP服务器下载文件。本步骤将介绍为个别虚拟用户设置不同的访问权限,
1)、修改vsftpd.conf主配置文件,添加用户配置目录支持。
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vusers_dir //添加此行配置项,指定用户配置目录位置
2)、为mike、john建立的配置目录文件
[root@localhost ~]# mkdir /etc/vsftpd/vusers_dir/ //创建用户配置目录 [root@localhost ~]# cd /etc/vsftpd/vusers_dir/ [root@localhost vusers_dir]# vim john //为john用户建立独立的配置文件 anon_upload_enable=YES anon_mkdir_write_enable=YES [root@localhost vusers_dir]# touch mike //为mike用户建立空配置文件(无额外权限设置)
8、重新启动vsftpd服务
[root@localhost ~]# service vsftpd restart
9、使用虚拟用户账号访问FTP服务
在客户端使用虚拟用户mike、john分别登录FTP服务器进行下载、上传文件测试,结果如下:
使用mike用户可以登录测试vsftpd服务器,并可以浏览、下载文件,但是无法上传文件。
使用john用户可以登录vsftpd服务器,且可以浏览、下载文件,也可以上传文件。
使用匿名用户或者其他系统用户时,将不能登录该vsftpd服务器。