一、知识整理1、anaconda系统安装程序:默认图形启动;
使用光盘启动,在选择模式界面tab键在后面增加text或按下ESC键,输入lnuxtext进入字符界面安装。
2、创建kickstart文件:
直接手动编辑:依据模板修改,/root目录下的anaconda.cfg
使用创建工具创建:system-config-kickstart,图形化工具:也可以使用模板修改
检查ks文件语法错误:ksvalidator
3、SELinux是美国国家安全局NSA(theNationalSecurityAgency)和SCC(SecureComputingCorporation)开发的linux的一个强制访问控制的安全模块。2000年以GNUGPL发布,linux内核2.6版本后集成在内核中。模型有两种:
DAC:DiscretionaryAccessControl自由访问控制
MAC:MandatoryAccessControl 强制访问控制
工作类型有四种:strict:centos5,每个进程都收到sellinux的控制;
targeted:用来保护常见的网络服务,仅有限进程受到selinux控制,只监控容易被入侵的进程,rhel4只保护13个服务,rhel5保护88个服务。
minimum:centos7,修改过的targeted,只对选择的网络服务;
mls:提供MLS(多级安全)机制的安全性
后两者稳定性不足,未加以应用。
4、传统Linux一切皆文件,由用户,组,权限控制访问在SElinux中,一切皆对象,由存放在Inode的扩展属性域的安全元素所控制其访问。所有文件和端口资源和进程都具备安全标签:安全上下文(securitycontext)。安全上下文有五个元素组成:
user:role:type:sensitivity:category
user_u:object_r:tmp_t:s0:c0
实际上下文:存放在文件系统中,ls-Z可以查看文件的元素;ps-Z查看进程的。
期望上下文:存放在二进制的SELinux策略库(映射目录和期望安全上下文)中
semanagefcontext-l查看所有期望上下文
五个安全元素:User:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于自由(unconfined)进程;
Role:定义文件、进程和用户的用途:文件:object_r,进程和用户:system_r
Type:指定数据类型,规则中定义何种进程类型访问何种文件;
Target策略基于type实现,多服务公用:public_content_t
sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified,secret,top,secret,一个对象有且只有一个sensitivity,分0-15级,s0最低,Target策略默认使用s0。
Category:对于特定组织划分不分层的分类,如FBISecret,NSAsecret,一个对象可以有多个category,c0-c1023共1024个分类,Target策略不是用category。
5、SElinux策略:对象:所有可以读取的对象,包括文件、目录和进程、端口等
主体,进程称为主体
SELinux中对所有的文件都赋予一个type的文件类型便签,对于多有的进程也赋予各自的一个domain的标签。Domain标签能够执行的操作由安全策略里定义。
当一个subject试图访问一个object,kernel中的策略执行服务器将建成AVC(访问矢量缓存AccessVectorCache),在AVC中,subject和object的权限被缓存(cached),查找“应用+文件”的安全环境。然后根据查询结果允许或拒绝访问。
安全策略:定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一个对象是允许还是的,并且定义了哪种行为是允许或拒绝。
6、SELinux帮助:yum-yinstallselinux-policy-devel
在centos6中使用makewhatis同步数据库;在centos7中使用mandb同步数据库。
二、命令详解和事例
1、SELinux的状态:enforcing:强制,每个受限的进程都必然受限;
permissive:允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志;
disabled:禁用。
2、getenforce 获取sellinux当前状态
sestatus 查看selinux状态
setenforce0|1 设置为permissive或enforcing
[root@centos68 usb]# getenforce Enforcing[root@centos68 usb]# sestatusSELinux status: enabledSELinuxfs mount: /selinuxCurrent mode: enforcingMode from config file: enforcingPolicy version: 24Policy from config file: targeted[root@centos68 usb]# setenforce 0[root@centos68 usb]# sestatusSELinux status: enabledSELinuxfs mount: /selinuxCurrent mode: permissiveMode from config file: enforcingPolicy version: 24Policy from config file: targeted[root@centos68 usb]# getenforce Permissive配置文件:
/boot/grub/grub.conf使用selinux=0禁用selinux
/etc/sysconfig/selinux
/etc/selinux/config
所有的修改都无法直接生效,都必须重启之后生效。
3、给文件重新打安全标签:chcon[opt][-uUSER][-rROLE][-tTYPE]FILE
-R递归设置
–reference=FILE 与此文件相同设置
[root@centos68 tmp]# ll -Z-rw-r–r–. root root unconfined_u:object_r:user_tmp_t:s0 f1-rw-r–r–. root root unconfined_u:object_r:user_tmp_t:s0 f2-rw-r–r–. root root unconfined_u:object_r:user_tmp_t:s0 f3[root@centos68 tmp]# chcon -u unconfined_u -r object_r -t default_t f1[root@centos68 tmp]# ll -Z-rw-r–r–. root root unconfined_u:object_r:default_t:s0 f1-rw-r–r–. root root unconfined_u:object_r:user_tmp_t:s0 f2-rw-r–r–. root root unconfined_u:object_r:user_tmp_t:s0 f3[root@centos68 tmp]# chcon –reference=f2 f1[root@centos68 tmp]# ll -Z -rw-r–r–. root root unconfined_u:object_r:user_tmp_t:s0 f1-rw-r–r–. root root unconfined_u:object_r:user_tmp_t:s0 f2-rw-r–r–. root root unconfined_u:object_r:user_tmp_t:s0 f3恢复目录或文件默认的安全上下文:restorecon/PATH/FILE
查看默认的安全上下文,若没有默认安全上下文则无法设置:semanagefcontext-l
semanage来自policycoreutils-python包
添加安全上下文:semanagescontext-a-thttpd_sys_content_t ‘/testdir(/.*)?’
restorecon-Rv/testdir
删除安全上下文:semanagefcontext-d-thttpd_sys_content_t ‘/testdir(/.*)?’
[root@centos68 tmp]# semanage fcontext -a -t default_t ‘/tmp(/.*)?'[root@centos68 tmp]# ll -Z-rw-r–r–. root root unconfined_u:object_r:default_t:s0 f1-rw-r–r–. root root unconfined_u:object_r:user_tmp_t:s0 f2-rw-r–r–. root root unconfined_u:object_r:user_tmp_t:s0 f3[root@centos68 tmp]# semanage fcontext -l | grep “/tmp(/.*)?”/tmp(/.*)? all files system_u:object_r:default_t:s0 [root@centos68 tmp]# restorecon -Rv /tmprestorecon reset /tmp/f3 context unconfined_u:object_r:user_tmp_t:s0->unconfined_u:object_r:default_t:s0restorecon reset /tmp/.ICE-unix context system_u:object_r:xdm_tmp_t:s0->system_u:object_r:default_t:s0restorecon reset /tmp/f2 context unconfined_u:object_r:user_tmp_t:s0->unconfined_u:object_r:default_t:s0[root@centos68 tmp]# ll -Z-rw-r–r–. root root unconfined_u:object_r:default_t:s0 f1-rw-r–r–. root root unconfined_u:object_r:default_t:s0 f2-rw-r–r–. root root unconfined_u:object_r:default_t:s0 f3[root@centos68 tmp]# semanage fcontext -d -t default_t ‘/tmp(/.*)?'[root@centos68 tmp]# semanage fcontext -l | grep “/tmp(/.*)?”对文件进行移动不改变安全标签;复制文件则改变便签。
4、端口便签:查看端口标签:semanageport-l
添加端口:semanageport-a-tport_label-ptcp|udpPORT
删除端口:semanageport-d-tport_label-ptcp|udpPORT
[root@centos68 tmp]# semanage port -a -t tftp_port_t -p udp 9527[root@centos68 tmp]# semanage port -l | grep “tftp_port_t”tftp_port_t udp 9527, 69[root@centos68 tmp]# semanage port -d -t tftp_port_t -p udp 9527[root@centos68 tmp]# semanage port -l | grep “tftp_port_t”tftp_port_t udp 69修改端口:semanageport-m-tport_label-ptcp|udpPORT
5、SElinux的布尔值:
查看bool值:getsebool-a
查看bool值,包括说明semanageboolean-l
查看修改过的布尔值:semanageboolean-l-C
设置bool值的命令:
setseboolBOOLEANVALUE
0为开启,1为关闭;选项-P永久生效
[root@centos68 ~]# semanage boolean -l | grep virt_use_sambavirt_use_samba (关 , 关) Allow virt to manage cifs files[root@centos68 ~]# setsebool virt_use_samba 1[root@centos68 ~]# semanage boolean -l | grep virt_use_sambavirt_use_samba (开 , 关) Allow virt to manage cifs files6、SELinux日志管理:yuminstallsetroublesshoot*(重启生效)
将错误的信息写入/var/log/message
[root@centos68 ~]# grep setroubleshoot /var/log/messagesSep 11 03:50:45 centos68 yum[4947]: Installed: setroubleshoot-server-3.0.47-11.el6.x86_64Sep 11 03:50:47 centos68 yum[4947]: Installed: setroubleshoot-plugins-3.0.40-2.el6.noarchSep 11 03:50:48 centos68 yum[4947]: Installed: setroubleshoot-3.0.47-11.el6.x86_64查看安全日志说明:
[root@centos68 ~]# sealert -l 0Errorquery_alerts error (1003): id (0) not found扫描并分析日志:sealert -a /var/log/audit/audit.log[root@centos68 ~]# sealert -a /var/log/audit/audit.log 100% donefound 0 alerts in /var/log/audit/audit.log三、课后练习
1、制作光盘或U盘引导盘。
创建引导光盘:
步骤一:复制光盘目录下的isolinux目录至/tmp/myiso目录下
[root@centos68 tmp]# mkdir myiso[root@centos68 tmp]# cp -rf /media/cdrom/isolinux ./myiso/步骤二:编辑isolinux.cfg
[root@centos68 tmp]# vim myiso/isolinux/isolinux.cfg label linux menu label ^Install or upgrade an existing system menu default kernel vmlinuz append initrd=initrd.img text ks=cdrom:/myks.cfg步骤三:生成kickstart文件myks.cfg并将其放入isolinux目录中,此处使用在图形界面下创建的kickstart文件:
[root@centos68 tmp]# cp /root/myks.cfg ./myiso/[root@centos68 tmp]# vim myiso/myks.cfg步骤四:生成引导文件,光盘镜像boot.iso
[root@centos68 tmp]# cd myiso/[root@centos68 myiso]# mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V “CentOS 6.8 x86_64 boot” -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso ./I: -input-charset not specified, using utf-8 (detected in locale settings)genisoimage 1.1.9 (Linux)Scanning ./Scanning ./isolinuxExcluded by match: ./isolinux/boot.catExcluded: ./isolinux/TRANS.TBLWriting: Initial Padblock Start Block 0Done with: Initial Padblock Block(s) 16Writing: Primary Volume Descriptor Start Block 16Done with: Primary Volume Descriptor Block(s) 1Writing: Eltorito Volume Descriptor Start Block 17Size of boot image is 4 sectors -> No emulationDone with: Eltorito Volume Descriptor Block(s) 1Writing: Joliet Volume Descriptor Start Block 18Done with: Joliet Volume Descriptor Block(s) 1Writing: End Volume Descriptor Start Block 19Done with: End Volume Descriptor Block(s) 1Writing: Version block Start Block 20Done with: Version block Block(s) 1Writing: Path table Start Block 21Done with: Path table Block(s) 4Writing: Joliet path table Start Block 25Done with: Joliet path table Block(s) 4Writing: Directory tree Start Block 29Done with: Directory tree Block(s) 2Writing: Joliet directory tree Start Block 31Done with: Joliet directory tree Block(s) 2Writing: Directory tree cleanup Start Block 33Done with: Directory tree cleanup Block(s) 0Writing: Extension record Start Block 33Done with: Extension record Block(s) 1Writing: The File(s) Start Block 34 22.37% done, estimate finish Sun Sep 11 12:10:41 2016 44.66% done, estimate finish Sun Sep 11 12:10:41 2016 67.02% done, estimate finish Sun Sep 11 12:10:41 2016 89.29% done, estimate finish Sun Sep 11 12:10:41 2016Total translation table size: 4703Total rockridge attributes bytes: 1440Total directory bytes: 2048Path table size(bytes): 26Done with: The File(s) Block(s) 22215Writing: Ending Padblock Start Block 22249Done with: Ending Padblock Block(s) 150Max brk space used 022399 extents written (43 MB)步骤五:测试使用
使用光盘镜像:

