RHEL FTP服务器

在做实验之前我觉得有必要简单的说下ftp的连接模式,还是比较的重要,它的连接分为主动模式和被动模式两种:

主动模式:这中模式下服务器主动发起数据连接,首先由客户端向服务端的21号端口建立FTP控制连接,当需要传输数据时,客户端以PORT命令告知服务器“我打开了某端口,你过来连接我”,于是服务器从20号端口向客户端的该端口发送请求并建立数据连接

被动模式:这中模式下服务器被动等待数据连接,如果客户机所在网络的防火墙禁止主动模式连接,通常会使用被动连接。首先由客户端向服务端的21号端口建立ftp控制连接,当需要传输数据时服务器以PASV命令告知客户端“我打开了某端口,你过来连接我”,于是客户端向服务器的该端口(非20)发送请求并建立数据连接。

一.vsftpd的软件包

[root@localhost mnt]# rpm -ivh /mnt/Server/vsftpd-2.0.5-12.el5.i386.rpm

二.vsftpd的相关文档

/etc/vsftpd/vsftpd.conf:vsftpd的核心配置文件

/etc/vsftpd/ftpusers:用于指定哪些用户不能访问FTP服务器

/etc/vsftpd/user_list:指定允许使用vsftpd的用户列表文件

/etc/vsftpd/vsftpd_conf_migrate.sh:是vsftpd操作的一些变量和设置脚本

/var/ftp/:默认情况下匿名用户的根目录

三vsftpd.conf常见配置项及其含义说明: 
 

匿名用户anonymous_enable=YES
是否允许匿名访问anon_umask=022设置匿名用户所上传文件的默认权限掩码值anon_root=/var/ftp设置匿名用户的ftp跟目录anon_upload_enable=YES是否允许匿名用户上传文件anon_mkdir_write_enable=YES是否允许匿名用户有创建目录的写入权限anon_other_write_enable=YES是否允许匿名用户有其他写入权限(重命名、删除等)anon_max_rate=0限制匿名用户的最大传输速率(0为无限制,单位为字节)本地用户local_enable=YES是否允许本地匿名用户访问local_umask=YES设置本地用户所上传文件的默认权限掩码值local_root=/var/ftp设置本地用户的FTP根目录(缺省值为用户宿主目录)chroot_local_user=YES是否将FTP本地用户禁锢在宿主目录中local_max_rate=0限制本地用户的最大传输速率(0为无限制,单位为字节)全局配置listen=YES是否以独立运行的方式监听服务listen_port=21设置监听FTP服务的端口write_enable=YES启用任何形式的写入权限(上传、删除等)都需要开启此服务download_enable=YES是否允许下载文件dirmessage_enable=YES用户切换进入目录是显示.message文件(如果存在)的内容xferlog_enable=YES启用xferlog日志默认记录到“/var/log/xferlog”文件xferlog_std_format=YES启用标准的xferlog日志,若禁用则适用vsftpd的日志格式connect_from_port_20=YES允许服务器主动模式(从20端口建立连接)pasv_enable=YES允许服务器被动模式连接pasv_max_port=24600允许被动模式的服务器最大端口号pasv_min_port=24500允许被动模式的服务器最小端口号pam_service_name=vsftpdPAM文件位置(/etc/pam.d目录中对应的文件名)userlist_enable=YES是否启用user_list用户列表文件userlist_deny=YES是否禁止user_list中的用户max_clients=0最多允许多少个用户同时连接(0为无限制)max_per_ip=0相同Ip地址的客户端,最多允许多少个并发连接(0为无限制)tcp_wrapper=YES是否启用tcpwrappers主机访问控制

案例一:实现匿名访问,并允许用户自己创建目录

1.配置文件简化:

anonymous_enable=YES                                                    //允许匿名访问
anon_umask=022                                                                //允许匿名用户上传建立文件的权限掩码
anon_upload_enable=YES                                               //允许匿名上传文件
anon_mkdir_write_enable=YES                                        //允许匿名用户创建目录
local_enable=NO                                                              //若不需要启用本地用户,可将此项设置为NO
write_enable=YES                                                               //允许开放写权限
local_umask=022
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

2.调整权限

由于用户要有写入权限,写入权限有本地权限和共享权限决定,我们给予了共享权限还的下放本地权限,我们查看下本地权限??

[root@localhost vsftpd]# ll /var/
 

 drwxr-xr-x  3 root root 4096 10-26 14:46 ftp

本地匿名用户ftp只有r-x权限

匿名FTP根目录“/var/ftp”的默认权限是755,因此不能将该目录的属主更改为匿名用户ftp,否则匿名访问是可能报错                  

所以我们将“/var/pub”的属主修改为匿名用户ftp,便于匿名写入

[root@localhost vsftpd]# ll /var/ftp/
总计 4
 

drwxr-xr-x 2 root root 4096 2007-12-13 pub

[root@localhost vsftpd]# chown  ftp /var/ftp/pub/
[root@localhost vsftpd]# ll /var/ftp/
总计 4
 

drwxr-xr-x 2 ftp root 4096 2007-12-13 pub

现在匿名用户ftp就既有了本地写入权限也有了共享写入权限!!!

3.selinux设置

