SELinux
访问控制机制:
DAC:Discretionary Access Control,自主访问控制:
基于文件或数据被文件系统赋予的访问权限(r,w,x)的方式实现的访问控制机制;

    MAC:Mandatory Access Control,强制访问控制:对于文件或数据的访问权限不是针对用户身份来设定,当某个用户发起某个进程之后,该进程是否能够操纵或处理此文件或数据,取决于进程和文件是否具备可以匹配的domain和type;SELinux就是MAC访问控制机制在Linux系统中的实现;SELinux工作于Linux内核中:RHEL 4.0:测试性的加入了SELinux安全组件;RHEL 5.0:在安全操作系统时强制安装此组件,但可以在安装时选择关闭相应功能;RHEL 6.0+:在安装操作系统时强制安装此组件,且在系统启动之后自动启动其功能;SELinux依赖于安全策略结果进行相应的访问控制管理,策略结果已知的有三种:strict:对于每个文件都有严格的规定其类型,对于每个进程都要设定特定的域,进程的域和文件的类型必须严格匹配,才能允许进程访问此文件;mls:multi-level security,多级安全策略结果集;targeted:仅对有限个进程进行SELinux的强制访问控制管控;只要进程的域和文件的类型属于某同一大类,就可以匹配,就可以允许进程访问文件;在RHEL系操作系统中为此策略结果;所有有限个进程,指的是那些容易被***并且会对系统造成安全隐患的进程;Sandbox:在Linux系统中,能够完成真实操作的实体,是进程;subject, action(operation), objectsubject:进程action(operation):open, close, read, write, modify, delete, chmod, chown, ...object:文件,进程,套接字,链接,...SELinux为每个文件提供了一套安全标签,也为每个进程提供了一套安全标签,这些安全标签可以称为SELinux的安全上下文(security context);user-identify:role:domain|type:sencitivityuser-identify:SELinux的用户身份标识,通常指用户的类型;role:角色domain|type:进程的域或文件的类型;sencitivity:敏感度;注意:在targeted策略结果集中,仅关心进程的domain和文件的type能否匹配,与其他的安全上下文标识没有关系;SELinux的策略库:规则库:存放规则规则:进程的哪个域可以以哪种方式访问或操纵哪些类型的文件;存放于/etc/selinux/targeted/policy目录中;/etc/sysconfig/selinux文件中定义了SELinux的工作模式和使用的策略结果集;SELINUX=enforcingSELINUXTYPE=targetedSELinux的工作模式:enforcing - SELinux security policy is enforced.permissive - SELinux prints warnings instead of enforcing.disabled - No SELinux policy is loaded.注意:1.凡是从enforcing或permissive模式切换至disabled模式,或者从disabled模式切换至enforcing或permissive模式,都必须经过操作系统的重新引导才能生效;2.从enforcing模式到permissive模式的切换,可以直接使用命令行工具完成且立即生效; setenforce命令:setenforce - modify the mode SELinux is running in.setenforce [ Enforcing | Permissive | 1 | 0 ]1:Enforcing0:Permissivegetenforce命令:getenforce - get the current mode of SELinux注意:使用setenforce命令修改的SELinux的工作模式会立即生效,但并非永久有效;如果想要使被修改的SELinux的工作模式永久有效,则需要修改/etc/sysconfig/selinux文件中的SELINUX参数的值,并重新引导操作系统;查看进程或文件的SELinux的安全上下文:文件安全上下文查看:ls -Z|--context [file]进程安全上下文查看:ps auxZps -efZ修改文件的安全上下文:chcon命令:chcon - change file SELinux security context-t, --type=TYPE:直接设置目标文件的类型;-R, --recursive:递归地修改目录中所有文件,包括子目录中的文件;--reference=RFILE:参考RFILE所代表的文件的安全上下文,为目标文件设置完全相同的安全上下文;使用场景:通常在进程的安全上下文与文件的安全上下文类型不相符合或不能匹配的时候使用;如:设置httpd虚拟主机对应的文档根目录的安全上下文;restorcon命令:restorecon - restore file(s) default SELinux security contexts.-R, -r:递归修改指定目录及其子目录的安全上下文为默认值;查看或修改策略中的内容:getsebool命令:getsebool - get SELinux boolean value(s)-a:Show all SELinux booleans.setsebool命令:setsebool - set SELinux boolean value-P:If the -P option is given, all pending values are written to the policy file  on disk. So they will be persistent across reboots.使用场景:支持二进制策略修改的系统服务;vsftpd的匿名用户的上传功能被SELinux限制的场景:~]# setsebool -P ftpd_anon_write on~]# setsebool -P ftpd_full_access=1samba服务中samba用户访问自己的家目录的共享结果被SELinux限制的场景:~]# setsebool -P samba_enable_home_dirs onsamba服务中共享的目录是由管理员自行创建并指定的:chcon -t samba_share_t /path/to/directorysemanage命令:semanage - SELinux Policy Management tool注意:如果没有此命令,需要安装policycoreutils-python程序包即可;semanage port命令:-a, --addAdd a record of the specified object type-d, --deleteDelete a record of the specified object type-m, --modifyModify a record of the specified object type-l, --listList records of the specified object type示例:~]# semanage port -a -t http_port_t -p tcp 8088

