第一章
使用红帽kickstart,自动化安装rhel。
http://pan.baidu.com/s/1qWqfXlq 文档下载地址。
第二章:
控制对文件的访问
在第一本书中,曾讲到文件权限的设置以及规划对系统的安全是极其重要的,那么这一章将重点学习文件权限的进一步设置,设定权限列表(acl)等等。
注意:在生产环境中经常出于安全的考虑需要对文件目录和用户给予很严格的权限设计,从文件系统的基本权限到特殊权限,到acl控制都是企业权限控制的有效途径。因此在面试笔试中,权限的设置也是极其重要的针对某些特定人对特定文件目录的访问权限设计是必须掌握的内容。
1.权限列表的读取
[root@xxb1 ~]# getfacl file1 读取权限列表
# file: file1 文件名称
# owner: root 文件属主
# group: root 文件属组
user::rw- 用户权限
group::r-- 组权限
other::r-- 其他权限
[root@xxb1 ~]# setfacl -m xxb:rwx file1 使用acl设定特定权限,给xxb用户rwx权限
[root@xxb1 ~]# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:xxb:rwx 特殊指派用户以及权限
group::r--
mask::rwx 可指派最大权限
other::r--
注意:setfacl 用于设置或者修改文件的acl
2.ACL权限的设置以及umask设置
#setfacl -m u:xxb:rw filename 设定用户xxb读写权限
#setfacl -m g:xxb:rw filename 设定组xxb读写
#setfacl -x u:xxb filename 删除用户xxb的acl
ACL掩码以及继承:
(1)具有ACL的文件拥有mask,能够限制拥有该文件的组的最大权限,有能够限制ACL中的补充用户和用户组的最大权限.#setfacl -m m:rwx filename
例子:
# setfacl -m m:rw file1 设定umask为rw
# getfacl file1 注意到生效的是rw
file: file1
owner: root
group: root
user::rw-
user:xxb:rwx #effective:rw-
group::r--
mask::rw-
other::r--
(2)目录可以有默认ACL条目,系统自动针对在该目录创建的新文件设置这些目录,类似于setgid权限。使得在该目录中创建的新文件拥有该目录的权限
#setfacl -m d:u:bob:rw directory
这样目录下的文件等继承此目录的用户权限
3.设备权限列表加载
挂载文件系统之后 ,必须启用对 POSIX ACL 条目的支持
安装程序会配置它创建的所有ext4 文件系统,以自动启用 ACL 支持
# tune2fs -l /dev/sda1 | grep “Default mount” 查看支持,(user_xattr acl)
如果手动格式化文件系统 ,则需要使用 acl 挂载
选项挂载该系统
#tune2fs -o user_xattr,acl /dev/sda1
tune2fs -l /dev/sda5 查看设备是否支持acl
tune2fs -o acl /dev/sda5 -o指定新的功能(增加acl权限)
tune2fs -L data /dev/sda3 -L指定磁盘设备的标签为data
e2label /dev/sda3 显示设备的标签啊
挂载的时候可以挂载标签哦
mount -L data /xxb 使用标签挂载设备哦
tune2fs -L “” /dev/sda3 将标签打成空
第三章:
系统延迟以及定时机制
1.计划定期任务:
at命令:
at 命令可以指定某一任务在将来的特定时间运行。该作业可能是一次备份、对您系统的检查或者特定时间发送的通知。那些需要花费很长时间才可完成的作业正适合 at 命令。仅需使用 at 命令将任务设置为在一分钟或两分钟之后运行。然后您便可以安全注销,因为该任务会在与 shell 会话断开连接的情况下运行延迟任务;
at 命令必须指定任务应运行的时间。该指定可以是具体时间和 / 或日期 (例如星期一 , 10:00pm 或 7 月 15 日 )。也可以是当前时间的相对时间 (现在时间加上 5 分钟 ,现在时间加上 3 天或 4:00pm 加上1 周)通过添加其他选项,您可以在任务完成是发送邮件( -m ),或者从文件中读取任务( -f 文件),而无需通过标准输入进行。
在键入 at 命令行之后 ,按 Enter 并继续键入作业中包含的其他命令。任务可由多个命令组成。在完成键入要运行的命令时,在单独出现的一行中按 Ctrl+d 完成任务。
例子:
[root@xxb1 ~]# at now+1min
at> touch /root/test/file123
at> <EOT> ctrl+d退出
job 2 at Tue Jan 6 20:59:00 2015
注意:在每次at进行定时任务之后,可以通过输入atq列出作业编号和次数。输入Atrm#(表示作业编号)删除指定作业
[root@xxb1 ~]# atq
8 Tue Jan 6 21:02:00 2015 a root
可以使用监控:
[root@xxb1 ~]# watch -n 2 ls -l test/ 会自动创建file123
2.管理定期任务:
注意:crontab定时机制在linux管理中也是极其重要的,作为一个想偷懒的,或者有先见之明的linux运维人员来说,此项技能是必须掌握,而且善于使用的,否则你就只能苦逼的半夜去进行维护服务器了。重点掌握定期任务的时间设置。
cron 设备管理必须按计划定期重复运行的程序。后台程序crond 每分钟唤醒一次 ,以运行计划的任何任务用户使用
crontab 命令计划个人任务。系统管理员可以在系统范围配置文件中设置任务。
单个用户使用称为 crontab ( cron 表 )的文本文件登记任务
#crontab -l 列出文件内容
#crontab -r 删除文件
#crontab -e 编辑文件(和vim编辑器一样)(crontab -u xxb -e 指定用户运行定时任务)
2 * * * * ls -l /root/test/ 每两分钟执行
min hour day month week command
时间表示示例:
05 * * * * 每小时整点过5分钟运行
05 02 * * * 每天2:50执行
30 08 01 * * 每月第一天8:30
00 07 20 12 * 每12月20日七点整运行
30 16 * * 5 每周五16:30
*/5 * * * * 每五分钟执行
*/10 9-17 1,15 * * 面试题
crontab注意事项:
属于系统的任务通常保存在 /etc/crontab 文件中而不是使用 crontab -e 编辑保存在个人文件中。更好的做法是用文本编辑器创建crontab 文件并保存到 /etc/cron.d 中 (避免更新系统软件包 cronie 时出现问题 )。/etc/cron.d/crontab 文件在日期说明后另加一个字段,表示将运行作业的用户。
对于需要每天、每周或每月运行一次的脚本,可以直接将其设置为可执行文件 ,并保存在 /etc/cron.{daily,weekly,monthly}中相应目录下。这些任务由/etc/anacrontab 配置的系统 anacron 服务运行 anacron是 cron 的集成组件 ,用于更好地管理作业 ,并确保在作业因计算机关闭而未运行的情况下,在系统引导后运行作业。
cron权限设定:
用户黑名单:/etc/cron.deny
用户白名单:/etc/cron.allow
?????
系统中的临时文件:
控制系统中的临时文件:
systemd-tmpfiles
– --create /usr/lib/tmpfiles.d/test.conf
– --clean /usr/lib/tmpfiles.d/test.conf
#################################################
第四章:管理系统中的简单分区和文件系统
1.添加文件系统空间
2.添加swap交换分区
3.对系统分区进行加密
介绍:
fdisk是用于管理磁盘分区的使用程序。可以通过-l参数查看磁盘以及相应分区。也可使用-cu参数进行更改分区信息。(-c禁用旧的DOS兼容模式,-u以扇区的格式显示输出)
[root@xxb1 ~]# fdisk -l 查看系统中可用磁盘信息(磁盘的构造以及大小)
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors 设备名,大小,扇区
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000d4605
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux 第一块磁盘的第一分区
/dev/sda2 1026048 41943039 20458496 8e Linux LVM 第一块磁盘的第二分区
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors 第二块磁盘
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 byte
由以上信息可知,有两块磁盘可用。
[root@xxb1 ~]# blkid 查看设备ID(可管理的设备)
/dev/sda1: UUID="c9e59a31-69b3-4241-87d5-d5b82073c91b" TYPE="xfs"
/dev/sda2: UUID="XuBZVU-srAs-mfXn-IvQS-DGSw-Wq4e-21AUl0" TYPE="LVM2_member"
/dev/mapper/centos-swap: UUID="f88801ef-594e-40cf-b3d6-e232b01e183f" TYPE="swap"
/dev/mapper/centos-root: UUID="ca7bf22c-8874-4c7c-b8a3-7ce189298bd3" TYPE="xfs
[root@xxb1 ~]# fdisk /dev/sdb 对磁盘进行分区操作
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xf73a3cfb.
Command (m for help): n 新建分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p 分区类型,主分区/扩展分区
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G 1G大小
Partition 1 of type Linux and of size 1 GiB is set
Command (m for help): p 显示分区信息
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xf73a3cfb
Device Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
Command (m for help): wq 保存退出磁盘分区
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
格式化磁盘分区为xfs格式
[root@xxb1 ~]# mkfs.xfs /dev/sdb1 (mkfs -t ext4|xfs /dev/sdb1) 格式化分区(sdb1 第二块磁盘的第一分区)
meta-data=/dev/sdb1 isize=256 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
注意:
分区成功,但是发现不能格式化,因为系统没有识别(/proc/partition会存放分区信息)。如果没有识别到可以执行partprobe 进行分区识别,继续进行格式化(红帽6系列一般会出现这样的问题)
挂载使用:
[root@xxb1 ~]# mount /dev/sdb1 /mnt
[root@xxb1 mnt]# touch file{1..2}
卸载设备:
[root@xxb1 ~]# umount /mnt/(/dev/sdb1)
文件系统比较:
• ext4 是 Red Hat Enterprise Linux 6 的标准文件系统。它非常强大可靠,具有多项可以提高现代工作量处理性能的功能
• ext2 是常用于 Linux 中的较旧的文件系统。它简单可靠 ,非常适合小型存储设备 ,但是效率低于 ext4
• vfat 支持包括一系列相关文件系统 ( VFAT/FAT16 和FAT32 ),这些文件系统针对较旧版本的 Microsoft Windows开发,在大量的系统和设备上受支持
• xfs在Red Hat Enterprise Linux 7 的标准文件系统其具备数据完全性 、性能稳定、扩展性强( 18eb)、传输速率高( 7G/s)
开机自动加载设备:
[root@xxb1 ~]# blkid /dev/sdb1 查看设备ID
/dev/sdb1: UUID="801c32d3-978b-45bd-a1af-0dd9a8a8b262" [root@xxb1 ~]# mkdir xxb 创建挂载点
[root@xxb1 xxb]# cat /etc/fstab
UUID="801c32d3-978b-45bd-a1af-0dd9a8a8b262" /root/xxb xfs defaults 1 2
注意:第一列可以写设备名,但是这样如果在设备不断更换,位置变化会造成变化,因此使用ID还是比较靠谱滴
[root@xxb1 xxb]# mount -a 加载/etc/fstab文件
swap交换分区的介绍和建立:
换空间或交换区是磁盘驱动器上的空间,用作当前未使用部分内存的溢出。这样,系统就能在主内存中留出空间用于存当前正在处理的数据,并在系统面临主内存空间不足的风险时提供应急溢出。
新建分区,t修改分区ID。然后l显示ID,82是默认使用的swap分区。
[root@xxb1 ~]# fdisk /dev/sdb
。。。。。。。
Command (m for help): t 修改分区ID
Partition number (1,2, default 2): 2 选择分区
Hex code (type L to list all codes): l 显示分区ID
Hex code (type L to list all codes): 82 选择swap类型
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sdb1 1 307 1048576 83 Linux
/dev/sdb2 307 337 102400 82 Linux swap / Solaris
[root@xxb1 ~]# mkswap /dev/sdb2 格式化swap
Setting up swapspace version 1, size = 102396 KiB
no label, UUID=c5d7d5c2-d40b-43f8-af5c-4f41b4839403
自动挂载swap分区:
[root@xxb1 ~]# vim /etc/fstab
UUID="c5d7d5c2-d40b-43f8-af5c-4f41b4839403" swap swap defaults 0 0
[root@xxb1 ~]# swapon -a 加载配置,识别swap
[root@xxb1 ~]# swapon -s 查看swap分区状态
Filename Type Size Used Priority
/dev/dm-0 partition 2097148 0 -1
/dev/sdb2 partition 102396 0 -2
[root@xxb1 ~]# swapoff /dev/sdb2 停用指定的交换分区
注意:swap交换分区的设定是有一定艺术的,合理的空间,会给系统造成性能上的提升,因此给予一下建议。
系统内存4G swap给2G
系统内存4-16G swap给4G
系统内存16-64G swap给8G
系统内存64-256 swap给16G
磁盘加密技术:
LUKS(linux统一密钥设置)是标准的设备加密格式
LUKS可以对分区或卷进行加密
必须首先对加密的卷进行解密,才能进行挂载文件系统
(1)使用fdisk新建新分区
(2)# cryptsetup luksFormat /dev/vdc1 格式化加密层(提示输入密码)
(3)# cryptsetup open /dev/vdc1 xxb 开启加密层(设置虚拟设备名)
(4)# ll /dev/mapper/xxb 查看加密的虚拟设备
lrwxrwxrwx. 1 root root 7 Jan 14 12:33 /dev/mapper/xxb -> ../dm-1
(5)# mkfs.xfs /dev/mapper/xxb 格式化虚拟设备
(6)# mount /dev/mapper/xxb /root/hello/ 挂载虚拟加密设备
(7)# touch file{1..10} /root/hello/ 使用加密设备
(8)# umount /root/hello/ 卸载设备
(9)# cryptsetup close xxb 关闭加密虚拟设备(/dev/mapper/下不会查看到xxb虚拟设备)
(10)
注意:以后使用就需要进行open打开进行读写操作,结束之后使用close进行关闭。
自动挂载加密设备:
# vim /root/passwd
westos1234
# vim /etc/crypttab
xxb /dev/vdc1 /root/passwd
# vim /etc/fstab
/dev/mapper/xxb /root/hello xfs defaults 0 0
#chmod 600 /root/passwd
#cryptsetup AddKey /dev/vdc1 /root/passwd
#reboot
第五章:使用逻辑卷管理器管理存储
查看LVM组件;(lvm介绍)
实施LVM存储;(system-config-lvm)
增加文件系统;
添加磁盘;
创建快照作为备份;
LVM模块介绍:
• 物理分区或磁盘是 LVM 的第一构建块。这些可以是分区、完整磁盘、 RAID 集或 SAN磁盘
• 物理卷是 LVM 所使用的基础“物理”存储。这通常是块设备 ,例如分区或完整磁盘。设备必须初始化为 LVM 物理卷 ,才能与 LVM 结合使用
• 卷组是存储池,由一个或多个物理卷组成
• 物理区块是物理卷中存储的小型数据区块 ,用作 LVM 存储的后端
• 逻辑区块映射到物理区块 ,构成 LVM 存储的前端。默认情况下,每个逻辑区块映射到一个物理区块。启用某些选项将更改此映射。例如,镜像会导致每个逻辑区块映射到两个物理区块
• 逻辑卷是逻辑区块组。逻辑卷可以像硬盘驱动器分区一样使用
通过使用lvm,主机可以在存储不够的时候随时热拉伸磁盘大小,而不需用进行更换设备,等等。。可以灵活的管理设备的大小。
使用命令行工具实施LVM存储:
1.创建LVM格式的新分区(8e格式)
2.创建物理卷PV(pvcreate /dev/sdbN)用于初始化分区,使其作为物理卷与LVM结合使用。
3.创建卷组VG(vgcreate vgname /dev/sdbN)自定义卷组。(可以使用vgextend添加新物理卷)
4.创建和使用新逻辑卷(
lvcreate -n lvname -L 2G vgname从vg上创建容量为2G大小的逻辑卷
mkfs -t ext4|xfs /dev/vgname/lvname 格式化逻辑卷
mkdir /data创建挂载点
echo "/dev/vgname/lvname /data ext4|xfs defaults 1 2" > /etc/fstab 自动挂载逻辑卷
mount -a 自动加载文件系统)
#pvdisplay /dev/sda1 显示有关特定物理卷信息
#vgdisplay vgname 显示有关卷组
#lvdisplay /dev/vgname/lvname 显示有关特定逻辑卷的信息
扩展逻辑卷和xfs文件系统:
#df -h 查看大小
#vgdisplay vgname 查看可以分期
#lvextend -l 1G /dev/vgname/lvname 拉伸lvname
#xfs_growfs /dev/vgname/lvname 刷新文件系统文件(ext文件系统使用的是resizee2fs)
#df -H 查看拉伸后的大小
注意:ext系列文件系统支持拉伸和缩减空间(必须查看文件大小)
创建快照以便进行数据备份:
LVM除过可以对磁盘存储进行灵活管理外,还可以进行对逻辑卷进行快照(临时保留所更改的逻辑卷的原始数据)。快照提供原始卷的静态视图,从而能够以一致状态备份其数据。
注意:快照卷大小只足以存储在它存在期间更改的数据大小即可。
创建快照和备份:
[root@xxb1 ~]# lvcreate -s -n snaptest -L 1G /dev/vgname/lvname
[root@xxb1 ~]# mkdir /root/mon 创建挂载点
[root@xxb1 ~]# mount -o ro /dev/vgname/snaptest /root/mon 将存储挂载
验证快照逻辑卷的状态
[root@xxb1 ~]#lvs /dev/vgname/snaptest
卸载,删除快照
[root@xxb1 ~]#umount /root/mon
[root@xxb1 ~]#lvremove /dev/vgname/snaptest
第六章:文本处理工具
http://my.oschina.net/xxbAndy/blog/370806 对于文本的处理我们经常需要用到正则表达式,以上链接帮助大家理解。
diff工具:查看文本区别,可以用来创建补丁文件(用于在多台主机之间对相似文件进行修改)
[root@xxb1 test]# diff passwd passwd+
40a41
> xxbandy:x:1992:q2u9ednaskcnkdsjhqwiodzbn
#diff -b package-old package-new > package.patch 制作软件补丁
patch命令:
#patch package-old package.patch -b 打补丁,并保存旧包
grep命令:grep可以过滤模式匹配行。(-i不区分大小写;-n前置返回行的行号;-r对文件执行递归式搜索,从命名目录开始;-c显示具有匹配模式的行的计数;-v返回不包含模式的行;^匹配行首;$匹配行尾)
cut命令:截取文件中的文本字段或列并显示输出(-d指定分隔符,-f指定每行中提取的字段,-c指定要从每行中提取的文本列)
sort命令:排序文本数据,通常与管道一起使用(-n按数值排序,-k设置排序字段,-t指定其他字段分隔符)
uniq命令:过滤文件中重复的相邻行(想要打印文件唯一行,首先对uniq的输入进行排序) -u仅显示唯一行,-d显示重复行,-c每行显示一次(包含出现计数)
tr命令:用于转字符(tr 'A-Z' 'a-z' <file)
sed命令:流编辑器,对文本数据流执行编辑。假定要处理一个文件名,sed将对文件中的所有行执行搜索和替换,将修改后的数据发送到标准输出。
sed格式化使用:s/old/new/ 执行字符串替换
d 删除匹配的行
注意:重点掌握grep,sort,sed
第七章:访问网络文件共享服务NFS
挂载网络共享。自动挂载网络文件系统
网络文件系统是由网络附加存储NAS通过网络向多个主机提供的一种文件系统,而不是由块设备提供的,客户端通过特殊的文件系统协议和格式访问远程存储。
linux中有两种主要协议可用访问网络文件系统:NFS,CIFS(samba针对windows的标准网络文件系统).
访问网络共享的三个步骤:
1.识别访问的远程共享
2.确定挂载点,创建挂载点的目录
3.通过相应的名字或配置更改挂载网络文件系统。
这里主要介绍NFS:
NFS ( Network File System )是由 Linux 、 UNIX 及其他类似操
作系统使用的互联网标准协议,可作为它们的本地网络文件系统。
它是一种活动扩展之下的开放标准 ,可支持本地 Linux 权限和文件
系统功能
• Red Hat Enterprise Linux 7 在默认情况下支持 NFSv4 (该协议的
版本 4 ),并在该版本不可用的情况下自动回退到 NFSv3 和
NFSv2 。对于在客户端上运行的所有版本的NFS ,均应启用两种
服务 : rpcbind 和 nfslock 。 NFSv4 使用 TCP 协议与服务器进
行通信 ,而较早版本的 NFS 则可能使用 TCP 或 UDP
• 有两种方法用来确定由服务器提供的 NFS 导出 ,或叫做文件共享。
如果服务器支持 NFSv3 或 NFSv2 ,您可以使用 showmount -e
server 命令来获取导出项列表。如果服务器支持 NFSv4 ,则可以
将 / 导出项挂载到一个空目录并浏览所有导出文件系统的内容。
#showmount -e remote-IP 查看可用NFS
#mkdir /xxb 确定挂载点
#mount remote-IP:/var/ftp/pub /xxb
第八章:LDAP网络用户账户
第九章:部署ftp文件共享服务
• FTP (文件传输协议 )是 INTERNET 上仍常用的最老的网络协议之一,它为系统提供了通过网络与远程服务器进行传输的简单方法.
• 在 RED HAT ENTREPRISE LINUX 6 中。 FTP 服务器包的名称为VSFTPD ,它代表Very Secure FileTransfer
Protocol Damon 服务器名称也叫做 vsftpd
• 默认配置文件让 ANONYMOUS 用户只能下载位于CHROOT 目录中的内容。 /var/ftp/ 这意味着远程 FTP客户端能以用户 anonymous 或 ftp 身份连接到服务器(无需密码 ),并从 ftp 服务器上的 /var/ftp/目录下文件(其本地 ftp 用户可以读取这些文件)
配置FTP服务步骤:
1.#yum install vsftpd -y
2.#systemctl restart vsftpd
3.#systemctl enable vsftpd
4.#lftp ftp-server 测试服务(进入的是ftp默认发布目录/var/ftp/)
FTP服务的更多配置选项:
默认配置为匿名 FTP 服务器 ,仅允许匿名客户端下载并且禁用所有本地用户 ,禁止上传。
vsftpd 配置件: /etc/vsftpd/vsftpd.conf,
document root 位于 /var/ftp/ 中 ,配置修改后,需重新启动服务
• 选项示例:
– anonymous_enable=YES 允许匿名用户访问
– local_enable=NO 本地用户不可访问
– write_enable=NO 可写
- anon_upload_enable=YES 匿名用户可上传
#chown_uploads=YES 上传用户登录
#chown_username=whoever 上传文件为指定用户身份
#chroot_local_user=YES 本地用户不可以切换根/目录 (NO为本地用户可以切到/环境)
#chroot_list_enable=YES 打开本地列表
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list(与上面的切根作用相反)
例子;
chroot_local_user=YES(NO)
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list(hello)
所有本地用户不可以切根,但是只有hello用户可以。
(所有本地用户可以切根,唯独hello用户不可以)
注意:ftp服务的默认发布目录一定不能给登录用户读(w)权限。匿名用户登录(o-w),本地用户登录(u-w)
[root@xxb1 vsftpd]# lftp -u xxb localhost
lftp xxb@localhost:~> ls
ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
说明本地用户xxb的家目录用户有写(w)权限
/etc/vsftpd/ftpusers 存放着黑名单(用户不能登录)
/etc/vsftpd/user_list (
userlist_enable=YES
userlist_deny=NO 如果deny为no则仅允许user_list用户登录。参数默认为YES,user_list用户都不能登录)
项目1:虚拟用户登录ftp服务器
[root@xxb1 vsftpd]#vim /etc/vsftpd/users (存放虚拟用户)
world 虚拟用户
westos 密码
echoxu 虚拟用户
westos 密码
[root@xxb1 vsftpd]# db_load -T -t hash -f users login.db (每次修改虚拟用户文件必须加载pam模块,必须指定用户密码文件)
[root@xxb1 pam.d]# cat /etc/pam.d/virtual
auth required pam_userdb.so db=/etc/vsftpd/login
account required pam_userdb.so db=/etc/vsftpd/login
##vim /etc/vsftpd/vsftpd.conf
pam_service_name=virtual 修改密码认证文件(默认是使用vsftpd认证的)
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES 打开客户连接
guest_username=ftp 默认身份是ftp
#local_root=/var/xxb 指定用家目录
尝试使用虚拟用户登录:
[root@xxb1 vsftpd]# lftp -u world localhost
Password:
lftp world@localhost:~> ls
drwxr-xr-x 3 0 50 30 Jan 15 06:15 pub
[root@xxb1 vsftpd]# lftp -u echoxu localhost
Password:
lftp echoxu@localhost:~> ls
drwxr-xr-x 3 0 50 30 Jan 15 06:15 pub
这样默认是以虚拟用户登录默认发布目录。(普通用户登录一般登录的是自己的家目录)
项目2:ftp用户家目录(给上面虚拟用户自己的家目录)
#mkdir -p /var/ftpuserdir/xxb123(echoxu)
#touch /var/ftpuserdir/xxb123/myxxb
#touch /var/ftpuserdir/echoxu/my-echo
#chown ftp.ftp /var/ftpuserdir/*
[root@xxb1 xxb123]# vim /etc/vsftpd/vsftpd.conf
pam_service_name=virtual
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=ftp
local_root=/var/ftpuserdir/$USER
user_sub_token=$USER
测试:
#lftp -u xxb123 localhost 登录虚拟用户,进入的是自己的家目录
项目3:自定义虚拟用户权限
#vim /etc/vsftpd/vsftpd.conf
增加:
user_config_dir=/etc/vsftpd/configdir
#chmod u-w /var/ftpuserdir/*
#mkdir -p /var/ftpuserdir/exhoxu/pub
#mkdir -p /var/ftpuserdir/xxb123/pub
#chown ftp.ftp /var/ftpuserdir/exhoxu(xxb123)/pub
#vim /etc/vsftpd/configdir/echoxu
anon_upload_enable=YES
#systemctl restart vsftpd
使用虚拟用户echoxu可以进行上传文件,使用xxb123不可以上传。
第十章:selinux的管理
selinux概念:
SELINUX (安全增强型 Linux )是可保护你系统安
全性的额外机制。
• 在某种程度上,它可以被看作是与标准权限系统并行的权限系统。在常规模式中,以用户身份运行进程,并且系统上的文件和其他资源都设置了权限(控制哪些用户对哪些文件具有哪些访问权SELINUX 的另一个不同之处在于,若要访问文件,你必须具有普通访问权限SELINUX 访问权限。因此 ,即使以超级用户身份 root 运行进程 ,根据进程以及文件或资源的 SELinux 安全性上下文可能拒绝访问文件或资源限)标签
Selinux安全上下文访问规则:
WEB 服务器的 HTTPD 进程设置了 SELINUX 上下文system_u:system_r:httpd_t 标签。该上下文的重要部分是第三个用冒号分隔的字段 SELINUX 类型 : httpd_t
• 系统上的文件和资源也设置了 SELINUX 上下文标签 ,并且重要的部分是SELINUX 类型。例如, /var/www/html 中的文件具有类型 httpd_sys_content_t 。 /tmp 和/var/tmp 中的文件通常具有类型 tmp_t
• Seliux 策略具有允许以 httpd_t 身份运行的进程访问标记为httpd_sys_content_t 的文件的规则。没有规则允许这些进程访问标记有tmp_t 的文件,因此将拒绝这些访问,即使常规文件权限指出应该允许这些访问。
Selinux模式:
强制模式(Enforcing):Selinux主动拒绝访问,尝试读取类型上下文为tmp_t的web服务器。在强制模式中,Selinux既记录冲突,也强制执行规则。
许可模式(Permissive):通常对于问题进行故障排除。在许可模式下,即使没有明确规则,Selinux也允许所有交互,并且记录所有被拒绝的交互。此模式可以用于确定是否存在Selinux问题。无需重新引导即可从强制模式转为许可模式,或从许可模式到强制模式。
Selinux模式的修改:
#getenforce 查看selinux模式
#setenforce 0|1 0表示许可模式,1表示强制
[root@xxb1 ftp]# vim /etc/sysconfig/selinux
SELINUX=disabled (enforcing|permissive)
注意:括号里面的两种模式转换立即生效,如果括号里面的模式需要转换为disabled需要重启主机。
Selinux安全上下文的显示:
文件处理命令一般具有一个用于显示或设置Selinux上下文的选项(通常是-Z)。例如:ps,ls,cp,mkdir都可以使用-Z选项显示或设置selinux上下文。
#ps auxZ
#ps -ZC
#ls -Z
# ls -Zd hello/ 查看目录的安全上下文
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 hello/
# ls -Z hello/ 查看目录文件的安全上下文
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 one
SElinux对vsftpd的影响:
1.selinux=permissive(selinux=diabled)
[root@xxb1 hello]# ll -ld /var/ftp/pub/
drwxr-xr-x. 3 root ftp 30 Jan 15 14:15 /var/ftp/pub/
[root@xxb1 hello]# ll -ld ../hello/
drwxr-xr-x. 2 root ftp 4096 Jan 15 14:15 ../hello/
anon_upload_enable=YES
[root@xxb1 hello]# lftp localhost
lftp localhost:~> cd pub/hello/
lftp localhost:/pub/hello> put /etc/fstab
put: Access failed: 553 Could not create file. (fstab)
[root@xxb1 pub]# lftp localhost
lftp localhost:~> cd pub/hello/
lftp localhost:/pub/hello> put /etc/fstab
put: Access failed: 553 Could not create file. (fstab)
[root@xxb1 pub]# setenforce 0
[root@xxb1 pub]# lftp localhost
lftp localhost:~> cd pub/hello/
lftp localhost:/pub/hello> put /etc/fstab
465 bytes transferred
注意:也就是说,vsftpd服务允许匿名用户上传文件,但是上传的目录必须有写(w)权限,这样整个服务对于匿名用户才是可以上传文件的。但是selinux会影响目录的权限。
2.selinux开启状态下的vsftpd的上传:
[root@xxb1 pub]# setenforce 1
[root@xxb1 pub]# ls -Z
drwxrwxr-x. root ftp unconfined_u:object_r:public_content_t:s0 hello
默认selinux对目录没有写权限,因此使用chcon -t暂时修改目录的安全上下文,允许目录可写。
[root@xxb1 pub]# chcon -t public_content_rw_t hello/
[root@xxb1 pub]# lftp localhost
lftp localhost:~> cd pub/hello/
lftp localhost:/pub/hello> put /etc/passwd
put: Access failed: 553 Could not create file. (passwd)
对上传目录增加写权限会发现仍然不能上传,这是因为sebool布尔值会对selinux控制的服务进行制约。
[root@xxb1 pub]# getsebool -a | grep ftp
ftp_home_dir --> off
ftpd_anon_write --> off
。。。。。。。。。。。。
查看布尔值,发现selinux默认不允许ftp匿名写。
修改sebool的值.
[root@xxb1 pub]# setsebool -P ftpd_anon_write on
[root@xxb1 pub]# getenforce
Enforcing
[root@xxb1 pub]# lftp localhost
lftp localhost:~> cd pub/hello/
lftp localhost:/pub/hello> put /etc/passwd
2004 bytes transferred
3.使用自定义默认发布目录
[root@xxb1 hello]# vim /etc/vsftpd/vsftpd.conf
local_root=/mnt/hello
[root@xxb1 hello]# systemctl restart vsftpd
将selinux设置为permissive(0)可以访问。使用本地用户登录(lftp -u xxb localhost)可以看到/mnt/hello下面的内容。
将selinux设置成enforcing或者disabled,需要设置安全上下文的列表。才能查看发布目录的内容
[root@xxb1 hello]# ls -Z /mnt/hello/
drwxr-xr-x. root root unconfined_u:object_r:mnt_t:s0 pub
[root@xxb1 hello]# ls -Z /var/ftp/
drwxr-xr-x. root ftp system_u:object_r:public_content_t:s0 pub
[root@xxb1 hello]# chcon -t public_content_rw_t pub/ -R
临时修改安全上下文
[root@xxb1 /]# chcon -t public_content_t /data
[root@xxb1 /]# restorecon /data/ 刷新安全上下文
[root@xxb1 /]# ls -Zd /data/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /data/
[root@xxb1 /]# semanage fcontext -l | grep /var/ftp
/var/ftp(/.*)? all files system_u:object_r:public_content_t:s0
/var/ftp/bin(/.*)? all files system_u:object_r:bin_t:s0
使用semanage命令进行永久更改安全上下文
[root@xxb1 /]# semanage fcontext -a -t public_content_t "/data(/.*)?"
[root@xxb1 /]# semanage fcontext -l | grep /data
/data(/.*)?
查看内核中selinux状态(默认的安全上下文)
[root@xxb1 /]# restorecon -RvvF /data 刷新内核中的安全上下文参数
参数修改后,使用本地用户登录就可以访问/data/pub里面的内容了。要想上传必须ftp服务允许(本地)用户上传,默认家目录可写,sebool值允许写。
(用semanage fcontext 会将其写入内和内核)
semanage fcontext -l(查看)
getsebool -a
setsebool -P ftpd_anon_write on
暂时修改selinux安全上下文:
#chcon -t 一次性定制安全上下文,执行restorecon刷新后还原
#semanage fcontext -l(查看) 永久更改安全上下文
注意:有的系统默认没有安装此软件,使用(yum whatprovides */semanage)查看此软件包。
semanage fcontext使用正则表达式来指定路径和文件名。fcontext规则中最常营的扩展正则表达式是(/.*)?,表示随意地匹配/后跟任何数量的字符。
#semanage fcontext将递归地与在表达式前面列出的目录以及该目录中的所有内容相互匹配。
管理selinux布尔值:
Selinux布尔值是更改selinux策略行为的开关。
selinux布尔值是可以启用或禁用的规则。
#getsebool 用于显示布尔值
#setsebool -P 修改SElinux策略,永久保留修改。
#semanage boollean -l 显示布尔值是否永久
监控SElinux冲突:
必须安装setroubleshoot-server 软件,可以将selinux消息发送至/var/log/messages
#sealert -I UUID用于生成特定事件的报告
#sealert -a /var/log/audit/audit.log 用于在该文件中生成所有事件的报告。
第十一章:系统恢复技术
MBR的446字节存放了系统的引导信息,如果引导毁坏了,可以进入挽救模式进行修复。
1.模拟主引导损坏:
#dd if=/dev/zero of=/dev/sda bs=446 count=1
进入挽救模式:
sh-4-2#chroot /mnt/sysimage
bash-4.2#grub2-install /dev/sda
2.不小心删除linux启动文件/boot/grub2/grub.cfg
默认开机手动启动:
grub>set root='hd0,msdos1'
grub>linux16 /boot/vmlinuz-3....... ro root=/dev/mapper/centos-root
grub>initrd /boot/initafs-32....img
grub>boot
手动生成grub.cfg:
#grub2-mkconfig > /boot/grub2/grub.cfg
3.修改密码
启动时修改kernel引导项"rw rd.break"
ctrl +x 进入单用户
#chroot /sysroot 进入单用户模式
#passwd 修改密码
#touch /.autorelabel
ctrl +d 退出
4./boot/grub2/文件损坏异常(其实是缺少kernel包)
进入挽救模式,配置ip进行下载相应的kernel软件包,安装(rpm -ivh kernel**.rpm --force)并且重新生成grub.cfg文件,并且进行重启。