系统自动化安装、selinux

系统自动化安装

系统启动流程:bootloader–>kernel(initramfs)–>rootfs–>anaconda–>/sbin/init

anaconda: 系统安装程序
    tui: 基于图形库curses的文本配置窗口
    gui:图形窗口

安装程序启动过程
 MBR:isolinux/boot.cat
 stage2: isolinux/isolinux.bin
    配置文件:isolinux/isolinux.cfg
      每个对应的菜单选项:
        加载内核:isolinuz/vmlinuz
        向内核传递参数:append initrd=initrd.img…
 装载根文件系统,并启动anaconda
        默认启动GUI接口
        若是显式指定使用TUI接口:向内核传递text参数即可
        (1)按tab键,在后面增加text
        (2)按ESC键:boot: linux text  

启动安装过程一般应位于引导设备;后续的anaconda及其安装用到的程序包等可来自下面几种方式:本地光盘、本地硬盘、U盘或网络(ftp server、http server、nfs server)
如果想手动指定安装源:按ESC键 ;boot: linux askmethod 或 boot: linux method

Anaconda安装系统分成三个阶段:
安装前配置阶段
    安装过程使用的语言
    键盘类型
    安装目标存储设备
        Basic Storage:本地磁盘
        特殊设备:iSCSI
    设定主机名
    配置网络接口
    时区
    管理员密码
    设定分区方式及MBR的安装位置
    创建一个普通用户
    选定要安装的程序包
安装阶段
    在目标磁盘创建分区,执行格式化操作等
    将选定的程序包安装至目标位置
    安装bootloader和initramfs
首次启动
    iptables
    selinux
    core dump

anaconda的配置方式:
    (1) 交互式配置方式
    (2) 通过读取事先给定的配置文件自动完成配置;按特定语法给出的配置选项;kickstart文件

安装boot引导选项:
    boot:
     text: 文本安装方式
     method或askmethod: 手动指定使用的安装方法
     与网络相关的引导选项:
          ip=IPADDR
          netmask=MASK
          gateway=GW
          dns=DNS_SERVER_IP
          ifname=NAME:MAC_ADDR
     与远程访问功能相关的引导选项:
          vnc
          vncpassword='PASSWORD'
      启动紧急救援模式
            rescue
      装载额外驱动
            dd
www.redhat.com/docs,《indtallation guide》 获取安装说明信息

指明kickstart文件的位置:
ks=
    DVD drive: ks=cdrom:/PATH/TO/KICKSTART_FILE
    Hard drive: ks=hd:device:/directory/KICKSTART_FILE
    HTTP server: ks=http://host:port/path/to/KICKSTART_FILE
    FTP server: ks=ftp://host:port/path/to/KICKSTART_FILE
    HTTPS server: ks=https://host:port/path/to/KICKSTART_FILE
    NFS server:ks=nfs:host:/path/to/KICKSTART_FILE

kickstart文件的格式
命令段:指明各种安装前配置,如键盘类型等;
程序包段:指明要安装的程序包组或程序包,不安装的程序包等;
    %packages  程序包段起始位置
    @group_name  安装一个包组
    package  安装某个程序包
    -package  D不安装某个程序包(当指定为不安装的程序包,若被其他程序依赖也将会被安装)
    %end  程序包段结束位置
脚本段:
    %pre: 安装前脚本
        运行环境:运行于安装介质上的微型Linux环境
    %post: 安装后脚本
        运行环境:安装完成的系统;

命令段中的命令:
    authconfig: 认证方式配置
        authconfig–useshadow–passalgo=sha512
    bootloader:bootloader的安装位置及相关配置
        bootloader –location=mbr –driveorder=sda#
            append="crashkernel=auto rhgb quiet"
    keyboard: 设定键盘类型
    lang: 语言类型
        lang zh_CN.UTF8
    part: 创建分区
        part /boot –fstype=ext4 –size=500
        part pv.008002 –size=51200
    rootpw: 指明root的密码
        openssl passwd -1 -salt `openssl rand -hex 4` 使用md5加密方式生成加密密码
        rootpw –iscrypted
    timezone: 时区
        timezone Asia/Shanghai

补充:分区相关的其他指令
    clearpart:清除分区
        clear –none –diver=sda:清空磁盘分区
    volgroup:创建卷组
        volgroup myvg –presize=4096 pv.008002
    logvol:创建逻辑卷
        logvol /home –fstype –name=lv_home –vgname=myvg –size=5120

可选命令
    install OR upgrade:安装或升级
    text: 文本安装界面,默认为图形安装界面
    network:配置网络接口
        network –onboot yes –device eth0 –bootproto –noipv6
    firewall:防火墙
        firewall –disable
    selinux:SElinux
        selinux –disable
    halt|poweroff|reboot:安装完成之后的行为
    repo:指明安装时使用的repository
    user:安装完成后为系统创建新用户
    url: 指明安装源
        url –url="http://mirrors.aliyun.com/centos/6.8/os/x86_64/"
    key –skip:跳过安装号码,适用于rhel版本