[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
allow_tftp_anon_write --> off
ftp_home_dir --> off
ftpd_disable_trans --> off
ftpd_is_daemon --> on
httpd_enable_ftp_server --> off
tftpd_disable_trans --> off
[root@localhost ~]# setsebool -P allow_ftpd_anon_write=1
[root@localhost ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> on
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
allow_tftp_anon_write --> off
ftp_home_dir --> off
ftpd_disable_trans --> off
ftpd_is_daemon --> on
httpd_enable_ftp_server --> off
tftpd_disable_trans --> off
 

查看下selinux上下文:

[root@localhost ~]# ll -ldZ /var/ftp/pub/
 

drwxr-xr-x  ftp root system_u:object_r:public_content_t /var/ftp/pub/

chcon -t public_content_rw_t /var/ftp/pub/

 ll -ldZ /var/ftp/pub/
 

drwxr-xr-x  ftp root system_u:object_r:public_content_rw_t /var/ftp/pub/

4.启动服务service vsftpd restart

5.验证:

[root@localhost ~]# ftp 192.168.0.8
Connected to 192.168.0.8.
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.0.8:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir aa
550 Create directory operation failed.
ftp> cd /pub
250 Directory successfully changed.
ftp> mkdir bb
257 "/pub/bb" created
 

现在匿名用户ftp就可以访问了,而且可以在自己的用户目录中创建目录!!!!

案例二:

公司内部现在有一台FTP和WEB服务器,FTP的功能主要用于维护公司的网站内容,包括上传文件、创建目录、更新网页等等哈~公司现有两个部门负责维护任务,他们分别适用team1和team2帐号进行管理。先要求仅允许team1和team2帐号登录FTP服务器,但不能登录本地系统,并将这两个帐号的根目录限制为/var/www/html,不能进入该目录以外的任何目录。

1.添加用户team1和team2

useradd -s /sbin/nologin team1

useradd -s /sbin/nologin team2                                                    //设置这连个用户只能登录到ftp服务器但不能登录系统!

2.简化配置文件:

anonymous_enable=NO                                                               //为了服务器的安全禁用匿名登录
local_enable=YES                                                                         //设置允许本地用户访问
local_root=/var/www/html/                                                              //设置本地用户的ftp根目录
local_umask=022                                                                           //设置本地用户上传建立文件是的默认权限掩码
 

chroot_local_user=YES                                                                //将本地用户禁锢在/var/www/html/中

download_enable=YES                                                                  //允许下载
 

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=YES                                                                //启用user_list文件控制

userlist_deny=NO                                                                      //设置仅允许user_list文件中的用户登录

tcp_wrappers=YES

4.权限设置

[root@localhost ~]# ll -ld /var/www/html/
 

drwxr-xr-x 5 root root 4096 10-26 17:46 /var/www/html/

~~共享写入权限是有了,但是貌似缺少本地写入权限

[root@localhost ~]# chmod o+w /var/www/html/
[root@localhost ~]# ll -ld /var/www/html/
drwxr-xrwx 5 root root 4096 10-26 17:46 /var/www/html/                       //给team1和team2本地写入权限
 

4.selinux设置:

[root@localhost html]# getsebool -a | grep ftp
allow_ftpd_anon_write --> on
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
allow_tftp_anon_write --> off
ftp_home_dir --> off
ftpd_disable_trans --> off
ftpd_is_daemon --> on
httpd_enable_ftp_server --> off
tftpd_disable_trans --> off
 

[root@localhost html]# setsebool -P ftpd_disable_trans on

[root@localhost html]# setsebool -P allow_ftpd_anon_write off
 

5.启动服务:service vsftpd restart

6.验证:

[root@localhost ~]# mkdir /var/www/html/aa.html
 

[root@localhost ~]# mkdir /var/www/html/bb.html

 [root@localhost ~]# mkdir /var/www/html/cc.html                                          

 [root@localhost html]# touch aa.txt                          //为了便于测试我在ftp根目录下建立了多个文件                                               

[root@localhost ~]# ftp 192.168.0.8
Connected to 192.168.0.8.
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.0.8:root): team1                                                                    //team1登录
331 Please specify the password.
Password:
230 Login successful.                                                                                            //登录成功
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,0,8,190,121)
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Oct 26 10:19 [
drwxr-xr-x    2 0        0            4096 Oct 26 09:31 aa.html
-rw-r--r--    1 0        0               0 Oct 26 10:24 aa.txt
drwxr-xr-x    2 0        0            4096 Oct 26 09:31 bb.html
drwxr-xr-x    2 0        0            4096 Oct 26 09:46 cc.html
226 Directory send OK.                                                                    //看到这么多文件说明目录是在/var/www/html
ftp> get aa.txt
local: aa.txt remote: aa.txt
227 Entering Passive Mode (192,168,0,8,243,182)
150 Opening BINARY mode data connection for aa.txt (0 bytes).
226 File send OK.                                                                      //下载成功
ftp> put install.log
local: install.log remote: install.log
227 Entering Passive Mode (192,168,0,8,192,105)
150 Ok to send data.
226 File receive OK.
43957 bytes sent in 0.049 seconds (8.8e+02 Kbytes/s)                       //上传成功
ftp> mkdir hhhhhhhhhhh
257 "/hhhhhhhhhhh" created                                                                //创建目录成功
ftp> cd /var                                                                                   //更改目录失败,只能禁锢在/var/www/html中
550 Failed to change directory.
 

team2也肯定能成功,这里我就省略了team2的验证!

题要求只能是team1和team2登录我们在看看其他用户能否登录,我系统中还有个jgd用户,试试看。。呵呵

[root@localhost ~]# ftp 192.168.0.8
Connected to 192.168.0.8.
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.0.8:root): jgd
530 Permission denied.                                                            //哈哈在登录名验证这快就被刷下来了!
Login failed.
 

ftp>

到此为止这个案例的所有功能就实现了!!!~~

你可能感兴趣的:(服务器,ftp)