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:查看filter表FORWARD链的规则设置。执行以下命令:
[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的主机通过22(tcp)端口。执行命令:
[root@Localhost ~]# iptables -A INPUT -p tcp -s 192.168.1.1/24 --dport 22 -j ACCEPT
执行该命令后,可以看到规则已加入,通过执行以下命令查看:
[root@Localhost ~]# iptables -L
保存 IP表—— iptables-saveiptables-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-restoreiptables-restore命令语法:
iptables-restore [参数]
实例:从文件natLog.txt中恢复nat表。执行命令:
[root@Localhost ~]# iptables-restore < natLog.txt
此处使用重定向,从文件natLog中输入。
执行以下命令可以查看到nat表:
[root@Localhost ~]# iptables-save -t nat
设置 SELinux模式—— setenforcesetenforce命令语法:
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模式—— getenforcegetenforce命令语法:
getenforce
实例:使用getenforce命令查看SELinux当前模式。执行命令:
[root@localhost local]# getenforce
设置 SELinux布尔值—— setseboolsetsebool命令语法:
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的状态为on,httpd_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布尔值—— getseboolgetsebool命令语法:
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布尔值—— togglesebooltogglesebool命令语法:
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的值为on,telnetd_disable_trans的值为off。然后执行以下命令进行翻转:
[root@localhost local]# togglesebool httpd_enable_homedirs telnetd_disable_trans
执行该命令后,这两个变量的值即可发生更换(即httpd_enable_homedirs的值为off,telnetd_disable_trans的值为on),再执行以下命令查看结果:
[root@localhost local]# getsebool httpd_enable_homedirs
[root@localhost local]# getsebool telnetd_disable_trans
SELinux状态工具—— sestatussestatus命令语法:
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统计信息—— avcstatavcstat命令语法:
avcstat [参数]
实例1:利用该命令显示AVC统计信息。执行命令:
[root@localhost local]# avcstat
根据参数提示,还可以设置以循环的方式显示AVC统计信息,看下面的实例。
实例2:循环显示AVC统计信息,5秒更新一次。执行命令:
[root@localhost local]# avcstats 5
执行该命令后将会不断更新AVC统计信息(5秒为一个周期),直到中断其运行为止。
转换审计消息—— audit2whyaudit2why命令语法:
audit2why [参数]
实例:将系统日志中的SELinux出错信息解码显示。执行命令:
[root@localhost local]# grep avc: /var/log/messages|audi t2why
生成策略允许规则—— audit2allowaudit2allow命令语法:
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_policyload_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策略管理—— semanagesemanage命令语法:
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
管理策略模块—— semodulesemodule命令语法:
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_packagesemodule_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”表示模块的文件语境文件。
编译策略模块—— checkmodulecheckmodule命令语法:
checkmodule [参数] [input_file]
实例:由文件localMessage.txt编译生成策略模块。执行命令:
[root@Localhost ~]# checkmodule -m -o local.mod localMes sage.txt
改变语境类别—— chcatchcat命令语法:
chcat [参数][+|-] [[+|-]CATEGOR Y],...]FILE...
chcat [参数] [[+|-]CATEGORY],...] USER...
实例1:显示可用类别。执行命令:
[root@Localhost ~]# chcat -L
实例2:显示manager用户的类别。执行命令:
[root@Localhost ~]# chcat -Ll manager
修复文件安全语境—— fixfilesfixfiles命令语法:
fixfiles [参数] { check | restor e|[-F]relabel | verify }
实例:对文件系统重新标签。执行命令:
[root@Localhost ~]# fixfiles relabel
执行命令后,建议重启系统。
恢复文件安全语境—— restoreconrestorecon命令语法:
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
改变文件安全语境—— chconchcon命令语法:
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
设置文件安全语境—— setfilessetfiles命令语法:
setfiles [参数] spec_file pathname...
实例:重新标记文件系统/。执行命令:
[root@Localhost ~]# setfiles contextsfile/
需要说明的是contextsfile为用户定义的规范文件。