700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > LinuxProbe 0x14 虚拟网站主机功能(基于端口) Vsftpd服务传输文件 TFTP简单文件传输协议

LinuxProbe 0x14 虚拟网站主机功能(基于端口) Vsftpd服务传输文件 TFTP简单文件传输协议

时间:2019-02-08 14:34:44

相关推荐

LinuxProbe 0x14 虚拟网站主机功能(基于端口) Vsftpd服务传输文件 TFTP简单文件传输协议

虚拟网站主机功能

基于端口号

基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源。在使用Apache配置虚拟网站主机功能时,基于端口号的配置方式是最复杂的。

因此我们不仅要考虑httpd服务程序的配置因素,还需要考虑到SELinux服务对新开设端口的监控。一般来说,使用80、443、8080等端口号来提供网站访问服务是比较合理的,如果使用其他端口号则会受到SELinux服务的限制。

第1步:分别在/home/wwwroot中创建用于保存不同网站数据的三个目录,并向其中分别写入网站的首页文件。

第2步:在httpd服务配置文件的第46行至48行分别添加用于监听6111、6222和6333端口的参数。

第3步:在httpd服务的配置文件中大约134行处开始,分别追加写入三个基于端口号的虚拟主机网站参数,然后保存并退出,并重启httpd服务。

第4步: 正确设置网站数据目录文件的SELinux安全上下文,使其与网站服务功能相吻合,并用restorecon命令让新配置的SELinux安全上下文立即生效。

第5步:SELinux允许的与HTTP协议相关的端口号中默认没有包含6111、6222和6333,因此需要将这三个端口号手动添加进去。该操作会立即生效,而且在系统重启过后依然有效。

# dnf install httpd# mkdir -p /home/wwwroot/6111# mkdir -p /home/wwwroot/6222# mkdir -p /home/wwwroot/6333# echo "port:6111" > /home/wwwroot/6111/index.html# echo "port:6222" > /home/wwwroot/6222/index.html# echo "port:6333" > /home/wwwroot/6333/index.html# vim /etc/httpd/conf/httpd.conf37 # Listen: Allows you to bind Apache to specific IP addresses and/or38 # ports, instead of the default. See also the39 # directive.40 #41 # Change this to Listen on specific IP addresses as shown below to42 # prevent Apache from glomming onto all bound IP addresses.43 #44 #Listen 12.34.56.78:8045 Listen 8046 Listen 611147 Listen 622248 Listen 6333# vim /etc/httpd/conf/httpd.conf134 <VirtualHost 192.168.10.10:6111>135DocumentRoot /home/wwwroot/6111136ServerName 域名暂不生效随意写137<Directory /home/wwwroot/6111> 目录权限138AllowOverride None 伪静态139Require all granted 允许访问140</Directory>141 </VirtualHost>142 <VirtualHost 192.168.10.10:6222>143DocumentRoot /home/wwwroot/6222144ServerName 145<Directory /home/wwwroot/6222>146AllowOverride None147Require all granted148</Directory>149 </VirtualHost>150 <VirtualHost 192.168.10.10:6333>151DocumentRoot /home/wwwroot/6333152ServerName 153<Directory /home/wwwroot/6333>154AllowOverride None155Require all granted156</Directory>157 </VirtualHost># ls -ldZ /var/www/html# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6111/*# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6222/*# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/6333/*# restorecon -Rv /home/wwwroot/# semanage port -a -t http_port_t -p tcp 6111# semanage port -a -t http_port_t -p tcp 6222# semanage port -a -t http_port_t -p tcp 6333# semanage port -l | grep http# systemctl restart httpd# systemctl enable httpd# firefox

机器端口:0 - 65535个

Apache访问控制

Apache可以基于源主机名、源IP地址或源主机上的浏览器特征等信息对网站上的资源进行访问控制。

它通过Allow指令允许某个主机访问服务器上的网站资源,通过Deny指令实现禁止访问。

在允许或禁止访问网站资源时,还会用到Order指令,这个指令用来定义Allow或Deny指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。

比如“Order Allow, Deny”表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求。

第1步:先在服务器上的网站数据目录中新建一个子目录,并在这个子目录中创建一个包含Successful单词的首页文件。

第2步:打开httpd服务的配置文件,在第161行后面添加下述规则来限制源主机的访问。

这段规则的含义是允许使用Firefox浏览器的主机访问服务器上的首页文件,除此之外的所有请求都将被拒绝。

