###############################################
案例4:编写一个判断脚本
在 server0 上创建 /root/foo.sh 脚本
1)当运行/root/foo.sh redhat,输出为fedora
2)当运行/root/foo.sh fedora,输出为redhat
3)当没有任何参数或者参数不是 redhat 或者 fedora时,
其错误输出产生以下信息: /root/foo.sh redhat|fedora
在 server0 上创建 /root/foo.sh 脚本
1)当运行/root/foo.sh redhat,输出为fedora
2)当运行/root/foo.sh fedora,输出为redhat
3)当没有任何参数或者参数不是 redhat 或者 fedora时,
其错误输出产生以下信息: /root/foo.sh redhat|fedora
[root@server0 ~]# vim /root/foo.sh
#!/bin/bash
if [ $# -eq 0 ];then
echo '/root/foo.sh redhat|fedora' >&2 #正确变成错误
exit 3 #程序运行退出状态值
elif [ $1 == redhat ];then
echo fedora
elif [ $1 == fedora ];then
echo redhat
else
echo '/root/foo.sh redhat|fedora' >&2 #正确变成错误
exit 4 #程序运行退出状态值
fi
[root@server0 ~]#
##############################################
案例5:编写一个批量添加用户脚本
在 server0 上创建 /root/batchusers 脚本
1)此脚本要求提供用户名列表文件作为参数
2)如果没有提供参数,此脚本应该给出提示
Usage: /root/batchusers,退出并返回相应值
3)如果提供一个不存在的文件,此脚本应该给出提
示 Input file not found,退出并返回相应值
4)新用户的登录Shell为 /bin/false,无需设置密码
5)用户列表测试文件:
[root@server0 ~]# cat /root/userlist
duanwu
zhongqiu
zhsan
lisi
[root@server0 ~]# vim /root/batchusers
#!/bin/bash
if [ $# -eq 0 ];then
echo 'Usage: /root/batchusers' >&2
exit 2
elif [ -f $1 ];then
for i in `cat $1`
do
useradd -s /bin/false $i &> /dev/null
echo $i创建成功
done
else
echo 'Input file not found' >&2
exit 3
fi
[root@server0 ~]# /root/batchusers /root/userlist
#!/bin/bash
if [ $# -eq 0 ];then
echo '/root/foo.sh redhat|fedora' >&2 #正确变成错误
exit 3 #程序运行退出状态值
elif [ $1 == redhat ];then
echo fedora
elif [ $1 == fedora ];then
echo redhat
else
echo '/root/foo.sh redhat|fedora' >&2 #正确变成错误
exit 4 #程序运行退出状态值
fi
[root@server0 ~]#
##############################################
案例5:编写一个批量添加用户脚本
在 server0 上创建 /root/batchusers 脚本
1)此脚本要求提供用户名列表文件作为参数
2)如果没有提供参数,此脚本应该给出提示
Usage: /root/batchusers,退出并返回相应值
3)如果提供一个不存在的文件,此脚本应该给出提
示 Input file not found,退出并返回相应值
4)新用户的登录Shell为 /bin/false,无需设置密码
5)用户列表测试文件:
[root@server0 ~]# cat /root/userlist
duanwu
zhongqiu
zhsan
lisi
[root@server0 ~]# vim /root/batchusers
#!/bin/bash
if [ $# -eq 0 ];then
echo 'Usage: /root/batchusers' >&2
exit 2
elif [ -f $1 ];then
for i in `cat $1`
do
useradd -s /bin/false $i &> /dev/null
echo $i创建成功
done
else
echo 'Input file not found' >&2
exit 3
fi
[root@server0 ~]# /root/batchusers /root/userlist
################################################
系统安全保护
系统安全保护
SELinux概述
• Security-Enhanced Linux
– 美国NSA国家安全局主导开发,一套增强Linux系统安
全的强制访问控制体系
• Security-Enhanced Linux
– 美国NSA国家安全局主导开发,一套增强Linux系统安
全的强制访问控制体系
• SELinux的运行模式
– enforcing(强制)、permissive(宽松)
– disabled(彻底禁用)
任何模式变成disabled(彻底禁用),都需要经历重起系统
• 切换运行模式
– 临时切换:setenforce 1|0
– 固定配置:/etc/selinux/config 文件
– 临时切换:setenforce 1|0
– 固定配置:/etc/selinux/config 文件
虚拟机Server0与虚拟机Desktop0
[root@server0 ~]# getenforce
Enforcing
[root@server0 ~]# setenforce 0 #临时修改模式
[root@server0 ~]# getenforce
Permissive
[root@server0 ~]# getenforce
Enforcing
[root@server0 ~]# setenforce 0 #临时修改模式
[root@server0 ~]# getenforce
Permissive
[root@server0 ~]#
vim /etc/selinux/config #永久修改
SELINUX=permissive
SELINUX=permissive
#################################################
搭建基本的Web服务
1.安装httpd软件包
[root@server0 ~]# yum -y install httpd
[root@server0 ~]# yum -y install httpd
2.重起httpd服务
[root@server0 ~]# systemctl restart httpd
[root@server0 ~]# systemctl enable httpd
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
[root@server0 ~]#
[root@server0 ~]# systemctl restart httpd
[root@server0 ~]# systemctl enable httpd
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
[root@server0 ~]#
3.本机访问测试
[root@server0 ~]# firefox 172.25.0.11
[root@server0 ~]# firefox 172.25.0.11
4.书写网页文件
默认存放网页文件路径:/var/www/html
默认网页文件名称:index.html
[root@server0 ~]# vim /var/www/html/index.html
<marquee><font color=red><h1>NSD1810 阳光明媚
滚动 字体颜色 红色 最大字体
默认存放网页文件路径:/var/www/html
默认网页文件名称:index.html
[root@server0 ~]# vim /var/www/html/index.html
<marquee><font color=red><h1>NSD1810 阳光明媚
滚动 字体颜色 红色 最大字体
[root@server0 ~]# firefox 172.25.0.11
搭建基本FTP服务
FTP:文件传输协议
1.安装vsftpd软件包
[root@server0 ~]# yum -y install vsftpd
[root@server0 ~]# yum -y install vsftpd
2.重起vsftpd服务
[root@server0 ~]# systemctl restart vsftpd
[root@server0 ~]# systemctl enable vsftpd
[root@server0 ~]# systemctl restart vsftpd
[root@server0 ~]# systemctl enable vsftpd
FTP默认共享路径:/var/ftp
3.本机访问测试
[root@server0 ~]# firefox ftp://172.25.0.11
[root@server0 ~]# firefox ftp://172.25.0.11
[root@server0 ~]# cp /etc/redhat-release /var/ftp
[root@server0 ~]# firefox ftp://172.25.0.11
################################################
防火墙规则管理
作用:过滤与隔离
防火墙规则管理
作用:过滤与隔离
允许出站,过滤入站
硬件防火墙
软件防火墙
硬件防火墙
软件防火墙
RHEL7的防火墙体系
• 系统服务:firewalld
• 管理工具:firewall-cmd、firewall-config
• 系统服务:firewalld
• 管理工具:firewall-cmd、firewall-config
预设安全区域
• 根据所在的网络场所区分,预设保护规则集
– public:仅允许访问本机的sshd、dhcp、ping等少数几个服务
– trusted:允许任何访问
– block:阻塞任何来访请求(明确拒绝)
– drop:丢弃任何来访的数据包(没有回应,直接丢弃,节省资源)
数据包内容: 源IP地址 目标IP地址 数据
防火墙判定的规则:匹配及停止
1.查看数据包中源IP地址,查看自己所有区域规则,哪一个区域有该IP地址规则,则进入该区域
1.查看数据包中源IP地址,查看自己所有区域规则,哪一个区域有该IP地址规则,则进入该区域
2.进入默认区域 (public)root用户可以修改默认区域
#################################################
默认区域的修改
虚拟机Server0:
]# firewall-cmd --get-default-zone #查看默认区域
虚拟机Desktop0:
]# ping 172.25.0.11 #可以通信
默认区域的修改
虚拟机Server0:
]# firewall-cmd --get-default-zone #查看默认区域
虚拟机Desktop0:
]# ping 172.25.0.11 #可以通信
虚拟机Server0:
]# firewall-cmd --set-default-zone=block #修改默认区域
]# firewall-cmd --get-default-zone
虚拟机Desktop0:
]# ping 172.25.0.11 #不可以通信,有回应
]# firewall-cmd --set-default-zone=block #修改默认区域
]# firewall-cmd --get-default-zone
虚拟机Desktop0:
]# ping 172.25.0.11 #不可以通信,有回应
虚拟机Server0:
]# firewall-cmd --set-default-zone=drop
]# firewall-cmd --get-default-zone
虚拟机Desktop0:
]# ping 172.25.0.11 #不可以通信,没有回应
]# firewall-cmd --set-default-zone=drop
]# firewall-cmd --get-default-zone
虚拟机Desktop0:
]# ping 172.25.0.11 #不可以通信,没有回应
############################################
常见互联网应用协议:
http:超文本传输协议 默认端口:80
https:安全超文本传输协议 默认端口:443
ftp:文件传输协议 默认端口:21
tftp:简单文件传输协议 默认端口:69
DNS:域名解析协议 默认端口:53
telnet:远程管理协议 默认端口:23
smtp:邮件协议(用户发邮件) 默认端口:25
pop3:邮件协议(用户收邮件) 默认端口:110
snmp:网络管理协议 默认端口:161
常见互联网应用协议:
http:超文本传输协议 默认端口:80
https:安全超文本传输协议 默认端口:443
ftp:文件传输协议 默认端口:21
tftp:简单文件传输协议 默认端口:69
DNS:域名解析协议 默认端口:53
telnet:远程管理协议 默认端口:23
smtp:邮件协议(用户发邮件) 默认端口:25
pop3:邮件协议(用户收邮件) 默认端口:110
snmp:网络管理协议 默认端口:161
public区域的服务的协议添加
虚拟机Server0:
]# firewall-cmd --set-default-zone=public #修改默认区域
]# firewall-cmd --get-default-zone
]# firewall-cmd --zone=public --list-all #查看区域规则
虚拟机Desktop0:
]# firefox 172.25.0.11 #不可以访问
]# firewall-cmd --set-default-zone=public #修改默认区域
]# firewall-cmd --get-default-zone
]# firewall-cmd --zone=public --list-all #查看区域规则
虚拟机Desktop0:
]# firefox 172.25.0.11 #不可以访问
虚拟机Server0:在public区域添加规则,添加服务访问协议http
]# firewall-cmd --zone=public --add-service=http
]# firewall-cmd --zone=public --list-all
虚拟机Desktop0:
]# firefox 172.25.0.11 #可以访问
]# firewall-cmd --zone=public --add-service=http
]# firewall-cmd --zone=public --list-all
虚拟机Desktop0:
]# firefox 172.25.0.11 #可以访问
###############################################
防火墙实现永久策略
防火墙实现永久策略
• 配置规则的位置
– 永久(permanent)
虚拟机Server0:
]# firewall-cmd --reload #重新加载防火墙所有永久策略
]# firewall-cmd --zone=public --list-all
]# firewall-cmd --permanent --zone=public --add-service=http
– 永久(permanent)
虚拟机Server0:
]# firewall-cmd --reload #重新加载防火墙所有永久策略
]# firewall-cmd --zone=public --list-all
]# firewall-cmd --permanent --zone=public --add-service=http
]# firewall-cmd --zone=public --list-all
]# firewall-cmd --reload
]# firewall-cmd --zone=public --list-all
]# firewall-cmd --reload
]# firewall-cmd --zone=public --list-all
临时删除
]# firewall-cmd --zone=public --remove-service=http
永久删除
]# firewall-cmd --permanent --zone=public --remove-service=http
]# firewall-cmd --zone=public --remove-service=http
永久删除
]# firewall-cmd --permanent --zone=public --remove-service=http
]# firewall-cmd --reload
##################################################
源IP地址规则的添加
源IP地址规则的添加
虚拟机Server0:单独拒绝Desktop0访问
]#
firewall-cmd --zone=block --add-source=172.25.0.10
]# firewall-cmd --zone=block --list-all
]# firewall-cmd --zone=block --remove-source=172.25.0.10
]# firewall-cmd --zone=block --list-all
]# firewall-cmd --zone=block --remove-source=172.25.0.10
################################################
端口:服务或程序或协议的编号
端口:服务或程序或协议的编号
数据包内容: 源IP地址 目标IP地址 数据 目标端口
root可以改变服务或程序或协议的端口
也可以让一个服务具备多个端口
也可以让一个服务具备多个端口
• 本地应用的端口重定向(5423 -----> 80)
– 从客户机访问5423 的请求,自动映射到本机 80
– 比如,访问以下两个地址可以看到相同的页面:
客户端访问--->172.25.0.11:5423----》防火墙---》172.25.0.11:80
– 比如,访问以下两个地址可以看到相同的页面:
客户端访问--->172.25.0.11:5423----》防火墙---》172.25.0.11:80
虚拟机Server0:
]# firewall-cmd --zone=public --list-all
]# firewall-cmd --zone=public --list-all
]# firewall-cmd --permanent --zone=public
--add-forward-port=port=5423:proto=tcp:toport=80
--add-forward-port=port=5423:proto=tcp:toport=80
]# firewall-cmd --reload //重载配置
虚拟机Desktop0:
[root@desktop0 ~]# firefox 172.25.0.11:5423
[root@desktop0 ~]# firefox 172.25.0.11:5423
################################################
配置用户环境
配置用户环境
alias别名设置
• 查看已设置的别名
– alias [别名名称]
• 定义新的别名
– alias 别名名称= '实际执行的命令行'
• 取消已设置的别名
– unalias [别名名称]
• 查看已设置的别名
– alias [别名名称]
• 定义新的别名
– alias 别名名称= '实际执行的命令行'
• 取消已设置的别名
– unalias [别名名称]
用户初始化文件
• 影响指定用户的 bash 解释环境
– ~/.bashrc,每次开启 bash 终端时生效
• 影响指定用户的 bash 解释环境
– ~/.bashrc,每次开启 bash 终端时生效
• 影响所有用户的 bash 解释环境
– /etc/bashrc,每次开启 bash 终端时生效
– /etc/bashrc,每次开启 bash 终端时生效
[root@server0 ~]#
vim /root/.bashrc
# .bashrc
alias hello='echo hello'
# .bashrc
alias hello='echo hello'
[root@server0 ~]# vim /home/student/.bashrc
# .bashrc
alias hi='echo hi'
# .bashrc
alias hi='echo hi'
[root@server0 ~]#
vim /etc/bashrc
# /etc/bashrc
alias abc='echo abc'
# /etc/bashrc
alias abc='echo abc'
重新远程管理测试
################################################