系统安装完成之后
    禁用防火墙
        CentOS 6:
            service iptables stop
            chkconfig iptables off
        CentOS 7:
            systemctl stop iptables
    禁用SElinux
        永久有效
            修改/etc/sysconfig/selinux或/etc/selinux/config
            selinux=permissive或disabled
         立即生效
            setenforce 0
        查看状态
            getenforce

创建kickstart文件的方式:
(1) 直接手动编辑;
    依据某模板修改
(2) 可使用创建工具:system-config-kickstart
    依据某模板修改并生成新配置;
        http服务器:mirrors.aliyun.com
        http目录:/centos/6.8/os/x86_64/
   检查ks文件的语法错误:ksvalidator

创建引导光盘:
cp /media/cdrom/isolinux/ /tmp/myiso/
vi /tmp/myiso/isolinux/isolinux.cfg
initrd=initrd.imgtext ks=cdrom:/myks.cfg
cp /root/myks.cfg /tmp/myiso/
cd /tmp
mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V "CentOS 6.6 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.isomyiso/
 
创建U盘启动盘
    dd if=/dev/sr0 of=/dev/sdb
1 fdisk/dev/sdb–t -b 指定vfat
    mkfs.vfat/dev/sdb1
2 mount /dev/sdb1 /mnt/usb
    mkidr-p /mnt/usb/boot/grub
   cp/misc/cd/images/pxeboot/vmlinuz/misc/cd/images/pxeboot/initrd/mnt/usb/boot
3 vi /mnt/usb/boot/grub/grub.conf
    title wanglinux
    root (hd0,0)
    kernel /boot/vmlinuz
    initrd/boot/initrd.imgks=http://172.16.0.1/centos6.x86_64.cfg
4 #grub
    >root (hd1,0)
    >kernel /
    >setup ( hd1)
SELinux

SELinux介绍
SELinux: Secure Enhanced Linux,是美国国家安全局「NSA=The National Security Agency」和SCC(Secure Computing Corporation)开发的Linux的一个强制访问控制的安全模块。2000年以GNU GPL发布,Linux内核2.6版本后集成在内核中

DAC:Discretionary Access Control自由访问控制
MAC:Mandatory Access Control 强制访问控制
    DAC环境下进程是无束缚的
    MAC环境下策略的规则决定控制的严格程度
    MAC环境下进程可以被限制的
    策略被用来定义被限制的进程能够使用那些资源(文件和端口)
    默认情况下,没有被明确允许的行为将被拒绝

SELinux有四种工作类型:
 strict: centos5,每个进程都受到selinux的控制
 targeted: 用来保护常见的网络服务,仅有限进程受到selinux控制,只监控容易被入侵的进程,rhel4只保护13个服务,rhel5保护88个服务
 minimum:centos7,修改过的targeted,只对选择的网络服务
 mls:提供MLS(多级安全)机制的安全性
 minimum和mls稳定性不足,未加以应用

SELinux安全上下文
 传统Linux,一切皆文件,由用户,组,权限控制访问
 在SELinux中,一切皆对象,由存放在Inode的扩展属性域的安全元素所控制其访问。
 所有文件和端口资源和进程都具备安全标签:安全上下文”(security context)
 安全上下文有五个元素组成:
     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:对于特定组织划分不分层的分类,如FBI Secret,NSA secret, 一个对象可以有多个categroy,c0-c1023共1024个分类,Target 策略不使用cateaory

SELinux策略
 对象(object):所有可以读取的对象,包括文件、目录和进程,端口等,
 主体:进程称为主体(subject)
 SELinux中对所有的文件都赋予一个type的文件类型标签,对于所有的进程也赋予各自的一个domain的标签。Domain标签能够执行的操作由安全策略里定义。
 当一个subject试图访问一个object,Kernel中的策略执行服务器将检查AVC (访问矢量缓存Access Vector Cache), 在AVC中,subject和object的权限被缓存(cached),查找“应用+文件”的安全环境。然后根据查询结果允许或拒绝访问
 安全策略:定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一个对象是允许还是拒绝的,并且定义了哪种行为是充许或拒绝

配置SELinux:
    SELinux是否启用
    给文件重新打安全标签
    给端口设置安全标签
    设定某些操作的布尔型开关
    SELinux的日志管理
SELinux的状态:
    enforcing: 强制,每个受限的进程都必然受限
    permissive: 允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志
    disabled: 禁用

相关命令:
    getenforce: 获取selinux当前状态
    sestatus:查看selinux状态
    setenforce 0|1
        0: 设置为permissive
        1: 设置为enforcing
    注:setenforce 临时生效,若要永久生效修改器配置文件
配置文件:
/boot/grub/grub.conf  使用selinux=0禁用SELinux
/etc/sysconfig/selinux  /etc/selinux/config
    SELINUX={disabled|enforcing|permissive}
        enforcing或permissive切换至disabled需要重启,
        isabled切换至enforcing或permissive需要重启,
        enforcing与permissive之间切换不需要重启。

