Linux下有多种权限控制的机制,常见的有:DAC(Discretionary Access Control)自主式权限控制和MAC(Mandatory Access Control)强制访问控制。
Linux上传统的访问控制标准是自主访问控制Discretionary Access Control(DAC)。在这种形式下,一个软件或守护进程以User ID(UID)或Set owner User ID(SUID)的身份运行,并且拥有该用户的目标(文件、套接字、以及其它进程)权限。这使得恶意代码很容易运行在特定权限之下,从而取得访问关键的子系统的权限。
另一方面,强制访问控制Mandatory Access Control(MAC)基于保密性和完整性强制信息的隔离以限制破坏。该限制单元独立于传统的Linux安全机制运作,并且没有超级用户的概念。
AppArmor(Application Armor)是Linux内核的一个安全模块,AppArmor允许系统管理员将每个程序与一个安全配置文件关联,从而限制程序的功能。简单的说,AppArmor是与SELinux类似的一个访问控制系统,通过它你可以指定程序可以读、写或运行哪些文件,是否可以打开网络端口等。作为对传统Unix的自主访问控制模块的补充,AppArmor提供了强制访问控制机制,它已经被整合到2.6版本的Linux内核中。
Apparmor是Ubuntu自带的强制访问机制。
Apparmor有两种工作模式:enforcement、complain/learning
Enforcement – 在这种模式下,配置文件里列出的限制条件都会得到执行,并且对于违反这些限制条件的程序会进行日志记录。
Complain – 在这种模式下,配置文件里的限制条件不会得到执行,Apparmor只是对程序的行为进行记录。例如程序可以写一个在配置文件里注明只读的文件,但Apparmor不会对程序的行为进行限制,只是进行记录。
那既然complain不能限制程序,为什么还需要这种模式呢,因为——如果某个程序的行为不符合其配置文件的限制,可以将其行为记录到系统日志,并且可以根据程序的行为,将日志转换成配置文件。
当然我们可以随时对配置文件进行修改,选择自己需要的模式。
服务状态
配置文件模式管理
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。
当一个主体Subject(如一个程序)尝试访问一个目标Object(如一个文件),SELinux安全服务器SELinux Security Server(在内核中)从策略数据库Policy Database中运行一个检查。基于当前的模式mode,如果 SELinux 安全服务器授予权限,该主体就能够访问该目标。如果SELinux安全服务器拒绝了权限,就会在/var/log/messages中记录一条拒绝信息。
SELinux 安全策略:
执行sestatus,可查看当前使用的安全策略。
SELinux 有三个模式(可以由用户设置)。这些模式将规定 SELinux 在主体请求时如何应对。这些模式是:
执行getenforce,可查看当前SELinux的模式。
SELinux 安全模式设置:
SELinux安全标记:
SELinux 安全策略(如果启用三权分立,则secadm执行):
SELinux安全开关:
SELinux 安全策略规则:
KYSEC是基于kysec安全标记对执行程序、脚本文件、共享库、内核模块进行保护的一种安全机制。
除了系统默认集成的执行程序、脚本文件、共享库、内核模块,任何外来的该4种文件,如拷贝、移动、下载、重新编译生成等,都必须添加到麒麟安全管理工具的相应白名单列表中,才能执行调用。
会对白名单列表中的文件进行保护,保护文件不被修改、移动、删除。
getstatus 查看当前Kysec的相关安全状态
KYSEC安全标记:
配置KYSEC安全标记:
1、麒麟安全管理工具 #图形化安全配置工具
服务器默认没有开启,打开后提示如下图 #只能通过命令开启kysec模块
2、开启kysec模块 #服务器默认没有开启,切换kysec级别重启生效
开启命令:security-switch --set default #kysec默认级别default
安全级别:default、strict、custom,详细参数如下图
开启kysec模块后,就可以打开图形化安全管理工具
3、设置安全控制项 #先开启kysec模块
设置命令:setstatus Softmode | Normal | Warning
说明:强制模式(Normal):出现违规操作时,不止会审计记录该操作,还会阻止该操作的运行;
警告模式(Warning):出现违规操作时,会弹出麒麟安全授权认证框进行授权;
软模式(Softmode):出现违规操作时,只会审计记录该操作,而不会阻止该操作的运行。
查看命令:getstatus #查看是否开启kysec及控制模块
未开启kysec
开启kysec默认级别,默认模块
遗留:开启kysec模块,如何关闭?
1、麒麟安全管理工具 #图形化安全配置工具
位置:计算机右键属性——更新——安全中心
2、开启kysec模块 #服务器默认没有开启,切换kysec级别重启生效
通过命令或者图形化工具选择kysec级别和关闭kysec模块
开启命令:security-switch --set default #kysec默认级别default
安全级别:default、strict、custom,详细参数如下图
关闭kysec模块
关闭命令:setstatus disable
图形化工具操作如下图
3、设置安全控制项 #先开启kysec模块
设置命令:setstatus disable | enable | softmode
查看命令:getstatus #查看是否开启kysec及控制模块
未开启kysec
开启kysec默认级别,默认模块
所有用户可以执行getstatus,查看当前白名单访问控制(kysec)的状态:
sudo组用户、root用户(三权分立下为secadm用户)可以执行setstatus设置kysec状态:
执行setstatus enable/softmode/disable,修改本次系统kysec的运行模式。其中enable安全模式会阻止非法程序的执行,Softmode模式只会在日志中记录非法程序的执行,而不会阻止该程序的执行。disable模式本次系统将临时关闭kysec,任何程序都可以正常执行,下次启动时可恢复到系统设定的kysec安全模式;
执行 setstatus disable/softmode/enable -p将在修改本次kysec运行模式的永久修改下次启动时ksyec的运行模式;
执行 setstatus -f < exect | netctl >
执行setstatus -f < fpro | ppro>
在系统安装完成后,首次开机时,对整个文件系统进行扫描,会给整个文件系统的可执行程序、共享库文件、可执行脚本以及内核模块打上初始化标记original,并对系统设定的部分应用程序打上其他合法白名单标记,完成系统白名单的初始化过程。
加入到白名单列表的可执行程序、共享库文件、可执行脚本系统允许其被执行和调用,加入到白名单列表的内核模块系统允许其被加载。
系统能够对非法外来的可执行程序、共享库文件、可执行脚本、内核模块进行主动识别和标记。
可使用kysec_get -n exectl
当白名单列表中受信任的可执行程序、共享库文件、可执行脚本、内核模块被篡改时,进行主动识别和标记。
kysec执行控制管控
对于外来非法的可执行程序、共享库文件、可执行脚本,系统将不允许其被执行和调用。只有通过管理员添加到白名单列表,或者关闭麒麟安全机制,才可以执行和被调用。
管理员可以通过执行kysec_set -n exectl -v original/verified/trusted/kysoft
各标记类型区别如下:
unknown:未知文件标记,该标记不可执行
original:系统原始文件标记,该标记可执行
verified:第三方可执行标记,该标记可执行
kysoft:可信安全标记,该标记可执行
trusted:可信安全标记,拥有该标记的程序对文件进行修改时,文件的标记不变,该标记可执行。
系统管理员可以将需要完整性保护的文件加入到文件保护白名单列表中,可以防止对应文件被删除、修改以及移动等操作。
系统管理员可以通过执行kysec_set -n protect -v readonly
对于外来非法、被篡改的内核模块,系统将不允许其被加载。只有通过管理员添加到白名单列表,或者关闭麒麟安全机制,其才可以该加载。
管理员可以通过执行kysec_set -n exectl -v original/verified/trusted/kysoft
管理员可以执行kysec_kmod -a
各标记类型区别如下:
unknown:未知文件标记,该标记不可的模块不可被加载执行
original:系统原始文件标记,该标记可以被加载
verified:第三方可执行标记,该标记可以被加载
kysoft:可信安全标记,该标记可以被加载
trusted:可信安全标记,拥有可以被加载。
应用联网控制功能:控制应用程序的联网,该功能被启用后。
对于已添加到应用联网控制列表的应用程序,将会根据该应用程序在列表中配置的联网策略决定是否允许该应用程序联网;
对于不在应用联网控制列表的应用程序,当联网控制设置为禁止时,不在应用联网控制列表的应用程序将被禁止连接网络;设置为警告时,不在应用联网控制列表的应用程序在联网时将弹出联网授权窗口,在授权窗口可以选择本次允许/允许/禁止,来对该应用程序联网进行控制,并根据用户的选择将该应用程序加入到应用联网控制列表中并配置所选择的联网策略:当选择“允许”时,该应用程序将永久性允许联网,当选择“本次允许”时系统仅允许该应用程序本次连接网络,下次该应用程序启动连接网络时将会继续弹出联网授权窗口,当选择“禁止”时该应用程序将被永久禁止连接网络;
当应用联网控制功能设置为“关闭时”,所有应用程序均可以连接网络。
sudo组用户(三权分立下为secadm用户)执行setstatus -f netctl enforcing/warning/off,分别设置应用联网状态开关为禁止/警告/关闭。
sudo组用户(三权分立下为secadm用户)可以通过安全中心--网络保护--应用程序联网,设置应用联网控制状态,具体操作详见安全中心章节介绍。
进程防护功能包括进程防杀死类型和关键进程状态监控类型,可以根据实际需求,对不同的应用程序设置不同的防护类型。
两种类型进程防护区别如下:
进程防杀死:当把应用程序加入到进程防杀死列表,系统将禁止该程序进程被杀死(当进程号为1的进程发出kill信号时不受控制)。
关键进程状态监控:当把应用程序加入到关键进程状态监控列表,系统将对该程序的进程状态进行监控,并对其进行防杀死控制,当发现列表中某个进程退出状态变成DEAD或ZOMBIE或者该进程主动退出时,将会调用核外程序进行关机或锁屏等(具体操作根据配置文件来决定)。
当系统启动时,系统自动同步进程防杀死、关键进程状态监控列表到内核中,内核程序启动对进程防护列表中应用进程的防护。
进程防护属于kysec的子模块,通过getstatus 可以查看kysec以及进程防护process protect子模块的状态,当kysec的状态为enabled,且process protect状态为on时,进程防护才生效:
root用户、sudo组用户执行可以执行以下命令进行相关安全操作:
setstatus enable可以开启kysec
setstatus -f ppro on用于开启进程防护
setstatus -f ppro off用户关闭进程防护
kysec_ppro -a
kysec_ppro -u
kysec_ppro -d
/sys/kernel/security/kysec/ppro,可以查看当前进程防护状态,1代表打开,0代表关闭。
/sys/kernel/security/kysec/ppro_info,可以查看当前进程防护列表各类型防护程序的数量:
通过kysec_ppro -a/u/d等更新进程防护列表后,可以通过/etc/kysec/ppro/ppro.xml查看进程防护列表。
root/sudo组用户可以通过/etc/kysec/ppro/ppro.conf配置关键进程状态监控对应的防护动作。其中配置为lock时会锁定屏幕,配置为logout会注销用户,配置为poweroff时会触发关机,配置为reboot时会重启系统。该配置修改后无需重启系统立即生效。