Linux 第47,48天 systemd,selinux,cent7启动流程

Linux 第47,48天 systemd,selinux,cent7启动流程

时间: 20180907

时间: 20180908


目录

systemd

特性,核心概念,配置文件,选项,命令,服务状态,service unit文件格式

CentOS7 启动流程

修改内核参数切换至指定的开机模式

CentOS7修改root密码

CentOS7删除boot目录恢复

SELinux (Secure Enhanced Linux)

DAC,MAC,SELinux工作类型,SELinux安全上下文SContext,五个安全元素含义

SELinux策略,设置SELinux,配置SELinux命令和配置文件,修改SELinux安全标签

默认安全上下文查询与修改semanage fcontext --help,

SELinux端口标签semanage port --help,SELinux布尔值,SELinux日志管理

SELInux帮助


systemd

系统启动和服务守护进程管理器,负责在系统启动或运行时,激活系统资源,服务进程等

特性

系统引导时实现服务并行启动

按需启动守护进程

自动解决服务依赖关系管理

同时采用socket式与D-Bus总线式激活服务

系统状态快照


核心概念

unit 表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包

含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息

可用systemctl -t help来查看所支持的unit类型


配置文件

/usr/lib/systemd/system 每个服务最主要的启动脚本设置

/run/systemd/system 系统执行过程中所产生的服务脚本

/etc/systemd/system 管理员建立的执行脚本,此目录脚本优先级最高

选项

--failed 列出所有启动失败的unit

--type 指定unit类型


命令

start 启动服务

stop 停止正在运行的服务

restart 重启服务

reload 为某服务重载配置文件

status 查看服务状态

daemon-reload 重载systemd服务的配置文件

mask 禁止再启动某服务(防止误操作)

unmask 解除禁止启动某服务

is-active 查看某服务是否启动

list-units [ --type|-t service -a|--all ] 查看激活的unit状态

is-enabled 查看某服务是否开机启动

enable 使服务开机启动

disable 取消服务开机启动

list-unit-files [ --type|-t service -a|--all ]查看所有unit状态

list-dependencies 查看某个unit的依赖关系,如不加参数则显示default.target

的依赖关系

isolate 切换至某个unit,实时的切换某个target

rescue 进入紧急救援模式(此模式比emergency更强大一些,使用的是独立内核)

emergency 进入紧急模式


服务状态

loaded 配置文件已加载

active(running) 一次或多次持续处理的运行

active(exited) 成功完成一次性的配置

active(waiting) 运行中,等待一个事件

inactive 未运行

enabled 开机启动

disabled 未开机启动

static 开机不启动,但可被另一个启用的服务激活


service unit文件格式

[Unit] 定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及

依赖关系等

常用选项:

Description=描述信息

After=定义unit的启动次序,表示当前unit应晚于哪些unit启动,其功能与

before相反 

Before= 与after相对

Requires= 依赖到的其它units,强依赖,被依赖的units无法激活时,当前

unit也无法激活

Wants= 依赖到的其它units,弱依赖

Conflicts 定义units间的冲突关系


[Service] 与特定类型相关的专用选项;此处为service类型

常用选项:

Type= 定义影响ExecStart及相关参数的功能的unit进程启动类型

simple 默认值,这个daemon主要由ExecStart接的指令串来启动,启动后

常驻于内存中

forking 由ExecStart启动的程序透过spawns延伸出其它子进程来作此

daemon的主要服务。原生父程序在启动结束后就会终止

oneshot 与simple类似,不过这个程序在工作完毕后就结束了,不会常驻

在内存中

dbus 与simple类似,但这个daemon必须要在取得一个D-Bus的名称后才

会继续运作. 因此通常也要同时设定BusName=才可以

notify 在启动完成后会发送一个通知消息。还需要本领NotifyAccess来

让Systemd接收消息

idle 与simple类似,要执行这个daemon必须要所有的工作都顺利执行

完毕后才会执行。这类的daemon通常是开机到最后才可执行的服务

EnvironmentFile= 指定环境配置文件路径

ExecStart= 指明启动unit要运行的命令或脚本的绝对路径

ExecStartPre= ExecStart前运行的命令

ExecStartPost= ExecsStart后运行的命令

ExecReload= restart时执行的命令

ExecStop= 指明停止unit要运行的命令或脚本

Restart= 当设定Restart=1时,则当次daemon服务意外终止后,会再次自动

启动此次服务


[Install]定义由systemctl enable以及systemctl disable命令在实现服务启用

或禁用时用到的一些选项

Alias= 别名,可使用systemctl command Alias.service

RequiredBy= 被哪些units所依赖,强依赖

WantedBy= 被哪些units所依赖,强依赖

Also= 安装本服务的时候还要安装别的相关服务


CentOS7 启动流程

UEFI或BIOS初始化,运行POST开机自检

选择启动设备

bootloader grub2  stage1 1.5 2  /boot/grub2/grub.cfg

Load kernel, initramfs(驱动模块)

切根chroot

初始化开启第一进程systemd

执行initrd.target所有单元,包括挂载/etc/fstab

可以使用systemd-analysis 生成一个html文档使用浏览器打开可以查看详细的启动过程


修改内核参数切换至指定的开机模式

linux16 在其最后加上systemd.unit=multi-user.target


CentOS7修改root密码

方式1. 开机启动修改linux16一行最后添加rd.break Ctrl+x然后进去修改密码