tcp_wrappers:tcp封装器;
仅仅就是一个库:libwrap.so

功能:对能够访问到调用了libwrap.so库的应用程序服务的客户端主机进行基于IP地址的访问控制;库调用的方法:静态编译:动态链接:判断一个应用程序服务是否能够接受tcp_wrappers的访问控制:1.对于动态链接至libwrap.so的应用程序:ldd /PATH/TO/APP_BINARY_FILE | grep libwrap.so2.对于静态编译libwrap库至应用程序中的:strings /PATH/TO/APP_BINARY_FILE利用strings命令查看指定的应用程序的二进制文件中,是否包含有/etc/hosts.allow, /etc/hosts.deny;如果有此类信息,则说明其将libwrap库以静态的方式编译进应用程序,即可以支tcp_wrappers的访问控制;常用的基于tcp_wrappers进行访问控制的服务:sshd, vsftpd;tcp_wrappers的配置文件:/etc/hosts.allow/etc/hosts.deny配置文件的匹配顺序:/etc/hosts.allow --> /etc/hosts.deny --> 默认规则:允许所有主机数据放行;获取配置文件的帮助的方法:~]# man hosts.allow~]# man hosts.deny~]# man hosts_access(推荐)~]# man hosts_options配置文件的格式:daemon_list : client_list [ : shell_command ]daemon_list : client_list : option : option ...daemon_list:1.单个应用程序服务文件的名称;如:vsftpd;2.多个应用程序服务文件的名称列表,用","分隔;如:vsftpd, sshd;3.通配符:ALL不加区分的表示所有受到tcp_wrappers控制的应用程序服务文件;client_list:1.单个主机的IP地址或主机名称,如果使用主机名称,必须保证在本机能够实现名称解析;2.网络地址:1) 如果写掩码,必须是以完整的子网掩码表示的网络地址,如果使用前缀长度来表示则无效;如:172.16.0.0/255.255.0.0是有效的;172.16.0.0/16是无效的;2) 如果不写掩码,可以使用简短格式:如:172.16.3.通配符:ALL:所有的客户端主机;LOCAL:所有的主机名称中不包含"."字符的客户端主机;KNOWN:所有的能够被当前主机正确完成名称解析的客户端主机;UNKNOWN:所有的不能被当前主机正确完成名称解析的客户端主机;PANANOID:所有的正向解析结果和反向解析结果不一致的客户端主机;如:www.qhdlink.com --> 192.168.100.1192.168.100.1 --> www.qhdink.org: optionallow:允许,主要用于hosts.deny文件中,定义允许放行的访问控制规则;deny:阻止,拒绝,主要用于hosts.allow文件中,定义阻止访问的访问控制规则;spawn shell_command:当规则能够匹配主机时,执行后面的shell命令;示例1:拒绝172.16.72.1主机利用ssh协议访问172.16.69.2主机;可以在/etc/hosts.allow中拒绝:sshd : 172.16.72.1 : deny可以在/etc/hosts.deny中拒绝:sshd : 172.16.72.1示例2:拒绝172.16.0.0/16中的所有主机,但允许172.16.0.1主机利用ssh协议访问172.16.69.2主机;/etc/hosts.deny:sshd : 172.16.0.0/255.255.0.0 EXCEPT 172.16.0.1示例3:仅允许172.16.0.0/16中的所有主机,但拒绝172.16.72.1主机利用ssh协议访问到172.16.69.2主机;方案1:/etc/hosts.denysshd : ALL EXCEPT 172.16. EXCEPT 172.16.72.1方案2:/etc/hosts.denysshd : ALL/etc/hosts.allowsshd : 172.16. EXCEPT 172.16.72.1spawn使用示例:/etc/hosts.denysshd : ALL EXCEPT 172.16.0.0/255.255.0.0 EXCEPT 172.16.72.1 : spawn /bin/echo $(date) %c attempt to login %s >> /var/log/tcp_wrap_sshd.log常用的内建宏:%c     Client information: user@host, user@address, a host name,  or  just an address, depending on how much information is available.%s     Server information: daemon@host, daemon@address, or just  a  daemon name, depending on how much information is available.

