系统自动化安装的实现及SELINUX的设置

系统的自动化安装

    anaconda:系统安装程序

        tui:基于图形库curses的文本窗口

        gui:图形窗口

    装载根文件系统,并启动anaconda

        默认启动GUI接口,若要想使用TUI接口,可以向内核传递参数

        1.按tab键,在后面添加text

        2.按ESC键,boot:linux text

    blob.png

    

    anaconda工作过程:

    安装前配置阶段:

        安装过程中使用的语言

        键盘类型

        安装目标存储设备

            Basic Storage:本地磁盘

            特殊设备:ISCSI

        设定主机名

        配置网络接口

        时区

        管理员密码

        设定分区及MBR的安装位置

        创建一个普通用户

        选定要安装的程序包

  安装阶段

        在目标磁盘创建分区,执行格式化操作等

        将选定的程序包安装至目标位置

        安装bootloader和initramfs

    首次启动

        iptables,selinux,core dump设置

    启动安装过程一般应位于引导设备;后续的anaconda及其安装用到的程序包可能来源于下面几种方式:

        本地光盘

        本地硬盘

        ftp server:yum repository

        http server:yum repository

        nfs server

    如果想指定安装源: 

        boot:linux askmethod 可以让系统询问选择安装的媒介

        blob.png

    

    anaconda的配置方式:

        1.交互式配置方式

        2.通过读取事先给定的配置文件实现自动化安装

            kickstart文件

    

    安装boot引导选项:boot

        text:文本安装方式

        askmethod:手动指定使用的安装方法

        与网络相关的引导选项

            ip=address

            netmask=mask

            gateway=gw

            dns=address

            ifname=name:mac_addr

        远程访问功能相关的引导选项;

            vnc

            vncpasswd=‘password’

    blob.png

    指明kickstart文件位置:ks=

        DVD driver:ks=cdrom:/path/to/file

        Hard driver: ks=hd:device:/path/to/file

        Ftp server: ks=ftp://host:port/path/to/file

        Http server: ks=https://host:port/path/to/file

        Nfs server: ks=nfs:host:/path/to/file

    

    kickstart文件的格式:

        命令段:指明各种安装前配置,如语言,键盘等

        程序包段:指明要安装的程序包组或者程序包,不安装的程序包等

            %packages:以%packages字段开始

            @group_name:要安装的包组

            package:安装的程序包 

            -package:不安装的程序包

            %end:以%end字段结束

        脚本段:

            %pre:安装前脚本

                运行环境:运行于安装介质上的微型linux环境

            %post:安装后脚本

                运行环境:安装完成的系统


    命令段中的命令:

blob.png

        必备命令:

            autoconfig:认证方式配置

                autoconfig –useshadow –passalgo=sha512

                bootloader –location=mbr –driverorder=sda –append="crashkernel=auto rhgb quiet"

            keyboard:设定键盘类型

            lang:语言类型

            part:分区

            rootpw:指明root的密码

            timezone:时区

        可选命令:

            install or upgrade

            text:文本界面安装

            network,firewall,selinux,halt,poweroff,reboot,repo

            user:安装完成后为系统创建新用户

            url:指明安装源

            key-skip:跳过安装号码,适用于rhel版本

    

    创建kickstart文件的方式:

        1.直接手动编辑

            依据某个模板

        2.可使用创建工具:system-config-kickstart

            一句某模板修改并生成新配置

            http://172.18.19.1/centos6.cfg

        检查ks文件的语法错误

            ksvalidator /path/to/file

            blob.png

            blob.png

    配置完成后,保存文件

    启动后,指定ks配置文件路径即可:boot:linux ks=ftp://ip/path/to/file

  firstboot:-r 可以重新配置

    

制作引导光盘和U盘

    将光盘中的isolinux文件拷到一个制作光盘的目录下

    cp /mnt/cdrom/isolinux /tmp/myiso/

    编辑对应的isolinux.cfg文件

    vi /tmp/myiso/isolinux/isolinux.cfg

        initrd=initrd.img text ks=cdrom:/myks.cfg

    拷贝ks.cfg文件

    cp /root/ks.cfg /tmp/myiso/

    切换目录至myiso文件的父级目录

    cd /tmp

    制作iso文件

    mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V "centos 7 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso  myiso/                 

 

创建U盘启动

    dd if=/dev/sr0 of=/dev/sdb

    fdisk /dev/sdb –>t –>b 指定vfat

        mkfs.vfat /dev/sdb1

    mount /dev/sdb1 /mnt/usb

        mkdir -p /mnt/usb/boot/grub

    cp /misc/cd/images/pxeboot/vmlinuz

        /misc/cd/images/pxeboot/initrd /mnt/usb/boot

    vi /mnt/usb/boot/grub/grub.conf

        title linux

            root (hd0,0)

            kernel /boot/vmlinuz

            initrd /boot/initrd.img ks=http://ip/centos.cfg

    grub

        root (hd1,0)

        kernel /

        setup (hd1)


SELinux

    Secure Enhanced Linux,是美国国家安全局NSA和SCC开发的linux的一个强制访问控制的安全模块

    DAC:Discretionary Access Control 自由访问控制

    MAC:Mandatory Access Control 强制访问控制

        DAC环境下进程是无束缚的

        MAC环境下策略的规则决定控制的严格程度

        MAC环境下进程可以被限制的

        策略被用来定义被限制的进程能够使用哪些资源(文件,端口。。。)

        默认情况下,没有被明确允许的行为将被拒绝

    SELinux有四种工作类型:

        strict:centos5,每个进程都受到selinux的控制

        targeted:用来保护常见的网络服务,仅有限进程受到selinux控制,只监控容易被入侵的过程,rhel4只保护13个服务,rhel保护88个服务

        minimum:centos7,修改过的targeted,只对选择的网络服务

        mls:提供MLS(多级安全)

        minimum和mls稳定性不足,未加以利用

       blob.png