切根修改密码(注意查看根分区挂载的状态,需要重新挂载为rw)

方式2. 开机启动修改linux16一行最后添加rw init=/sysroot/bin/sh 

Ctrl+x进去修改密码,切根修改密码


CentOS7删除boot目录恢复

1.插入光盘进入救援模式

2.挂载光盘安装kernel包即会生成vmlinux和initramfs和救援模式的kernel

3.安装grub2 使用命令grub2-install 来生成grub2文件夹

grub2-install 安装建议切根不然需要添加的参数有点多,不会的建议切根再

执行grub2-install可以省去添加参数只需要后边跟上设备即可/dev/sda

4.安装grub2配置文件

grub2-mkconfig 执行此命令既会生成grub.cfg配置文件

5.重启系统即可恢复




SELinux (Secure Enhanced Linux)

DAC: Discretionary Access Control

MAC: Mandatory Access Control

DAC环境下进程是无束缚的

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

MAC环境下进程可以被限制

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

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


SELinux工作类型

strict 仅Centos5上有,每个进程都受到selinux的控制

targeted 用来保护常见的网络服务,仅有限进程受到selinux控制,只监控容易

被***的进程

minimum CentOS7,修改的targeted,只对选择的网络

mls 提供MLS多级安全机制的安全性

targeted为默认类型,minimum和mls稳定性不足,未加以应用,strict已不再使用


SELinux安全上下文SContext

传统Linux,一切皆文件,由用户,组,权限控制访问。在SELinux中,一切皆对象

(object),由存放在inode的扩展属性域的安全元素所控制其访问

所有文件和端口资源和进程都具备安全标签:安全上下文(Security Context)

安全上下文有五个元素组成 user:role:type:sensitivity:category

user_u:object_r:tmp_t:s0:c0

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

期望(默认)上下文:存放在二进制的SELinux策略库中,可使用如下命令查看

semanage fcontect -l 此为文件的策略


上述五个安全元素含义

user 指示登录系统的用户类型,多数本地进程都属于自由(unconfined)进程

role 定义文件,进程和用户的用途

type 指定数据类型,规则中定义何种进程类型访问何种文件target策略基于type

袖,多服务共用public_content_t

sensitivity 限制访问的需要,由组织定义的分层安全级别如unclassified,

secret,top secret,一个对象有且只有一个sensitivity分0-15组,s0

最低,target策略默认使用s0

category 对于特定组织划分不分层的分类,如FBI Secret,NSA secret,一个对象

可以有多个category,c0-c1023共1024个分类,target策略不使用category


SELinux策略

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

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

SELinux中对所有的文件都赋予一个type的文件类型标签,对于所有的进程也赋予

各自的一个domain的标签。domain标签能够执行的操作由安全策略里定义

当一个subject试图访问一个object,kernel中的策略执行服务器将检查AVC(访问

矢量缓存Access Vector Cache),在AVC中,subject和object的权限被缓存,查找

"应用+文件"的安全环境。然后根据查询结果允许或拒绝访问


安全策略: 定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个

方法读取哪一个对象是允许还是拒绝的,并且定义了哪种行为是允许或拒绝


设置SELinux

配置SELinux

SELinux是否启用

给文件重新打安全标签

给端口设置安全标签

设定某些操作的布尔型开关

SELinux的日志管理

SELinux状态

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

permissive 允许,每个受限的进程违规操作不会被禁止,

但会被记录于审计日志中

disabled 禁用


配置SELinux命令和配置文件

相关命令

getenforce 获取selinux当前状态

sestatus 查看selinux状态

setenforce 0|1

0 设置为permissive

1 设置为enforcing

配置文件

/boot/grub/grub.conf

使用selinux=0禁用selinux

/etc/selinux/config 启用或禁用selinxu的配置文件

/etc/sysconfig/selinux 此为上述文件的软链接


修改SELinux安全标签

给文件重新打安全标签

chcon [option]... [-u USER] [-r ROLE] [-t TYPE] file...

chcon [option]... --reference=RFILE file...

-R 递归打标签

恢复目录或文件默认的安全上下文件(原理是读取selinux策略库来还原)

restorecon [-R] /path/...


默认安全上下文查询与修改semanage fcontext --help

semanage命令,来自policycoreutils-python包

查看默认的安全上下文

semanage fcontext -l

添加安全上下文

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

restorecon -Rv /testdir

修改安全上下文

semanage fcontext -m -t admin_home_t "/testdir(/.*)?"

删除安全上下文

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


SELinux端口标签semanage port --help

查看端口标签

semanage port -l

添加端口

semanage port -a -t TYPE -p tcp|udp PORT

semanage port -a -t http_port_t -p 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]

semanage boolean –l

semanage boolean -l –C 查看修改过的布尔值

设置bool值命令:

setsebool [-P] boolean value(on,off)

setsebool [-P] Boolean=value(0,1)


SELinux日志管理

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

yum install setroubleshoot

查看安全事件日志说明

grep setroubleshoot /var/log/messages

sealert -l UUID

扫描并分析日志

sealert -a /var/log/audit/audit.log


SELinux帮助

帮助文档安装

yum –y install selinux-policy-devel ( centos7.2)

yum –y install selinux-policy-doc

更新man数据库查询selinux帮助

mandb | makewhatis

man -k _selinux


猜你喜欢

转载自blog.51cto.com/winthcloud/2173648