# dnf install httpd# mkdir /var/www/html/server# echo "Successful" > /var/www/html/server/index.html# vim /etc/httpd/conf/httpd.conf161 <Directory "/var/www/html/server">162SetEnvIf User-Agent "Firefox" ff=1 ##set environment if 判断用户的环境变量 ff 别名163Order allow,deny ##用户对一个允许判断,没有允许的全部拒绝164Allow from env=ff165 </Directory># systemctl restart httpd# systemctl enable httpd# firefox# iptables -F# firewall-cmd --zone=public --add-service=http

除了匹配源主机的浏览器特征之外,还可以通过匹配源主机的IP地址进行访问控制。例如,我们只允许IP地址为192.168.10.20的主机访问网站资源,那么就可以在httpd服务配置文件的第161行后面添加下述规则。

# vim /etc/httpd/conf/httpd.conf161 <Directory "/var/www/html/server">162Order allow,deny163Allow from 192.168.10.4 </Directory># systemctl restart httpd# systemctl enable httpd# firefox

Vsftpd服务传输文件

文件传输协议(File Transfer Protocol,FTP)

vsftpd服务程序三种认证模式(匿名开放模式、本地用户模式、虚拟用户模式)

可插拔认证模块(Pluggable Authentication Module,PAM)

简单文件传输协议(Trivial File Transfer Protocol,TFTP)

为了能够在装有Windows、Linux、UNIX、Mac等不同的操作系统的设备之间解决问题解决文件传输问题,FTP(File Transfer Protocol)文件传输协议应运而生。

FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20用于进行数据传输,端口21用于接受客户端发出的相关FTP命令与参数。

FTP服务器普遍部署于内网中,具有容易搭建、方便管理的特点。而且有些FTP客户端工具还可以支持文件的多点下载以及断点续传技术。

FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,FTP客户端则是向服务器发送连接请求,以建立数据传输链路的主机。

FTP协议有下面两种工作模式

主动模式:FTP服务器主动向客户端发起连接请求。

被动模式:FTP服务器等待客户端发起连接请求(默认工作模式)。

vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。在不影响使用的前提下,能够让管理者自行决定是公开匿名、本地用户还是虚拟用户的验证方式。

# dnf install vsftpd清空并保存防火墙策略# iptables -F# iptables-save把FTP协议添加到firewalld服务的允许列表中# firewall-cmd --permanent --zone=public --add-service=ftp# firewall-cmd --reloadvsftpd服务程序的主配置文件(/etc/vsftpd/vsftpd.conf), 通过grep -v 过滤掉注释行信息,并将文件写入到源文件中# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf# cat /etc/vsftpd/vsftpd.confanonymous_enable=NOlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESlisten=NOlisten_ipv6=YESpam_service_name=vsftpduserlist_enable=YES

vsftpd服务程序常用的参数以及作用

vsftpd作为更加安全的文件传输协议服务程序,允许用户以三种认证模式登录到FTP服务器上。

匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。

本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。

虚拟用户模式:更安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。

ftp是Linux系统中以命令行界面的方式来管理FTP传输服务的客户端工具。

# dnf install ftp

匿名访问模式

vsftpd服务程序默认关闭了匿名开放模式,需要做的就是开放匿名用户的上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限。

向匿名用户开放的权限参数以及作用

# vim /etc/vsftpd/vsftpd.conf1 anonymous_enable=YES 匿名2 anon_umask=022 文件/目录新建后权限大小 3 anon_upload_enable=YES 文件传输4 anon_mkdir_write_enable=YES 可读可写5 anon_other_write_enable=YES 其他写入权限 剪切等6 local_enable=YES7 write_enable=YES8 local_umask=0229 dirmessage_enable=YES10 xferlog_enable=YES11 connect_from_port_20=YES12 xferlog_std_format=YES13 listen=NO14 listen_ipv6=YES15 pam_service_name=vsftpd16 userlist_enable=YES重启vsftpd服务程序,让新的配置参数生效# systemctl restart vsftpd# systemctl enable vsftpd在vsftpd服务程序的匿名开放认证模式下,其账户统一为anonymous,密码为空。在连接到FTP服务器后,默认访问的是/var/ftp目录。# ftp 192.168.10.10Connected to 192.168.10.10 (192.168.10.10).220 (vsFTPd 3.0.3)Name (192.168.10.10:root): anonymous331 Please specify the password.Password:此处敲击回车即可230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> cd pub250 Directory successfully changed.ftp> mkdir files550 Permission denied.权限拒绝# ls -ld /var/ftp/pubdrwxr-xr-x. 2 root root 6 Aug 13 /var/ftp/pub# chown -R ftp /var/ftp/pub# ls -ld /var/ftp/pubdrwxr-xr-x. 2 ftp root 6 Aug 13 /var/ftp/pub# ftp 192.168.10.10Connected to 192.168.10.10 (192.168.10.10).220 (vsFTPd 3.0.3)Name (192.168.10.10:root): anonymous331 Please specify the password.Password:此处敲击回车即可230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> cd pub250 Directory successfully changed.ftp> mkdir files550 Create directory operation failed.创建目录的操作失败修改SELinux策略并将策略加入开机启动中 SELinux域# getsebool -a | grep ftp# setsebool -P ftpd_full_access=on //再次尝试# ftp 192.168.10.10ftp> cd pub250 Directory successfully changed.ftp> mkdir files257 "/pub/files" createdftp> rename files database350 Ready for RNTO.250 Rename successful.ftp> rmdir database250 Remove directory operation successful.ftp> exit221 Goodbye.

