DAY06
权限 基本权限 附加权限(特殊权限) ACL权限(ACL策略)
Permission denied : 权限不足
管理员root具备一切权限
基本权限
– 读取:允许查看内容-read r
– 写入:允许修改内容-write w
– 可执行:允许运行和切换-execute x 对于目录来说是可以cd
对于文本文件
r: cat head tail less
w: vim且可以保存
x: 可以运行该文件
对于目录:rx通常成对出现
目录的 r 权限:能够 ls 浏览此目录内容
目录的 w 权限:能够执行 rm/mv/cp/mkdir/touch/等更改目录内容的操作
(只对目录内容有权限想要更改目录本身名要把该目录父目录设为w权限)
目录的 x 权限:能够 cd 切换到此目录
权限适用对象(归属)
– 所有者(属主):拥有此文件/目录的用户-user u
– 所属组(属组):拥有此文件/目录的组-group g
– 其他用户:除所有者、所属组以外的用户-other o
查看权限
ls -ld 文件或目录...
rwxr-xr-x:顺序为:所有者 所属组 其他人
以 - 开头:文本文件 (其实都可以直接看后面的颜色显示 黑色)
以 d 开头:目录 蓝色
以 l 开头:快捷方式 青色
chmod [-R] 归属关系+-=权限类别 文档... (root才能使用)
– [-R] 递归设置权限
-----》加了R其子文件都继承该目录的权限!
实验结果:新建的也继承!
[[email protected] 桌面]# chmod -R o=rx /home/yanjie/
[[email protected] 桌面]# ls -ld /home/yanjie/yanjie1 继承
drwxr-xr-x 5 root root 51 4月 5 23:42 /home/yanjie/yanjie1
[[email protected] 桌面]# ls -ld /home/yanjie/yanjie111 继承
-rw-r--r-x 1 root root 0 4月 5 23:42 /home/yanjie/yanjie111
[[email protected] 桌面]# mkdir /home/yanjie/yanjie3 新建的
[[email protected] 桌面]# ls -ld /home/yanjie/yanjie3
drwxr-xr-x 2 root root 6 4月 8 22:29 /home/yanjie/yanjie3 也继承了!!!
chmod u=rwx,g=rwx,o=--- /nsd01 (都是用逗号隔开)
chmod u+x,g-x,o+w /nsd01
chmod u+x,g-x,o=--- /nsd01
判别权限的方法:
1. 查看用户对于文档的身份,属于那个归属关系
(所有者>所属组>其他人---匹配及停止原则)
2. 查看相应归属关系位置的权限
归属
chown 命令
– chown [-R] 属主 文档...
– chown [-R] :属组 文档...
– chown [-R] 属主:属组 文档...
– [-R] 递归设置权限 要与特殊权限 g+s 区分开
实验结果 :(果然实践才能检验真理)
之前该目录下已存在所有文件及目录继承了:后的所属组权限
该目录下新建的文件及目录并没有继承:后面的所属组权限
所以:必须要用set GID g+s 来解决该问题
(应用:财务看每天新增的考勤权限)
tips:用户加入组权限不能立即生效,要重新su一次
Linux下父目录和子目录的属组和权限没有半毛钱关系(默认不继承)
附加权限(特殊权限)
Set GID(必考题型)
附加在属组的 x 位上
– 属组的权限标识会变为 s (原x位上有x,s。原x位上无x,S。)
– 适用于目录,Set GID可以使目录下新增的文档自动设置与父目录相同的属组
– 继承父目录的所属组身份 (新增新增新增新增这两个字关键)
Set UID
附加在属主的 x 位上 (作为了解,安全课程会讲攻击)
– 属主的权限标识会变为 s
– 适用于可执行文件,Set UID可以让使用者具有文件属主的身份及部分权限
传递所有者身份
Sticky Bit (t权限应用场景多)
附加在其他人的 x 位上
– 其他人的权限标识会变为 t
– 适用于开放 w 权限的目录,可以阻止用户滥用 w 写入
t权限(禁止操作别人的文档,校验文档的所有者是不是不是该用户本身)
chmod ugo=rwx /public
chmod o+t /public
ACL权限(ACL策略)
文档归属的局限性
– 任何人只属于三种角色:属主、属组、其他人
– 无法实现更精细的控制
acl访问策略
– 能够对个别用户、个别组设置独立的权限
– 大多数挂载的EXT3/4、XFS文件系统默认已支持
setfacl -m u:zhangsan:rx /nsd09 #设置ACL
getfacl /nsd09 #查看ACL权限
setfacl [-R] -b 文档... #清除所有的ACL
setfacl -x u:用户名 文档... #删除指定的ACL
使用LDAP认证
网络用户:由网络中一台服务器提供用户名、密码
本地用户:/etc/passwd
作用:集中管理网络中的用户帐号
什么是LDAP?
轻量级目录访问协议
– Lightweight Directory Access Protocol
– 提供的信息包括:用户名、密码、通信录、主机名映
射记录、......
LDAP服务器:classroom.example.com
思想:装包,配置,启服务!!!
1.安装软件
yum -y install sssd
yum -y install authconfig-gtk
2.运行authconfig-gtk图形工具,配置sssd软件
authconfig-gtk (要确保在-X 条件下远程管理)
选择LDAP LDAP密码
dc=example,dc=com #指定服务端域名
classroom.example.com #指定服务端主机名
3.启服务
systemctl restart sssd
id ldapuser0
家目录漫游
NFS共享
Network File System,网络文件系统
由NFS服务器将指定的文件夹共享给客户机
NFS服务端:classroom.example.com
客户端:虚拟机Server
- 查看服务端有那些共享文件夹
#showmount -e classroom.example.com
2.访问共享文件夹,利用mount提供访问点 (共享了哪个目录就创建哪个目录作为挂载点)
#mount classroom.example.com:/home/guests /mnt
#ls /mnt/
#umount /mnt/
#mkdir /home/guests
#mount classroom.example.com:/home/guests/ /home/guests (共享了哪个目录就创建哪个目录作为挂载点)
#ls /home/guests
3.验证
#su - ldapuser12
DAY07
查找文件Find
根据预设的条件递归查找对应的文件
– find [目录] [条件1] [-a|-o] [条件2] ...
– 常用条件表示:
-type 类型(f文件、d目录、l快捷方式)
-iname 忽略大小写
-name "文档名称" (支持通配符,和ls类似)
find /etc/ -name "*tab*"
请查找/etc以 .conf 结尾(包含子目录)
find /etc -name "*.conf"
请查找/etc以 .conf 结尾(不包含子目录)
ls /etc/*.conf
-size +|-文件大小(k、M、G)
-user 用户名
-group 组名
find /root/ -name "nsd*" -type f 同时满足条件(nsd开头的文本)
使用find命令的 -exec 操作
– find .. .. -exec 处理命令 {} \;
– 优势:以 {} 代替每一个结果,逐个处理,遇 \; 结束
find /boot/ -name "vm*" -exec cp {} /opt \;
find /root/ -name "nsd*" -type f -exec cp {} /opt \;
限制目录查找的深度(最大层数)
– -maxdepth
find /etc/ -maxdepth 1 -name "*.conf"
ls /etc/*.conf (等同?)
根据文件修改时间,都是过去时间
-mtime +10 #过去10天之前
-mtime -10 #最近10天之内
find /var/log/ -mtime -10
cron计划任务 (又是安包 配置 启服务 )
用途:按照设置的时间间隔为用户反复执行某一项固定的系统任务
软件包:cronie、crontabs
系统服务:crond
日志文件:/var/log/crond
分 时 日 月 周 任务命令行(绝对路径)
* * * * *
0 8 * * 5
30 23 * * *
* :匹配范围内任意时间
, :分隔多个不连续的时间点
- :指定连续时间范围
/n :指定时间频率,每n ...
30 23 * * 1,3,5
30 23 * * 2-5
0 */2 * * *
crontab 命令
– 编辑:crontab -e [-u 用户名]
– 查看:crontab -l [-u 用户名]
– 清除:crontab -r [-u 用户名]
每分钟记录当前系统的时间,写入文件/opt/time.txt
date >> /opt/time.txt
cat /opt/time.txt
crontab -e -u root
crontab -l -u root
*/1 * * * * date >> /opt/time.txt
Engineer01
磁盘管理: 通常为真空的,因为转速很高,一拆即报废。
磁道:track
扇区:sector 默认512字节
识别硬盘 => 分区规划 => 格式化 => 挂载使用
毛坯房---》 打隔断----》 装修---》 入住
一、分区规划
MBR/msdos:主引导记录模式
– 1~4个主分区,或者 3个主分区+1个扩展分区(n个逻辑分区)
– 最大支持容量为 2.2TB 的磁盘
– 扩展分区不能格式化
GPT:128个主分区, 最大支持容量为 18EB 的磁盘
修改硬盘的分区表
– fdisk 硬盘设备
fdisk /dev/vdb
常用交互指令:
m 列出指令帮助
p 查看现有的分区表
n 新建分区
d 删除分区
q 放弃更改并退出
w 保存更改并退出
partprobe : 刷新 划分的新分区
查看系统所有的磁盘设备 lsblk
/dev/sda5 : 第一块SCSI硬盘的第5个分区
第一块SCSI硬盘的第1个逻辑分区
二、格式化分区 make file system
mkfs.ext4 /dev/vdb1
mkfs.ext4 mkfs.xfs 格式化ext4,xfs文件系统
blkid /dev/vdb1 #查看文件系统及UUID
三、挂载使用
1、临时挂载
mount /dev/vdb1 /mypart1
df -h #查看正在挂载的分区使用情况
2、开机自动挂载
①修改/etc/fstab配置文件
file system table
配置文件 /etc/fstab 的记录格式
设备路径 挂载点 文件系统类型 参数 备份标记 检测顺序
/dev/vdb1 /mypart1 ext4 defaults 0 0
因为是追加挂载设备故可以用echo直接追加写入配置文件
echo /dev/vdb1 /mypart1 ext4 defaults 0 0 > /etc/fstab
②mount -a
检测/etc/fstab开机自动挂载配置文件,格式是否正确
检测/etc/fstab中,书写完成,但当前没有挂载的设备,进行挂载
③df -h
总结:
1.查看磁盘 lsblk
2.划分分区 fdisk
3.刷新 partprobe
4.格式化 mkfs.ext4 mkfs.xfs
5.查看文件系统 blkid
6.挂载使用 mount 修改/etc/fstab配置文件
LVM逻辑卷
作用: 1.整合分散的空间
2.逻辑卷空间可以扩大
新建逻辑卷: 将众多的物理卷(pv)组成卷组(vg),再从卷组中划分逻辑卷(lv)
面粉--------->大面团----->小面团--------->蒸----------->吃
物理卷pv 卷组vg 逻辑卷lv 格式化 挂载使用
pvs #查看物理卷基本信息
vgs #查看卷组基本信息
lvs #查看逻辑卷基本信息
一、逻辑卷的创建
1.建立vg卷组 (单位为pe)
格式:vgcreate 卷组名 设备路径
vgcreate nsd /dev/vdc[1-2]
(创建卷组时可以只用一个分区,面粉只有一坨就用一坨撒只要是闲置分区即可)
vgcreate -s 1M nsd /dev/vdc[1-2] (创建卷组时指定pe大小为1M)
2.创建lv逻辑卷
格式: lvcreate -n 逻辑卷名 -L 大小 卷组名
lvcreate -n vo -L 16G nsd
3.格式化,挂载使用
mkfs.ext4 /dev/nsd/vo (路径为/dev/卷组名/逻辑卷名)
/dev/nsd/vo /mylvm ext4 defaults 0 0
mount -a
df -h
二、逻辑卷的扩展,支持线上工作(可以不用重启生效)
卷组有足够的剩余空间 (大面团还有直接要)
1. 扩建逻辑卷的空间
lvextend -L 18G /dev/nsd/vo
lvs
2. 扩建逻辑卷的文件系统 (重新把扩大的空间装修 把新扯下来的小面团蒸)
resize2fs : ext4文件系统扩展命令
xfs_growfs : xfs文件系统扩展命令
df -h
resize2fs /dev/nsd/vo
df -h
卷组没有足够的剩余空间
1.扩展卷组
vgextend nsd /dev/vdc3
vgs
2. 扩建逻辑卷的空间
lvextend -L 25G /dev/nsd/vo
lvs
3. 扩建逻辑卷的文件系统
df -h
resize2fs /dev/nsd/vo
df -h
逻辑卷可以缩小,但是强烈不建议
PE:卷组划分空间的单位
vgdisplay nsd #显示卷组详细信息,看PE的大小
vgchange -s 1M nsd #修改卷组PE的大小
vgdisplay nsd #显示卷组详细信息,看PE的大小
lvcreate -L 250M -n lvtest02 nsd -l:指定PE的个数
逻辑卷的删除
首先删除LV逻辑卷,在删除VG卷组,最后删除PV物理卷
lvremove /dev/nsd/vo
Engineer02
初识shell脚本
Shell脚本:可以执行文件,可以实现某种功能
提前设计可执行语句,用来完成特定任务的文件
– 解释型程序
– 顺序、批量执行
构成: #! 环境声明 #!/bin/bash
注释文本 (解释脚本功能和设计理念)
可执行代码
echo友好提示语句 使脚本更友好的执行
1、vim /usr/bin/first.sh #可以直接在PATH环境变量的路径下写脚本
(任何工作目录下可以直接执行first.sh类似执行命令)
2、chmod +x /root/hello.sh #所有人加执行权限
3、/root/hello.sh #绝对路径运行
一般脚本为提高执行的效率,采用非交互式
请书写可以创建用户的脚本,并且为用户设置密码为123
#!/bin/bash
useradd nsd02
echo 123 | passwd --stdin nsd02
编写一个能输出系统信息的 /root/sysinfo.sh 脚本
1)输出当前红帽系统的版本信息
2)输出当前使用的内核版本
3)输出当前系统的主机名
4)输出当前ip地址
#!/bin/bash
cat /etc/redhat-release
uname -r
hostname
ifconfig | head -2
简单脚本技巧
管道传递
使用 | 管道操作
– 将前一条命令的标准输出交给后一条命令处理
重定向输出
> :将前面命令的正确输出,写入到文本文件中,只收集正确信息
2> :将前面命令的错误输出,写入到文本文件中,只收集错误信息
&> :将前面命令的正确与错误输出,写入到文本文件中,正确与错误都收集
&> /dev/null 把正确和错误信息都给黑洞设备(黑洞设备)
补充:
‘ ‘ : 取消所有特殊字符意义
$[ ]:运算 + - * / %10(取余数运算,求模) 取10的余数
定律 : 余数一定小于除数
tips经常用到:$( ) 与 ` 反撇号:将命令的输出结果,作为参数<br/>mkdir $(date +%F)<br/>mkdir
hostname-
date +%F<br/>mkdir nsd-
date +%F`
#!/bin/bash
useradd nsd05 &> /dev/null
echo nsd05用户创建成功
echo 123 | passwd --stdin nsd05 &> /dev/null
echo nsd05用户密码设置成功
变量:提高脚本的灵活度,适用多变的环境
变量:会变化的量,以不变的名称(容器杯子),存储可以变化的值(水,或者饮料)
自定义变量
变量的定义: 变量名=存储的值 (自定义变量)
#!/bin/bash
abc=kenji (以后只用改Kenji)
useradd $abc &> /dev/null
echo $abc用户创建成功
echo 123 | passwd --stdin $abc &> /dev/null
echo $abc用户密码设置成功
交互式,降低脚本使用的难度,用户在键盘上的输入,存放到变量中
read : 记录用户在键盘上的输入,并且存放到变量中
read -p ‘请输入您要创建的用户名:‘ abc
#!/bin/bash
read -p ‘请输入您要创建的用户名:‘ abc
useradd $abc &> /dev/null
echo $abc用户创建成功
echo 123 | passwd --stdin $abc &> /dev/null
echo $abc用户密码设置成功
定义/赋值变量
– 变量名只由字母/数字/下划线组成,区分大小写
– 变量名不能以数字开头,不要使用关键字和特殊字符
– 若指定的变量名已存在,相当于为此变量重新赋值
– 等号两边不要有空格
查看/引用变量
– 引用变量值:$变量名
– 查看变量值:echo $变量名、echo ${变量名}
a=rhel
echo $a
rhel
echo ${a}
rhel
echo $a7 (Linux不认识)
echo ${a}7
rhel7
环境变量 : 由系统定义赋值完成,用户直接调用(通常为大写且见名之意)
USER : 永远储存当前登陆的用户名
HOME :
PATH :与执行命令相关 在执行命令时,需要找到命令所对应的程序,Linux系统会到PATH变量值的所有 路径去寻找,如果找到就执行,没有就不执行 (所以创建脚本时可以直接vim 到这个变量有的路径下)
echo $PATH 查看PATH环境变量路径
RANDOM:范围是0--32767
位置变量:由系统定义赋值完成,用户直接调用 $[1...n] (非交互式赋值,更专业)
方便向脚本中传递命令行参数
vim /root/test.sh
#!/bin/bash
cat -n $1 | head -$2
/root/test.sh /etc/passwd 3
vim /root/123.sh
#!/bin/bash
echo $1
echo $2
echo $3
/root/123.sh haha abcd rhel7
预定义变量:由系统定义赋值完成,用户直接调用
$# 已加载的位置变量的个数
$* 所有位置变量的值
$? 程序退出后的状态值,0表示正常,其他值异常 (通常用echo $?来检查命令执行是否正确)
#!/bin/bash
cat -n $1 | head -$2
echo $#
echo $*
条件测试(判断)
检查文件状态
-e : 判断文档是否存在,存在为真
-d : 存在且为目录,才为真
-f : 存在且为文件,才为真
-r : 存在且具备读权限,才为真
-w : 存在且具备写权限,才为真
-x : 存在且具备执行权限,才为真
比较整数大小(带e字母都有等于二字,g(grow)代表大于,l(low)代表小于)
-gt:大于
-ge:大于等于
-lt:小于
-le:小于等于
-eq:等于
-ne:不等于
字符串比对
== : 字符串相等为真
!= : 字符串不相等为真
if选择结构 (固定格式)
if双分支处理
if [条件判断];then
命令序列xx
else
命令序列yy
fi
判断当前用户是否是root
#!/bin/bash
if [ $USER == root ];then
echo 当前是管理员
else
echo 当前是普通用户
fi
计算机随机产生一个 0到9之间的数字,用户输入一个0到9之间的数字
如果 用户输入的数字与 计算机随机产生 相等,则输出 您猜对了
如果 用户输入的数字与 计算机随机产生 不相等,则输出 猜错了
$RANDOM :系统储存随机数字
定律 : 余数一定小于除数
#!/bin/bash
read -p ‘请输入0到9之间的一个数字:‘ num1
num2=$[$RANDOM%10]
if [ $num1 -eq $num2 ];then
echo 您猜对了
else
echo 猜错了
echo 正确的数字为$num2
fi
判断是否ping通
#!/bin/bash
ping -c 2 $1 &> /dev/null (ping两次的意思 因为不给次数停不下来)
if [ $? -eq 0 ];then
echo 可以通信
else
echo 不可以
fi
判断是否有该用户
#!/bin/bash
read -p ‘请输入用户名:‘ user
id $user &> /dev/null
if [ $? -eq 0 ];then
echo 用户已存在
else
echo 用户不存在
fi
if多分支处理
if [条件测试1];then (1为真执行xx退出)
命令序列xx
elif [条件测试2];then (1为假,2为真,执行yy退出)
命令序列yy
elif [条件测试3];then (1,2都为假,3为真,执行aa退出)
命令序列aa
else
命令序列zz (1,2,3都为假,执行zz退出)
fi
书写一个成绩判断的脚本
用户输入成绩,0到100之间
如果,成绩 大于等于90以上 则输出 优秀
如果,成绩 大于等于80以上 则输出 良好
如果,成绩 大于等于70以上 则输出 合格
如果,成绩 大于等于60以上 则输出 仍需努力
以上条件均不满足:
则输出 再牛的肖邦,也弹不出哥的悲伤
#!/bin/bash
read -p ‘请输入您的成绩0-100:‘ num
if [ $num -ge 90 ];then
echo 优秀
elif [ $num -ge 80 ];then
echo 良好
elif [ $num -ge 70 ];then
echo 合格
elif [ $num -ge 60 ];then
echo 仍需努力
else
echo 再牛的肖邦,也弹不出哥的悲伤
fi
循环: 重复性执行一个操作
for循环处理
遍历/列表式循环
– 根据变量的不同取值,重复执行xx处理
for 变量名 in 值列表
do
循环的操作
done
for a in zhangsan lisi dc tc dz tz
do
useradd $a
done
{20..80} :造数工具,制造20到80 之间所有的数字
{ 起始..结束}
#!/bin/bash
for a in {1..20}
do
useradd stu$a
echo stu$a创建成功
done
循环可以与循环执行的操作无关 (循环的镶嵌)
#!/bin/bash
for a in {1..3}
do
read -p ‘请输入0到9之间的一个数字:‘ num1
num2=$[$RANDOM%10]
if [ $num1 -eq $num2 ];then
echo 您猜对了
else
echo 猜错了
echo 正确的数字为$num2
fi
done
但是这个脚本并没有猜对就跳出!(echo 您猜对了下面加个exit即可)
非常完整的脚本案例解析:
案例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
#!/bin/bash
if [ $# -eq 0 ];then #判断是否输入了位置参数
echo ‘/root/foo.sh redhat|fedora‘ >&2
#把正确变成错误输出
exit 2 #脚本退出返回值
elif [ $1 == redhat ];then
echo fedora
elif [ $1 == fedora ];then
echo redhat
else
echo ‘/root/foo.sh redhat|fedora‘ >&2
exit 3 #脚本退出返回值
fi
案例5:编写一个批量添加用户脚本
在 server0 上创建 /root/batchusers 脚本
1)此脚本要求提供用户名列表文件作为参数
http://classroom/pub/materials/userlist
2)如果没有提供参数,此脚本应该给出提示
Usage: /root/batchusers,退出并返回相应值
3)如果提供一个不存在的文件,此脚本应该给出提
示 Input file not found,退出并返回相应值
4)新用户的登录Shell为 /bin/false,无需设置密码
#!/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
echo $i创建成功
done
else
echo Input file not found >&2
exit 3
fi
Engineer03
系统安全保护(SElinux)
Security-Enhanced Linux
– 美国NSA国家安全局主导开发,一套增强Linux系统安全的强制访问控制体系
– 集成到Linux内核(2.6及以上)中运行
– RHEL7基于SELinux体系针对用户、进程、目录和文件提供了预设的保护策略,以及管理工具
SELinux root firewall 三者之间的关系
皇帝 宰相 皇宫看门侍卫 (但是root这个宰相随时可以叛变让皇帝驾崩)
SELinux的运行模式
– enforcing(强制)、---》 皇帝掌权
- permissive(宽松) ---》 傀儡皇帝只能那小本子记
– disabled(彻底禁用) —》 皇帝驾崩
变成disabled,都必须经过修改配置文件,重启才可以
切换运行模式
– 临时切换:setenforce 1|0
– 固定配置:/etc/selinux/config 文件
SELINUX=disabled
getenforce #查看当前SELinux状态
配置用户环境
影响指定用户的 bash 解释环境
– ~/.bashrc,每次开启 bash 终端时生效
影响所有用户的 bash 解释环境
– /etc/bashrc,每次开启 bash 终端时生效
新开一个全新的终端验证:
防火墙策略管理 (皇宫门带刀侍卫)
作用:隔离,过滤入站请求,允许出站
前提(搭两个服务来测试)
基本Web服务
1.服务端虚拟机Server,安装可以提供Web服务软件
yum -y install httpd
2.虚拟机Server操作,启动httpd服务,设置为开机自起服务
systemctl restart httpd #重起服务
systemctl enable httpd #设置开机自起服务
3.虚拟机Server操作,本机测试访问
firefox 172.25.0.11
4.虚拟机Server操作,书写页面文件
默认存放页面文件的路径:/var/www/html
默认页面文件名字:index.html
(想要使更换的网页内容生效:重启服务restart,enable,且要在setenforce 0即permission状态下才能实现)
写网站语言:html
vim /var/www/html/index.html
<marquee><font color=red> <h1>NSD1803
滚动 字体颜色 红色 最大字体
http:超文本传输协议
基本FTP服务: 文件传输协议
1.服务端虚拟机Server,安装可以提供FTP服务软件
yum -y install vsftpd
2.虚拟机Server操作,启动 vsftpd服务,设置为开机自起服务
systemctl restart vsftpd
systemctl enable vsftpd
3.虚拟机Server操作,本机测试:
默认FTP共享的路径:/var/ftp
firefox ftp://172.25.0.11
RHEL7的防火墙体系
系统服务:firewalld
管理工具:firewall-cmd、firewall-config(图形工具)
匹配规则的原则: 匹配即停止 (类似用户权限判断的原则)
预设安全区域
根据所在的网络场所区分,预设保护规则集
– trusted:允许任何访问
– public:仅允许访问本机的sshd、DHCP、ping少数几个服务
– block:阻塞任何来访请求,明确拒绝
– drop:丢弃任何来访的数据包,节省资源 (没有任何回应不答应不拒绝)
防火墙决定,客户端请求进入某个区域的规则:
1.查看客户端请求中源IP地址,再看所以有区域中,
哪一个区域有该源IP地址的规则,则进入该区域
2.进入默认区域,public
默认区域的修改
虚拟机Server
firewall-cmd --get-default-zone #查看默认区域
虚拟机Desktop
ping -c 2 172.25.0.11 #可以通信
虚拟机Server
firewall-cmd --set-default-zone=block #修改默认区域
firewall-cmd --get-default-zone #查看默认区域
虚拟机Desktop
ping -c 2 172.25.0.11 #不可以通信,有回应
虚拟机Server
firewall-cmd --set-default-zone=drop #修改默认区域
firewall-cmd --get-default-zone #查看默认区域
虚拟机Desktop
ping -c 2 172.25.0.11 #不可以通信,没有回应
互联网常见的服务协议 (八大协议)
http : 超文本传输协议
FTP : 文件传输协议
https : 安全的超文本传输协议
DNS : 域名解析协议
telnet : 远程管理协议
smtp : 邮件协议,用户发邮件协议
pop3 : 邮件协议,用户收邮件协议
tftp : 简单文件传输协议
默认区域服务的添加
虚拟机Server
# firewall-cmd --set-default-zone=public #修改默认区域
firewall-cmd --zone=public --list-all #查看区域规则
firewall-cmd --zone=public --add-service=http #添加服务
firewall-cmd --zone=public --list-all
虚拟机Desktop
firefox 172.25.0.11 #可以访问
firefox ftp://172.25.0.11 #不可以访问
虚拟机Server
firewall-cmd --zone=public --add-service=ftp
firewall-cmd --zone=public --list-all
虚拟机Desktop
firefox 172.25.0.11 #可以访问
firefox ftp://172.25.0.11 #可以访问
策略的永久配置
– 永久(permanent)
虚拟机Server
firewall-cmd --reload
#重新加载防火墙配置,模拟重起机器(之前的配置消失)
firewall-cmd --zone=public --list-all
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --zone=public --list-all
firewall-cmd --reload
firewall-cmd --zone=public --list-all
添加源IP的规则设置
虚拟机Server
firewall-cmd --zone=block --list-all
firewall-cmd --zone=block --add-source=172.25.0.10(把某个IP加入block区域)
#firewall-cmd --zone=block --list-all
虚拟机Desktop
#ping -c 2 172.25.0.11 #失败
#firefox 172.25.0.11 #失败
#firefox ftp://172.25.0.11 #失败
真机访问
#ping -c 2 172.25.0.11 #成功
#firefox 172.25.0.11 #成功
#firefox ftp://172.25.0.11 #成功
工作时防火墙,设置的方式
严格:默认区域为drop,把允许的IP单独放入trusted
宽松:默认区域为trusted,把拒绝的IP单独放入drop
端口:编号,标识作用,标识每个服务
ssh 22
http 80
telnet 23
实现本机的端口映射
本地应用的端口重定向(端口1 --> 端口2)
– 从客户机访问 端口1 的请求,自动映射到本机 端口2
– 比如,访问以下两个地址可以看到相同的页面:
客户端desktop-----》172.25.0.11:5423-----》服务端Server
服务端Server-----172.25.0.11:5423 移交 -----》172.25.0.11:80
虚拟机Server
#firewall-cmd --reload
虚拟机Desktop
#firefox 172.25.0.11 #可以访问
#firefox 172.25.0.11:5423 #不可以访问
虚拟机Server
#firewall-cmd --permanent --zone=public
--add-forward-port=port=5423:proto=tcp:toport=80
#添加- 转发- 端口 =将端口5423协议为tcp:转发到80
#firewall-cmd --reload
(若忘了加--permanent 刷了以后添加的端口转发会失效,便不能验证,所以这点很重要)
# firewall-cmd --zone=public --list-all
虚拟机Desktop
#firefox 172.25.0.11:5423 #可以访问
配置聚合连接 (网卡绑定、链路聚合)
eth1 eth2 -----》司机(奴隶)
虚拟网卡 team(组队)----》卡车 (对外IP为虚拟网卡ip)
1.创建 虚拟网卡 man teamd.conf #查看帮助信息
# nmcli connection add type team con-name team0 ifname team0 autoconnect yes
config ‘{"runner": {"name": "activebackup"}}‘
# ifconfig #查看是否有team0网卡
# nmcli connection 添加 类型为 team(绑定类型)配置文件名为team0 ifconfig显示网卡名为 team0 每次开机自起 配置网卡绑定工作模式 热备份方式(网卡1挂了才换网卡2)
# 如果敲错误
# nmcli connection delete team0
2.添加成员(添加奴隶)
# nmcli connection add type team-slave con-name team0-1 ifname eth1 master team0
# nmcli connection add type team-slave con-name team0-2 ifname eth2 master team0
# nmcli connection 添加 类型为 team-slave 配置文件名 team0-1
网卡为 eth1 添加到team0中
#如果敲错误 nmcli connection delete team0-1
3.配置team0的IP地址
# nmcli connection modify team0 ipv4.method manual
ipv4.addresses 192.168.1.1/24 connection.autoconnect yes
4.激活所有配置
# nmcli connection up team0
# nmcli connection up team0-1
# nmcli connection up team0-2
如果激活失败 (删除了从头再来!)
# nmcli connection delete team0
# nmcli connection delete team0-1
# nmcli connection delete team0-2
终极验证:
# teamdctl team0 state #查看team0详细信息 (能看到目前是谁在工作)
# ifconfig eth1 down #禁用网卡 (禁了网卡1自动切换到网卡2,该操作也可切换工作网卡)
# teamdctl team0 state ifconfig eth1 up 打开1
ifconfig eth2 down 再次换到1
Engineer04
Windows下的共享 选文件夹右键 共享 高级共享 打钩
隐藏共享 :打钩后再共享名后加$ 访问时\192.168.1.1\nsd$
前提条件
服务端和客户端防火墙的默认区域为trusted!
Samba服务基础 (第一类反根据功能向编译的软件,思想很牛逼)
配置SMB共享,跨平台的共享,Windows与Linux的共享
Samba 软件项目
– 用途:为客户机提供共享使用的文件夹
– 协议:SMB(TCP 139)、CIFS(TCP 445)
smb协议:建立通道的协议 cifs协议:文件传输的协议(既是协议又是文件系统)
类比:淘宝购物 电脑下单(通道) 到达手中(靠物流)
所需软件包:samba
系统服务:smb
Samba共享帐号:(在服务端创建,你知道服务端的账号密码才能判定你是安全的)
默认情况下,访问Samba共享必须通过用户验证
专门用于访问Samba共享时验证的用户与密码
与系统用户为同一个用户,但是密码时samba独立密码
使用 pdbedit 管理工具
– 添加用户:pdbedit -a 用户名
– 查询用户:pdbedit -L [用户名]
– 删除用户:pdbedit -x 用户名
修改 /etc/samba/smb.conf (服务配置文件)
path = 文件夹绝对路径
public = no|yes //默认no
browseable = yes|no //默认yes
read only = yes|no //默认yes
write list = 用户1 .. .. //默认无
valid users = 用户1 .. .. //默认任何用户
hosts allow = 客户机地址 .. ..
hosts deny = 客户机地址 .. ..
Samba服务搭建(只读)
服务端,虚拟机Server:
1.安装可以提供smb共享功能的软件
# yum -y install samba
2.建立Samba共享验证的用户
# useradd kenji
#useradd chihiro
#useradd harry
#pdbedit -a harry #添加为Samba共享帐号
#pdbedit -a kenji #添加为Samba共享帐号
#pdbedit -a chihiro #添加为Samba共享帐号
#pdbedit -L #查看所有Samba共享帐号
3.创建共享目录与文件
mkdir /common
echo 123 > /common/123.txt
4.修改配置/etc/samba/smb.conf
vim 末行模式 :set nu #添加行号
命令模式 G 到全文的最后
89行 workgroup = STAFF #指定工作组名
[common] #指定共享名
path = /common #指定共享文件夹的实际绝对路径
echo -e "[common]\n path = /common" >> /etc/samba/smb.conf
5.重起smb服务,刷新配置
# systemctl restart smb #重起服务
#systemctl enable smb #设置为开机自起 SELinux策略:布尔值
(所服务功能的开关,只有开和关两种状态,类似性别只有男女)
SELinux对跨平台软件特别把控,如Samba,通常情况都是关关关!!!
– 需要加 -P 选项才能实现永久设置
1. 查看samba 布尔值
# getsebool -a | grep samba
2.修改SELinux策略的布尔值
# setsebool samba_export_all_ro on
3. 查看samba 布尔值
# getsebool -a | grep samba
至此客户端已经搭完。
客户端虚拟机Desktop:
1.安装客户端软件,访问samba共享
# yum -y install samba-client
2. 查看服务端samba共享,目的看 共享名
# smbclient -L //172.25.0.11
Enter root‘s password: #直接敲回车
Sharename
common
3.以harry身份,访问服务端samba共享
#smbclient -U harry //172.25.0.11/common
Enter harry‘s password: #输入密码
Domain=[STAFF] OS=[Unix] Server=[Samba 4.1.1]
smb: \>
客户端虚拟机desktop
使用 mount 挂载访问 (临时挂载)
所需软件包:cifs-utils #支持cifs协议
# yum -y install cifs-utils
#mkdir /mnt/samba
#mount -o user=harry,pass=123 //172.25.0.11/common /mnt/samba/
#df -h
开机自动挂载
_netdev : 网络设备 (挂载网络设备时必给的参数)
先启动网络服务,具备网络参数后,再进行挂载
#yum -y install cifs-utils
#mkdir /mnt/samba
#vim /etc/fstab
//172.25.0.11/common /mnt/samba cifs
defaults,user=harry,pass=123,_netdev 0 0
(思路:文件系统cifs,参数要加用户名密码和网络设备_netdev)
#mount -a
#df -h #查看是否挂载成功
读写的Samba共享
服务端虚拟机Server:
1.部署共享
# mkdir /devops
#echo nsd > /devops/test.txt
#ls /devops
#vim /etc/samba/smb.conf #修改配置文件
#追加写入
[devops] #共享名
path = /devops #路径为/devops
write list = chihiro #允许chihiro用户可写
#systemctl restart smb
2.修改SELinux策略(布尔值)
#getsebool -a | grep samba
#setsebool samba_export_all_rw on
#getsebool -a | grep samba
3.用户本身的本地权限
(所有服务都有个用户判定机制,Samba最简单,以谁登陆判定为用户为谁,再判定该用户对该目录的权限)
# setfacl -m u:chihiro:rwx /devops (单独为这个用户设置权限)
# getfacl /devops
# ls -l /devops
客户端虚拟机desktop
1.实现开机自动挂载
# mkdir /mnt/pub
#vim /etc/fstab
//172.25.0.11/devops /mnt/pub cifs
defaults,user=chihiro,pass=123,_netdev 0 0
# mount -a
#df -h
总结:客户端访问服务端资源(排错)
1.服务本身的访问控制(开关状态)
2.本的目录的权限 (对于客户端的用户权限判定)
3.防火墙 (默认区域)
4.SELinux (状态)
Samba服务挂载mount -a 时出现permission dnied 而其他均为出错时,
检查配置文件中的验证用户是否为共享账号用户,可能该用户不在列表中
用pdbedit -L 检查配置文件中的用户是否为共享账号用户
multiuser机制,专门为普通用户设计,专为客户端设计
– multiuser,提供对客户端多个用户身份的区分支持
– sec=ntlmssp,提供NT局域网管理安全支持
必要的时候,任何普通用户都可以通过命令切换成权限较大的用户
来临时获取写的权限
配置文件参数: //172.25.0.11/devops /mnt/pub cifs defaults,user=kenji,pass=123,_netdev,multiuser,sec=ntlmssp 0 0
配置NFS共享, Linux与Linux的共享(能ping通即可搭)
Network File System,网络文件系统
– 用途:为客户机提供共享使用的文件夹
– 协议:NFS(TCP/UDP 2049)、RPC(TCP/UDP 111)
只读的NFS共享
服务端虚拟机server
1.所需软件包 : nfs-utils
rpm -qa | grep nfs #显示所有已安装,进行过滤
rpm - q nfs-utils
2.NFS共享主配置文件/etc/exports
vim /etc/exports
/nsd *(ro) #共享目录路径 *(所有网段客户,可设置网段) 客户端(权限)
echo "/nsd *(ro)" >> /etc/exports
3.重起nfs服务,设置为开机自起
systemctl restart nfs-server
systemctl enable nfs-server
客户端虚拟机Desktop
永久用:vim /etc/fstab
172.25.0.11:/nsd /mnt/nfs nfs defaults,_netdev 0 0
mkdir /mnt/nfs
mount -a
df -h
临时: showmount -e 172.25.0.11
mount 172.25.0.11:/nsd /mnt/nfs
原文地址:http://blog.51cto.com/13659481/2103771