nss & pam
nss --> nsswitch:Name Service Switch,名称服务开关;

名称解析:将人类能够识别和使用的自然语言的符号转换成计算机能够识别和使用的数字符号的过程;包括:主机名 --> IP地址;用户名 --> UID;组名 --> GID;服务名 --> PORT;网络接口名称 --> MAC地址;...解析:根据已知的信息(关键字,key)查找某个特定的存储库,从而能够获取到与该已知信息有关的或者相匹配的其他信息的过程;存储库:文件;RDBMS;No-SQL;LDAP;...login:nsswitch:通用服务框架:为应用程序提供简洁且高效的接口;名称解析服务的代理程序;作用:承上启下:承上:提供统一的配置和调用接口;启下:向各种形式的存储库的使用接口发出调用;在Linux系统中实现名称解析服务的通用框架:nss相关的库;/lib64/libnss*/usr/lib64/libnss*/usr/lib64/libnss3.so:nss服务框架接口,用于承上;其他的libnss*.so库文件,都是用于访问各种存储库的接口(驱动);为了能够正确的访问存储库,为每种用到解析库的应用程序,通过一个特定配置文件定义存储库的访问方式:/etc/nsswitch.conf配置文件的格式:db: store_format1 store_format2 ...每种存储中都可以根据查找键进行查找,且每次查找都会有返回状态:STATUS => SUCCESS | NOTFOUND | UNAVAIL | TRYAGAIN对应每一种状态返回值,都有相应的行为:ACTION => return | continue注意:除了SUCCESS状态的默认行为是return之外,其余的状态的默认行为都是continue;自定义状态和行为的关系组合:[STATUS=ACTION][!STATUS=ACTION]示例:hosts:      files [NOTFOUND=return] dns获取解析结果的命令:getent命令:getent - get entries from Name Service Switch librariesgetent database [key ...]示例:getent passwd rootgetent hosts www.qhdlink.compam:pam:Pluggable Authentication Modules;可插入式认证模块;通用的认证服务框架;实现:提供了与各类型的存储库进行交互的通用实现解决方案,主要依靠相应的认证功能模块;模块存放的路径:/lib64/security/pam_*.so配置文件:每个基于pam做认证的应用程序都需要有相应的配置文件,其中定义了应用程序如何利用pam实现各种所需的认证功能;1.全局认证配置文件:/etc/pam.conf格式:service type control module-path module-arguments2.各个应用程序的专用配置文件:/etc/pam.d/*APP_NAME*格式:type control module-path module-argumentstype:account:与账号管理相关的非认证类功能;通常是账号审计,包括:过期时间,资源可用性等;auth:与账号的认证和授权有关的功能;password:与用户账户修改密码时的复杂度的规定有关的功能;session:通过认证和账户审计之后,用户获取到服务之前或使用服务完成之后,需要进行的附加审计操作;如:日志记录等;control:同一种type的多个检查之间如何进行关联和组合;有两种实现方式:1.简单实现:使用一个关键词来定义;required:在认证时,如果本条目没有被满足,那么最终本次的认证一定失败;但是本次认证过程并不会因此而中断,而是在整个栈所有的规则运行完毕之后,最终给出"认证失败"的信号;隐性的一票否决权;requisite:在认证时,如果本条目没有被满足,那么本地认证一定失败;而且整个栈立即终止并返回"认证失败"的信号;显式的一票否决权;如果本条目被满足,则需要继续参考其他条目;sufficient:在认证时,如果本条目被满足,且本条目之前没有任何required条目被判断为失败,则整个栈立即终止并返回"认证成功"的信号;条件式一票通过;如果本条目没有被满足,则还需要继续参考其他的条目规则;optional:该条目仅在整个栈中只此一条时才有决定作用,否则无论该条目被满足或没有被满足都与最终的认证结果无关;include:将其他的配置文件中的所有规则包含至当前条目,此条目是否被满足,取决于被指定文件的最终认证结果;有可能影响当前栈的最终认证结果;substack:将其他的配置文件中的所有规则包含至当前条目,与include不同,其认证结果不影响当前栈;2.详细实现:使用一个或多个"statsu=action"标记进行组合定义;[value1=action1 value2=action2 ...]value的值包括:success, open_err, symbol_err, service_err, system_err, buf_err, perm_denied, auth_err, cred_insufficient, authinfo_unavail, user_unknown, maxtries, new_authtok_reqd, acct_expired, session_err, cred_unavail, cred_expired, cred_err, no_module_data, conv_err, authtok_err, authtok_recover_err, authtok_lock_busy, authtok_disable_aging, try_again, ignore, abort, authtok_expired, module_unknown, bad_item, conv_again, incomplete, and default.action的值:ok, done, die, bad, ignore, N, reset, ...module-path:被调用的模块所在的路径;相对路径:相对于/lib64/security目录而言的模块路径;绝对路径:/lib64/security/*.somodule-arguments:各个被调用的模块的专有模块参数;通常来讲,同一个模块如果需要多个参数时,只需要将各个参数以空白字符分隔即可;如果需要在单个参数中使用空格等空白字符,可以用中括号([])将整个参数包裹起来;认证模块:pam_shells.so用户账户默认登录shell是否为安全shell;凡是在/etc/shells文件中以单行被列举出的shell,都属于安全shell,反之则为非安装shell;如:在/etc/pam.d/sshd第一行添加如下认证信息:auth        required        pam_shells.sopam_limits.so系统资源分配管控模块;在用户级别实现对指定用户限制其可以使用的资源总量;ulimit命令:可以查看或临时的调整系统资源的使用限制,仅root用户能进行调整;-n #:设置打开的文件数;修改配置文件可以是资源使用的限制永久生效:/etc/security/limits.conf/etc/security/limits.d/*格式:<domain> <type> <item> <value><domain>1.单个用户;2.组,组内所有用户账户成员;3.*,表示所有用户,通常用于设置默认值;<type>soft:hard:-:既是soft也是hard;<item>nofile:同时打开的文件的最大数量值;nproc:并发启动的进程的最大数量值;locks:打开的文件锁的最大数量值;

转载于:https://blog.51cto.com/huliheeyu/2150636

SELinux相关内容相关推荐

  1. iOS 发布APP关于IDFA的相关内容

    您的 App 正在使用广告标识符 (IDFA).您必须先提供关于 IDFA 的使用信息或将其从 App 中移除,然后再上传您的二进制文件. 如果出现下边这两张图,你就会感到蛋蛋的忧伤 还有这个 怎么解 ...

  2. golang实践LSM相关内容

    LSM LSM(log-structured merge-tree)是一种分层,有序,面向磁盘的数据结构,其核心思想是充分了利用了,磁盘批量的顺序写要远比随机写性能高出很多,在计算机科学中,日志结构的 ...

  3. Assembly--及相关内容

    Assembly--及相关内容 0.2672019.06.04 09:29:26字数 448阅读 88 De novo genome assembly Hybrid error correction ...

  4. Android开发环境——Eclipse ADT相关内容汇总

     Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...

  5. 基于KNN的相关内容推荐

    如果做网站的内容运营,相关内容推荐可以帮助用户更快地寻找和发现感兴趣的信息,从而提升网站内容浏览的流畅性,进而提升网站的价值转化.相关内容 推荐最常见的两块就是"关联推荐"和&qu ...

  6. 【SeeMusic】创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | 导入音频 | 导入视频 )

    SeeMusic 系列文章目录 [SeeMusic]下载安装并注册 SeeMusic 软件 [SeeMusic]创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | ...

  7. Android开发环境——模拟器AVD相关内容汇总

    Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关内 ...

  8. DCMTK:OFpath和相关内容的测试程序

    DCMTK:OFpath和相关内容的测试程序 OFpath和相关内容的测试程序 OFpath和相关内容的测试程序 #include "dcmtk/config/osconfig.h" ...

  9. android Wifi开发相关内容

    今天,简单讲讲android里如何使用WifiManager. 之前,我看代码时,看到了wifi相关的代码,发现自己对于这个内容的使用还很不熟悉,所以在网上查找资料,最终解决了问题.这里记录一下. 移 ...

最新文章

  1. 【Java代码】京东商品全部分类数据获取(建表语句+Jar包依赖+树结构封装+爬虫源代码)包含csv和sql格式数据下载可用
  2. 入手腾龙SP AF90mm MACRO
  3. s3c2440内存控制器与SDRAM基本测试
  4. Language-Directed Hardware Design for Network Performance Monitoring——Marple
  5. P3698-[CQOI2017]小Q的棋盘【树形dp】
  6. 【CodeForces - 1038C】Gambling (博弈问题,优先队列模拟,贪心)
  7. 当拼多多开始打假 那么多“拼多多买家秀”竟都是假的?
  8. 二叉排序树[2005年华中科技大学计算机保研机试真题]
  9. 如何让谷歌取消自动重定向
  10. 数据算法_JS数据结构与算法_排序和搜索算法
  11. smarq v7 智器 v7 新手使用
  12. android上传到svn服务器端,上传Android项目到SVN
  13. 基于python的简易局域网聊天工具
  14. Python一行代码实现1到100之和
  15. RabbitMq 消息接收确认(可靠消费)
  16. 关于MBR和GUID分区的问题
  17. 金融科技大数据产品推荐:荣之联·风报—人工智能企业情报分析系统
  18. onmouseover 和onmousemove的区别
  19. idea导入项目/git/遴选/贮藏
  20. 绘制镇街区域的Echarts地图

热门文章

  1. 月老在线牵盲盒/交友盲盒公众号版本1.04支持交友同城
  2. ZYI PHP授权系统开源
  3. 苹果cms8x缩图带3D翻转自适应模版
  4. 二次元QQ价值评估网源码
  5. 微信微擎口红机带闯三关送礼品完整源码+精美UI支持海报推广
  6. GetWindowThreadProcessId
  7. php 添加水印, 格式转换, 变换大小 Watermark, png2jpg, resize
  8. magento创建自定义页面 (Bestseller实例) Bestseller products in Magento
  9. mysql 命令备份恢复,binlog日志, percona工具备份恢复
  10. Linux批量复制文件夹里的文件到另一个文件夹(问题:linux sh: /bin/cp: Argument list too long )