系统安全命令

时间:2022-03-03 17:26:35
IP包过滤器管理—— iptables

iptables命令语法:

iptables [-t table] 命令参数 [对应参数]

实例1:查看nat表的规则设置。执行以下命令:

[root@Localhost ~]# iptables -t nat -L

实例2:查看默认表filter当前的规则设置。执行以下命令:

[root@Localhost ~]# iptables -L

执行命令后将显示该表所有规则链中的规则。

实例3:查看filter表当前的规则设置,并用数字形式显示IP地址和端口号(用“-n”参数表示)。执行以下命令:

[root@Localhost ~]# iptables -L -n

执行命令后将显示filter表所有规则链表中的规则。

可以看出与上一个例子不同的是,规则中涉及到的IP地址和端口号是用数字形式表示的(如IP地址0.0.0.0/0代替“anywhere”,端口号53表示“mdns”)。

实例4:查看filterFORWARD链的规则设置。执行以下命令:

[root@Localhost ~]# iptables -L FORWARD

此时,将仅显示INPUT链的规则。

实例5:清除nat表中所有规则链中的规则。执行以下命令:

[root@Localhost ~]# iptables -t nat -F

执行该命令后将删除其所有规则链中的规则。通过执行以下命令规则链中的规则:

[root@Localhost ~]# iptables -t nat -L

实例6:添加规则到规则链表,允许源地址为192.168.1.1/24的主机通过22tcp)端口。执行命令:

[root@Localhost ~]# iptables -A INPUT -p tcp -s 192.168.1.1/24 --dport 22 -j ACCEPT

执行该命令后,可以看到规则已加入,通过执行以下命令查看:

[root@Localhost ~]# iptables -L

保存 IP表—— iptables-save

iptables-save命令语法:

iptables-save [参数] [-t table]

实例1:显示默表 nat IP表的内容。执行命令:

[root@Localhost ~]# iptables-save

实例2:显示IP表的内容,并显示所有包和字节计数器的当前值(利用“-c”选项实现)。执行命令:

[root@Localhost ~]# iptables-save -c

执行命令后,将显示nat表和filter表的信息。

实例3:保存nat表的内容到文件natLog.txt中。执行命令:

[root@Localhost ~]# iptables-save -t nat > natLog.txt

此时natLog.txt中已经保存了nat表的内容,然后执行命令查看:

[root@Localhost ~]# cat natLog.txt

恢复 IP表—— iptables-restore

iptables-restore命令语法:

iptables-restore [参数]

实例:从文件natLog.txt中恢复nat表。执行命令:

[root@Localhost ~]# iptables-restore < natLog.txt

此处使用重定向,从文件natLog中输入。

执行以下命令可以查看到nat表:

[root@Localhost ~]# iptables-save -t nat

设置 SELinux模式—— setenforce

setenforce命令语法:

setenforce [ Enforcing | Permissive | 1 | 0 ]]

实例1:将SELinux设置为允许模式。执行命令:

[root@localhost local]# setenforce Permissive

然后执行命令查看设置后的SELinux模式:

[root@localhost local]# getenforce

实例2:将SELinux设置为强制模式。执行命令:

[root@localhost local]# setenforce Enforcing

然后执行命令查看设置后的SELinux模式:

[root@localhost local]# getenforce

另外,如果SELinux当前被disabled(禁用),则setenforce命令无效。

查看 SELinux模式—— getenforce

getenforce命令语法:

getenforce

实例:使用getenforce命令查看SELinux当前模式。执行命令:

[root@localhost local]# getenforce

设置 SELinux布尔值—— setsebool

setsebool命令语法:

setsebool [ 参数] boolean value | bool1=val1 bool2=val2 ...

实例1:设置布尔变量ftpd_disable_trans(该变量为系统所提供)为激活状态。执行命令:

[root@Localhost ~]# setsebool ftpd_disable_trans true

然后执行命令查看SELinux布尔值:

[root@Localhost ~]# getsebool ftpd_disable_trans

实例2:连续设置两个布尔变量值。

设置布尔变量telnetd_disable_trans的状态为onhttpd_enable_homedirs的状态为on。执行命令:

[root@Localhost ~]# setsebool telnetd_disable_trans=1 httpd_disable_trans=1

然后分别执行“getsebool”命令查看结果:

[root@Localhost ~]# getsebool telnetd_disable_trans

[root@Localhost ~]# getsebool httpd_disable_trans

查看 SELinux布尔值—— getsebool

getsebool命令语法:

getsebool [参数] [boolean]

实例1:利用getsebool命令显示所有的SELinux布尔变量。执行命令:

[root@localhost local]# getsebool -a

执行命令后,会显示所有的SELinux布尔变量,这里只截取一部分SELinux布尔变量显示。

实例2:显示SELinux布尔变量tcpd_disable_trans的值。执行命令:

[root@Localhost ~]# getsebool tcpd_disable_trans

执行命令后,将会显示tcpd_disable_trans的值为off

然后可以通过执行以下命令来改变tcpd_disable_trans的值为on

[root@Localhost ~]# setsebool tcpd_disable_trans on