SELinux的安全上下文

    传统linux,一切皆文件,由用户,组,权限控制访问

    在selinux中,一切皆对象,由存放在Inode扩展属性域的安全元素所控制其访问 

    所有文件和端口资源和进程都具备安全标签,安全上下文(security context)

    安全上下文有五个元素:

        user:role:type:sensitivity:category

        user_u:object_r:tmp_t:s0:c0

        blob.png

    实际上下文:存放在文件系统中 ls -Z

    默认的安全上下文:存放在二进制的selinux策略库(映射目录和期望安全上下文)中

        semanage fcontext -l

SELinux五个安全元素        

    User:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于自由(unconfined)进程

    Role:定义文件 ,进程和用户的用途:文件:object_r,进程和用户:system_r

    Type:指定数据类型,规则中定义何种进程类型访问何种文件,target策略基于type'实现,多服务公用:public_content_r

    Sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified,secret,top。。。一个对象有且只有一个sensitivity,分0-15级,s0最低,target默认策略使用s0

    Category:对于特定组织划分不分层的分类,如FBI Secret,一个对象可以有多个category,c0-c1023,共1024个分类,target策略不使用category  


SElinux策略

    对象(object):所有可以读取的对象,包括文件,目录和进程,端口等

    主体(subject):进程称为主体

    SELinux中对所有文件都赋予一个type的文件类型标签,对于所有的进程也赋予各自的一个domain的标签,Domain标签能够执行的操作由安全策略里定义

    当一个subject试图访问一个object,Kernel中的策略执行服务器将检查AVC(访问矢量缓存Access Vector Cache),在AVC中,subject和object的权限被缓存(cache),查找“应用+文件”的安全环境,然后根据查询的结果允许或拒绝访问

    安全策略:定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一个对象是允许还是拒绝的,并且定义了哪种行为是允许还是拒绝的


SELinux的状态:(有一个禁用,就禁用)

       enforcing:强制,每个受限的进程都必然受限

       permissive:允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志

       disable:禁用

    /etc/selinux/config中设置了默认的启动级别

    blob.png

blob.png

    查看当前的selinux的状态,使用getenforce命令查看,0表示关闭,1表示开启,修改当前selinux状态,使用setenforce命令

    blob.png

    查看更详细的selinux状态可以使用sestatus命令进行查看

  blob.png

    

SELinux的标签

    blob.png


    查看selinux数据库中的所有规定的标签策略

        semanage fcontext -l

blob.png

    更改标签  

        restorecon -R /var/www/html 

            R:表示恢复目录标签

        chcon –reference file1 file2 

            

    参考file1的标签,修改file2文件的标签 

blob.png        

    添加与删除数据库中的策略

        semanage fcontext -a -t httpd_sys_content_t "/website(/.*)?"

        semanage fcontext -d -t httpd_sys_content_t "/website(/.*)?"

Tips:restorecon 只能恢复已经存在于selinux数据库中的策略,对于没有定义的文件,不能使用该命令进行恢复,而chcon可以对未在selinux数据库中定义的策略的文件进行恢复 

    

端口号的标签

    semanage port -l

    blob.png

            

    查看selinux特定某个端口   

  blob.png

 

   添加端口:semanage port -a -t http_port_t -p tcp 666  

  blob.png

  修改端口:此端口只能是已经存在于selinux端口策略中的端口,没有定义的只能使用-a选项添加  semanage port -m -t ssh_port_t -p tcp 666  

  blob.png

 删除端口:semanage port -d -t ssh_port_t -p tcp 666

  blob.png

 

  selinux的boolean值

    查看selinux中boolean值

    blob.png


    semanage boolean -l 

  blob.png   

    前一个off是state,表示现在的状态

    后一个off是default,表示写入文件中的默认状态


    setsebool -P boolean value 设置boolean值,并将配置写入文件

  

  SELinux日志管理

    yum install setroubleshoot*(重启生效)

    将错误信息写入到/var/log/message

    grep setroubleshoot /var/log/message

    查看安全事件日志说明:sealert -l uuid

    扫描并分析日志:sealert -a /var/log/audit/audit.log

    blob.png

    SElinux帮助

    yum install selinux-policy-devel(centos7)

    yum install selinux-policy-doc(centos6)

    mandb | makewhatis

    man -k _selinux

    

1、启用SELinux策略并安装httpd服务,改变网站的默认主目录为/website,添加SELinux文件标签规则,使网站可访问

blob.png

blob.png

blob.png

2、修改上述网站的http端口为9527,增加SELinux端口标签,使网站可访问

blob.png

blob.png

blob.png

blob.png

3、启用相关的SELinux布尔值,使上述网站的用户student的家目录可通过http访问

blob.png

blob.png

用户student创建的文件public_html要设置selinux策略,用户的家目录student默认权限700,而访问者是以apache用户的身份访问的,所以要设置下acl权限,使用户拥有访问student家目录的权限,这样才能进入家目录去访问public_html文件  setfacl -m  u:apache:x /home/student

blob.png

 blob.png   

 blob.png  





原创文章,作者:Stupid_L,如若转载,请注明出处:http://www.178linux.com/46869