本地用户模式

本地用户模式使用的权限参数以及作用

默认情况下本地用户所需的参数都已经在了,不需要修改。而umask这个参数一般中文被称为权限掩码或权限补码,能够直接影响到新建文件的权限值。

例如Linux系统中新建普通文件后权限是644,新建的目录权限是755,虽然用户都习以为常了,但为什么是这个数呢?

首先不得不说到其实普通文件的默认权限应该是666,目录权限会是777,这是写在系统配置文件中的。但默认值不等于最终权限值,根据公式“默认权限 - umask = 实际权限”,而umask值默认是022,所以实际文件到手就剩下644,目录文件剩下755了。

# vim /etc/vsftpd/vsftpd.conf1 anonymous_enable=NO2 local_enable=YES3 write_enable=YES4 local_umask=0225 dirmessage_enable=YES6 xferlog_enable=YES7 connect_from_port_20=YES8 xferlog_std_format=YES9 listen=NO10 listen_ipv6=YES11 pam_service_name=vsftpd12 userlist_enable=YES重启vsftpd服务程序,让新的配置参数生效# systemctl restart vsftpd# systemctl enable vsftpd

vsftpd服务程序所在的目录中默认存放着两个名为“用户名单”的文件(ftpusers和user_list), vsftpd服务程序目录中的这两个文件只要里面写有某位用户的名字,就不再允许这位用户登录到FTP服务器上。

# ftp 192.168.10.10Connected to 192.168.10.10 (192.168.10.10).220 (vsFTPd 3.0.3)Name (192.168.10.10:root): root530 Permission denied.Login failed.ftp>此文件中包含的用户名,则无法登陆系统中 将两个文件中的root用户删除,就可以root用户登录了 # cat /etc/vsftpd/user_list# cat /etc/vsftpd/ftpuserss

同样是禁止用户登录的功能,却要做两个一摸一样的文件呢?

其实在user_list文件上面,如果把上面主配置文件中userlist_deny参数值改成NO,那么user_list列表就变成了强制白名单,功能完全是反过来的,只允许列表内的用户访问,拒绝其他人。

修改SELinux策略并将策略加入开机启动中# getsebool -a | grep ftp# setsebool -P ftpd_full_access=on# ftp 192.168.10.10Connected to 192.168.10.10 (192.168.10.10).220 (vsFTPd 3.0.3)Name (192.168.10.10:root): root331 Please specify the password.Password:此处输入该用户的密码230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> mkdir files257 "/root/files" createdftp> rename files database350 Ready for RNTO.250 Rename successful.ftp> rmdir database250 Remove directory operation successful.ftp> exit221 Goodbye.

虚拟用户模式

虚拟用户模式是这三种模式中最安全的一种认证模式,是专门创建出一个账号来登录FTP传输服务的,而不能用于SSH登录服务器。

第1步:重置安装vsftpd服务后。创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。

第2步:创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。

FTP服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。

第3步:建立用于支持虚拟用户的PAM文件。

第4步:在vsftpd服务程序的主配置文件中通过pam_service_name参数将PAM认证文件的名称修改为vsftpd.vu,PAM作为应用程序层与鉴别模块层的连接纽带,可以让应用程序根据需求灵活地在自身插入所需的鉴别功能模块。

当应用程序需要PAM认证时,则需要在应用程序中定义负责认证的PAM配置文件,实现所需的认证功能。

第5步:为虚拟用户设置不同的权限( 上传、创建、修改、查看、删除文件)。

第6步:设置SELinux域允许策略,使用虚拟用户模式登录FTP服务器。

