根据红帽RHEL7官方文档对centos7进行技术剖析(二)

第一章 使用红帽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文件,并且进行重启。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

使用 Nginx 提升网站访问速度

本文主要介绍如何在 Linux 系统上安装高性能的 HTTP 服务器 —— Nginx、并在不改变原有网站结构的条件下用 Nginx 来提升网站的访问速度。 N...

4638
来自专栏云计算教程系列

如何在Ubuntu 16.04上安装Prometheus

Prometheus是一个功能强大的开源监控系统,可从您的服务中收集指标并将其存储在时间序列数据库中。它通过Grafana等工具提供多维数据模型,灵活的查询语言...

9542
来自专栏JavaEdge

操作系统之进程管理一、进程二、进程状态及状态转换三、进程队列四、进程控制五、深入理解六、线程七、死锁二、资源分配图(RAG:Resource Allocation Graph)三、死锁预防四、死锁避免

58910
来自专栏云计算教程系列

如何在Ubuntu 14.04上安装Cassandra并运行单节点集群

Cassandra或Apache Cassandra是一个高度可扩展的开源NoSQL数据库系统,在多节点设置上实现了出色的性能。

2583
来自专栏零基础使用Django2.0.1打造在线教育网站

零基础使用Django2.0.1打造在线教育网站(九):初识后台管理

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

3573
来自专栏米扑专栏

Linux crond 不执行原因分析

56911
来自专栏北京马哥教育

Linux性能及调优指南(翻译)之Linux进程管理

本文为IBM RedBook的Linux Performanceand Tuning Guidelines的1.1节的翻译 原文地址:http://www.re...

4089
来自专栏13blog.site

Spring+SpringMVC+MyBatis+easyUI整合基础篇(四)代码简化

作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载。 前言 项目展示地址,点这里...

2906
来自专栏别先生

使用shell脚本定时采集日志数据到hdfs分布式文件系统

6567
来自专栏wblearn

我的Github之Pull request的使用

GitHub已经成为的一切开放源码软件的基石。开发人员喜欢它,基于它进行协作,并不断通过它开发令人惊叹的项目。除了​​代码托管,GitHub的主要吸引力是使用它...

1252

扫码关注云+社区

领取腾讯云代金券