开机使用光盘启动:
注意:添加虚拟机的时候给的空间不能少于ks模板中给定的数值,否则报错。

创建引导U盘
方法一:直接将光盘内容写入U盘使用;
[root@centos68 ~]# dd if=/dev/sr0 of=/dev/sdb记录了7649280+0 的读入
记录了7649280+0 的写出
3916431360字节(3.9GB)已复制,160.877 秒,24.3MB/秒
2、安装http服务,改变网站的默认主目录为/website,添加SELinux文件标签规则,设置http_sys_content_t到/website及目录下所有文件,使网站可访问。
步骤一:更改配置文件,改变默认主目录:
[root@centos68 ~]# vim /etc/httpd/conf/httpd.conf# This should be changed to whatever you set DocumentRoot to.<Directory “/var/www/website”># symbolic links and aliases may be used to point to other locations.DocumentRoot “/var/www/website”更改两行,将目录设置为website。
步骤二:重启服务,添加网页文件
[root@centos68 website]# service httpd restart停止 httpd: [确定]正在启动 httpd:httpd: apr_sockaddr_info_get() failed for centos68httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName [确定][root@centos68 website]# echo “hello man” > index.html[root@centos68 website]# lsindex.html步骤三:关闭selinux访问限制,关闭防火墙,访问检验