最后执行命令查看改变后的值:

[root@Localhost ~]# getsebool tcpd_disable_trans

可以看到tcpd_disable_trans的值已变为on

翻转 SELinux布尔值—— togglesebool

togglesebool命令语法:

togglesebool boolean...

实例1:利用该命令将ftpd_disable_trans的值翻转。

首先查看当前布尔变量ftpd_disable_trans的值,执行命令:

[root@localhost local]# getsebool ftpd_disable_trans

执行命令后,可以看到ftpd_disable_trans的状态为on

然后执行以下命令进行翻转值:

[root@localhost local]# togglesebool ftpd_disable_trans

执行该命令后,ftpd_disable_trans的状态即可变为off。执行以下命令查看:

[root@localhost local]# getsebool ftpd_disable_trans

执行命令后,可以看到ftpd_disable_trans的状态为off

使用该命令除了可以使同一布尔变量的值翻转外,也可以通过该变量来翻转不同变量之间的值,看接下来的例题。

实例2:将httpd_enable_homedirs的值和telnetd_disable_trans的值翻转。

首先使用命令查看当前这两个变量的值:

[root@localhost local]# getsebool httpd_enable_homedirs

[root@localhost local]# getsebool telnetd_disable_trans

执行命令后,可以看到httpd_enable_homedirs的值为ontelnetd_disable_trans的值为off。然后执行以下命令进行翻转:

[root@localhost local]# togglesebool httpd_enable_homedirs telnetd_disable_trans

执行该命令后,这两个变量的值即可发生更换(即httpd_enable_homedirs的值为offtelnetd_disable_trans的值为on),再执行以下命令查看结果:

[root@localhost local]# getsebool httpd_enable_homedirs

[root@localhost local]# getsebool telnetd_disable_trans

SELinux状态工具—— sestatus

sestatus命令语法:

sestatus [参数]

实例1:利用该命令显示SELinux状态。执行命令:

[root@localhost local]# sestatus

执行命令后,将会显示SELinux状态信息:

实例2:显示SELinux状态,并显示布尔值。执行命令:

[root@localhost local]# sestatus -b

实例3:显示SELinux状态,并显示/etc/ sestatus.conf中文件和进程列表的语境。执行命令:

[root@localhost local]# sestatus -v

显示 AVC统计信息—— avcstat

avcstat命令语法:

avcstat [参数]

实例1:利用该命令显示AVC统计信息。执行命令:

[root@localhost local]# avcstat

根据参数提示,还可以设置以循环的方式显示AVC统计信息,看下面的实例。

实例2:循环显示AVC统计信息,5秒更新一次。执行命令:

[root@localhost local]# avcstats 5

执行该命令后将会不断更新AVC统计信息(5秒为一个周期),直到中断其运行为止。

转换审计消息—— audit2why

audit2why命令语法:

audit2why [参数]

实例:将系统日志中的SELinux出错信息解码显示。执行命令:

[root@localhost local]# grep avc: /var/log/messages|audi t2why

生成策略允许规则—— audit2allow

audit2allow命令语法:

audit2allow [选项]

实例1:从消息日志中生成非模块的策略。执行命令:

[root@localhost local]# cat /var/log/messages | audit2allow > localMessage.txt

然后输入以下命令查看所生成的策略:

[root@localhost local]# cat localMessage.txt

实例2:从消息日志中生成并构造模块策略。执行命令:

[root@localhost local]# cat /var/log/messages | audit2allow > -M local

装载策略—— load_policy

load_policy命令语法:

load_policy [参数]

实例:将策略装载到内核中,需执行以下步骤。

首先查看当前布尔变量nfsd_disable_trans的值,执行命令:

[root@localhost local]# getsebool nfsd_disable_trans

可以看到该布尔变量的当前值状态为off,然后,将NetworkManager_disable_trans的值翻转执行命令:

[root@localhost local]# togglesebool nfsd_disable_trans

最后使用load_policy装载策略:

[root@localhost local]# load_policy

装载策略后,通过以下命令可以查看到该布尔变量的当前状态值:

[root@localhost local]# getsebool nfsd_disable_trans

执行命令后,可以看到该布尔变量的当前状态值被保留。

SELinux策略管理—— semanage

semanage命令语法:

semanage login -{a|d|m} [参数] logi n_name

semanage user -{a|d|m} [参数] selin ux_name

semanage port -{a|d|m} [参数] [-p protoc ol] port | port_range

semanage interface -{a|d|m} [参数] int erface_spec

semanage fcontext -{a|d|m} [参数] file_spec

semanage translation -{a|d|m} [参数] level

实例1:允许用户manager(已存在的用户)作为sysetm_u登录。

首先执行以下命令:

[root@Localhost ~]# semanage login –l

然后执行命令允许用户manager作为sysetm_u登录:

[root@Localhost ~]# semanage login -a -s system_u manager

最后执行命令:

[root@Localhost ~]# semanage login -l

实例2:查看SELinux的用户映射关系。执行命令:

[root@Localhost ~]# semanage user -l

管理策略模块—— semodule

semodule命令语法:

semodule [参数]... MODE [MODES]...

实例1:安装模块包local.pp。执行命令:

[root@Localhost ~]# semodule -i local.pp

然后执行命令查看情况:

[root@Localhost ~]# semodule -l

执行该命令后,可以看到该模块已被装入。

实例2:显示已安装的SELinux模块列表。执行命令:

[root@Localhost ~]# semodule -l

实例3:删除模块包local。执行命令:

[root@Localhost ~]# semodule -i local

然后执行命令查看情况:

[root@Localhost ~]# semodule -l

执行命令后,可以看到该模块已不存在。

创建策略模块包—— semodule_package

semodule_package命令语法:

semodule_package -o <output file> -m <module> [-f <file contexts>]

实例1:由策略模块local.mod创建策略包local.pp。执行命令:

[root@Localhost ~]# semodule_package -o local.pp -m local.mod

创建成功后,即可执行以下命令将生成的策略包装入内核:

[root@Localhost ~]# semodule -i local.pp

[root@Localhost ~]# semodule -l

实例2:创建一个基准模块baseMod.mod的策略包baseMod.pp,文件的语境文件为file_contexts,执行以下命令即可。

[root@Localhost ~]# semodule_package -o baseMod.pp -m baseMod.mod -f file_contexts

其中,“-o baseMod.pp”表示生成的策略包文件为baseMod.pp,“-m baseMod.mod”表示要包括的策略模块baseMod.mod,“-f file_context”表示模块的文件语境文件。

编译策略模块—— checkmodule

checkmodule命令语法:

checkmodule [参数] [input_file]

实例:由文件localMessage.txt编译生成策略模块。执行命令:

[root@Localhost ~]# checkmodule -m -o local.mod localMes sage.txt

改变语境类别—— chcat

chcat命令语法:

chcat [参数][+|-] [[+|-]CATEGOR Y],...]FILE...

chcat [参数] [[+|-]CATEGORY],...] USER...

实例1:显示可用类别。执行命令:

[root@Localhost ~]# chcat -L

实例2:显示manager用户的类别。执行命令:

[root@Localhost ~]# chcat -Ll manager

修复文件安全语境—— fixfiles

fixfiles命令语法:

fixfiles [参数] { check | restor e|[-F]relabel | verify }

实例:对文件系统重新标签。执行命令:

[root@Localhost ~]# fixfiles relabel

执行命令后,建议重启系统。

恢复文件安全语境—— restorecon

restorecon命令语法:

restorecon [参数] 文件名...

实例1:恢复文件file2原来的文件标签。

首先查看file2文件的文件标签。执行命令:

[root@Localhost ~]# ls -Z file2

然后执行以下命令改变file2的文件类型为“etc_t”:

[root@Localhost ~]# chcon -t etc_t file2

执行以下命令查看该文件的文件类型相关情况:

[root@Localhost ~]# ls -Z file2

执行命令后可以看到文件类型已经改变:

最后执行以下命令来实现file2的文件类型的恢复:

[root@Localhost ~]# restorecon file2

[root@Localhost ~]# ls -Z file2

执行命令后,可以看到文件file2的文件类型已恢复为原来的“user_home_t”。

实例2:显示文件file2文件标签的改变。

首先查看file2文件标签执行命令:

[root@Localhost ~]# ls -Z file2

可以看到file2文件标签为“user_home_t”。

file2的文件类型变为“etc_t”,执行命令:

[root@Localhost ~]# chcon -t etc_t file2

然后执行以下命令显示文件标签的改变:

[root@Localhost ~]# restorecon -v file2

改变文件安全语境—— chcon

chcon命令语法:

chcon [参数] CONTEXT FILE...

实例1:更改文件file2的标签,将其文件类型改为user_home_dir_t

首先执行命令查看file2的档期文件类型:

[root@Localhost ~]# ls -Z file2

然后,执行以下命令更改文件类型:

[root@Localhost ~]# chcon -t user_home_dir_t file2

最后通过执行以下命令查看更改后的文件类型:

[root@Localhost ~]# ls -Z file2

要重新标记系统,应当创建空文件/.autorelabel然后引导系统,需要输入命令“touch /.autorelabel”和“shutdown -r now”。在系统启动期间,除了用在/etc/selinux/targeted/contexts/customizable_types中的类型标记的文件,文件会被重新标记为默认值。

实例2:递归改变目录hhwork下文件和目录的标签,将文件类型改为etc_t

执行以下命令查看hhwork下文件和目录的文件类型:

[root@Localhost ~]# ls -RZ hhwork

然后执行以下命令进行递归更改,并将文件类型更改为“etc_t”:

[root@Localhost ~]# chcon -R -t etc_t hhwork

此时,该目录下的所有文件和目录的文件类型已改为etc_t了,最后执行以下命令查看结果:

[root@Localhost ~]# ls -RZ hhwork

设置文件安全语境—— setfiles

setfiles命令语法:

setfiles [参数] spec_file pathname...

实例:重新标记文件系统/。执行命令:

[root@Localhost ~]# setfiles contextsfile/

需要说明的是contextsfile为用户定义的规范文件。