给文件重新打安全标签:
    chcon [OPTION]… [-u USER] [-r ROLE] [-t TYPE] FILE…
    chcon [OPTION]… –reference=RFILE FILE…  以模版文件设置安全标签
        -R:递归打标;
恢复目录或文件默认的安全上下文:
    restorecon [-R] /path/to/somewhere

默认安全上下文查询与修改,semanage来自policycoreutils-python包
    查看默认的安全上下文
        semanage fcontext -l
    添加安全上下文
        semanage fcontext -a -t httpd_sys_content_t ‘/testdir(/.*)?’
        restorecon -Rv /testdir
    删除安全上下文
        semanage fcontext -d –t httpd_sys_content_t ‘/testdir(/.*)?’
    查看端口标签
        semanage port –l
    添加端口
        semanage port -a -t port_label-p tcp|udp PORT
        semanage port -a -t http_port_t -p tcp 9527
    删除端口
        semanage port -d -t port_label-p tcp|udp PORT
        semanage port -d -t http_port_t -p tcp 9527
    修改
        semanage port -m -t port_label-p tcp|udp PORT
        semanage port -m -t http_port_t -p tcp 9527

SELinux布尔值
布尔型规则:
    getsebool
    setsebool
查看bool命令:
    getsebool [-a] [boolean]
    semanageboolean –l
    semanageboolean -l –C 查看修改过的布尔值
设置bool值命令:
    setsebool [-P] booleanvalue
    setsebool [-P] Boolean=value
        -P:永久有效,默认仅临时有效
SELinux日志管理 yum install setroublesshoot*(重启生效)
将错误的信息写入/var/log/message
   grep setroubleshoot/var/log/messages
   sealert-l UUID
查看安全事件日志说明
 sealert-a /var/log/audit/audit.log
扫描并分析日志
   [root@serverX ~]# yum -y install selinux-policy-devel
SELinux帮助
   [root@serverX ~]# mandb
   [root@serverX ~]# man -k _selinux

练习
 1、安装httpd服务,改变网站的默认主目录为/website,添加SELinux文件标签规则,设置http_sys_content_t到/website及目录下所有文件,使网站可访问
 2、修改网站端口为9527,增加SELinux端口标签,使网站可访问
 3、启用SELinux布尔值,使用户student的家目录可通过http访问

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

(0)
anonymousanonymous
上一篇 2016-09-22
下一篇 2016-09-22

相关推荐

  • 网络概念简述和Linux网络管理命令

    网络概念简述和Linux网络管理命令 1. 网络分类 我们通常接触到的网络通常是广域网、局域网 局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。 广域网(Wide Area Network,WAN):网络跨越国界、洲界,甚至全球范围。  因特网(Internet)是世界范围内最大的广域网。 2. …

    Linux干货 2016-04-19
  • shell基础if与case

    1.read   使用read来把输入值分配给一个或多个shell变量;   -p 指定要显示的提示;例如 read -p "SHURU" num   -t TIMEOUT   read 从标准输入中读取值,给每个单词分配一个变量,所有剩余单词都被分配给最后一个变量 2.流程控制   过程…

    Linux干货 2016-08-18
  • fstab配置文件、swap分区,文件关联

    fstab配置文件、swap分区,文件关联,lvm 挂载点和/etc/fstab  配置文件系统体系  被mount、 fsck和其它程序使用  系统重启时保留文件系统体系  可以在设备栏使用文件系统卷标  使用mount -a 命令挂载/etc/fstab中的所有文件…

    Linux干货 2016-09-01
  • 第一周:Linux基础之常用命令(二)

    一、Linux的命令使用格式 命令的语法通用格式: ~]# COMMAND  OPTIONS  ARGUMENTS   命令  选项  参数 1.  COMMAND,命令:发起命令时将请求内核将某个二进制程序运行为一个进程,命令本身是一个可执行的程序文件,二进制格式的文件有可能会调用共享库文件。 多…

    Linux干货 2016-09-18
  • shell编程的常见实例

    1. 写一个脚本/root/bin/argsnum.sh 用户输入一个文件路径并查找文件中空白行的个数 ,如果用户没有输入路径则自动退出  实验结果如下: 如果不输入任何路径程序会自动退出:实验结果如下: 用其他方法验证是不是有两行空行: (个人总结): 1.   read 命令,如果用 -p 来做提示信息,则不支持\n换行,这…

    Linux干货 2016-08-12
  • linux基础入门之二

    linux基础入门之二 1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 1.cp文件复制: 常用选项: -i:交互式复制,即覆盖之前提醒用户确认; -f:强制覆盖目标文件; -r, -R:递归复制目录; -d:复制符号链接文件本身,而非其指向的源文件; -a:-dR –…

    Linux干货 2016-09-26