1、修改网站端口为9527,增加SELinux端口标签,使网站可访问。
修改http监听的端口:
[root@centos68 ~]# semanage port -l | grep httphttp_cache_port_t tcp 3128, 8080, 8118, 8123, 10001-10010http_cache_port_t udp 3130http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000pegasus_http_port_t tcp 5988pegasus_https_port_t tcp 5989[root@centos68 ~]# semanage port -a -t http_port_t -p tcp 9527[root@centos68 ~]# semanage port -l | grep httphttp_cache_port_t tcp 3128, 8080, 8118, 8123, 10001-10010http_cache_port_t udp 3130http_port_t tcp 9527, 80, 81, 443, 488, 8008, 8009, 8443, 9000pegasus_http_port_t tcp 5988pegasus_https_port_t tcp 5989修改文件:
#Listen12.34.56.78:80
Listen80
Listen9527
使用windows浏览器检验是否能够访问:

3、启动SELinux布尔值,使用户student的家目录可通过http访问。
[root@centos68 ~]# semanage boolean -l | grep httphttpd_enable_homedirs (关 , 关) Allow httpd to read home directories[root@centos68 ~]# setsebool httpd_enable_homedirs 1[root@centos68 ~]# semanage boolean -l | grep httpd_enable_homedirshttpd_enable_homedirs (开 , 关) Allow httpd to read home directories更改配置文件:
<IfModulemod_userdir.c>
#UserDirdisabled
UserDirpublic_html
</IfModule>
<Directory/home/*/public_html>
AllowOverrideFileInfoAuthConfigLimit
OptionsMultiViewsIndexesSymLinksIfOwnerMatchIncludesNoExec
<LimitGETPOSTOPTIONS>
Orderallow,deny
Allowfromall
</Limit>
<LimitExceptGETPOSTOPTIONS>
Orderdeny,allow
Denyfromall
</LimitExcept>
</Directory>
按配置文件的格式来看,需要家目录中的文件名如下
[root@centos68 user1]# echo 43123123 > public_html