# cd /etc/vsftpd/# vim vuser.listzhangsan 账号redhat 密码lisi 账号redhat 密码使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限,然后再把原始的明文信息文件删除。# db_load -T -t hash -f vuser.list vuser.db# chmod 600 vuser.db# rm -f vuser.list创建映射账户并禁止该账户登录系统# useradd -d /var/ftproot -s /sbin/nologin virtual# ls -ld /var/ftproot/# chmod -Rf 755 /var/ftproot/新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀# vim /etc/pam.d/vsftpd.vuauth requiredpam_userdb.so db=/etc/vsftpd/vuseraccount requiredpam_userdb.so db=/etc/vsftpd/vuser修改配置文件# vim /etc/vsftpd/vsftpd.conf 1 anonymous_enable=NO2 local_enable=YES3 write_enable=YES4 guest_enable=YES5 guest_username=virtual虚拟用户登录xiaofu6 allow_writeable_chroot=YES 7 local_umask=0228 dirmessage_enable=YES9 xferlog_enable=YES10 connect_from_port_20=YES11 xferlog_std_format=YES12 listen=NO13 listen_ipv6=YES14 pam_service_name=vsftpd.vu 指定修改后的pam对应15 userlist_enable=YES设置权限# mkdir /etc/vsftpd/vusers_dir/# cd /etc/vsftpd/vusers_dir/# touch lisi# vim zhangsananon_upload_enable=YESanon_mkdir_write_enable=YESanon_other_write_enable=YES修改vsftpd主配置文件,通过添加user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径。# vim /etc/vsftpd/vsftpd.conf15 userlist_enable=YES16 user_config_dir=/etc/vsftpd/vusers_dir重启vsftpd服务程序,让新的配置参数生效# systemctl restart vsftpd# systemctl enable vsftpd修改SELinux策略并将策略加入开机启动中# getsebool -a | grep ftp# setsebool -P ftpd_full_access=on# ftp 192.168.10.10Connected to 192.168.10.10 (192.168.10.10).220 (vsFTPd 3.0.3)Name (192.168.10.10:root): lisi331 Please specify the password.Password:此处输入虚拟用户的密码230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> mkdir files550 Permission denied.ftp> exit221 Goodbye.

PAM可插拔认证模块是一种认证机制,通过一些动态链接库和统一的API把系统提供的服务与认证方式分开,使得系统管理员可以根据需求灵活调整服务程序的不同认证方式。

PAM是一组安全机制的模块,系统管理员可以用来轻易地调整服务程序的认证方式,而不必对应用程序进行任何修改。PAM采取了分层设计的思想,包含应用程序层、应用接口层、鉴别模块层

利用PAM文件进行认证时使用的参数以及作用

vsftpd服务程序登陆后所在目录

TFTP简单文件传输协议

简单文件传输协议(Trivial File Transfer Protocol,TFTP)是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议。

TFTP的命令功能不如FTP服务强大,甚至不能遍历目录,在安全性方面也弱于FTP服务。

由于TFTP在传输文件时采用的是UDP协议,占用的端口号为69,因此文件的传输过程也不像FTP协议那样可靠。

但是,因为TFTP不需要客户端的权限认证,也就减少了无谓的系统和网络带宽消耗,因此在传输琐碎(trivial)不大的文件时,效率更高。

tftp-server是服务程序,tftp是用于连接测试的客户端工具,xinetd是管理服务

# dnf install tftp-server tftp xinetd

TFTP服务是使用xinetd服务程序来管理的。xinetd服务可以用来管理多种轻量级的网络服务,而且具有强大的日志功能,专门用于管理那些比较小的应用程序的开关工作,想开启那个服务就编辑对应的xinetd配置文件的开关参数。

在安装TFTP软件包后,还需要在xinetd服务程序中将其开启。在RHEL 8版本系统中tftp所对应的配置文件默认不存在,需要用户根据示例文件(/usr/share/doc/xinetd/sample.conf)自行创建。

# vim /etc/xinetd.d/tftpservice tftp{socket_type = dgramprotocol= udpwait= yesuser= rootserver = /usr/sbin/in.tftpdserver_args = -s /var/lib/tftpbootdisable = noper_source = 11cps = 100 2flags = IPv4}重启xinetd服务并将它添加到系统的开机启动项中,将69端口号加入到防火墙的允许策略中# systemctl restart xinetd# systemctl enable xinetd# firewall-cmd --zone=public --permanent --add-port=69/udp# firewall-cmd --reload

TFTP的根目录为/var/lib/tftpboot。

tftp命令中可用的参数以及作用

# echo "i love linux" > /var/lib/tftpboot/readme.txt# tftp 192.168.10.10tftp> get readme.txttftp> quit# lsanaconda-ks.cfg Documents initial-setup-ks.cfg Pictures readme.txt VideosDesktopDownloads Music Public Templates# cat readme.txti love linux

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。