Linux安全应用指导_V1_1精编版[48页].docx
《Linux安全应用指导_V1_1精编版[48页].docx》由会员分享,可在线阅读,更多相关《Linux安全应用指导_V1_1精编版[48页].docx(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、最新资料推荐华为技术有限公司内部技术指导DKBA 8328-2015.11Linux安全应用指导 华为技术有限公司Huawei Technologies Co., Ltd.版权所有 侵权必究All rights reserved修订声明Revision declaration本指导拟制与解释部门:网络安全能力中心本指导的相关系列规范或文件:相关国际规范或文件一致性:替代或作废的其它规范或文件:无相关规范或文件的相互关系: 无目录简介6使用对象6适用范围6指导解释6用词约定6术语解释71权限管理81.1权限最小化81.1.1 禁止直接使用root账号登录Linux系统81.1.2 除有明确特权需
2、求,应用程序应以非root账号运行91.1.3 采用不同权限的帐号运行不同的应用并对帐号进行权限分离91.1.4 在运行时有特权需求的程序,在特权操作完后如后续无特权需求,必须使用setuid放弃特权101.1.5 使用sudo机制代替以root帐号登录运行特权程序的方式。111.1.6 应对允许使用su到root帐号的用户进行明确授权,非授权用户不能切换到root111.1.7 使用POSIX Capabilities功能避免直接使用root权限121.2文件和目录权限141.2.1系统中禁止有无主文件存在141.2.2 除有明确需求,应删除文件不必要的setuid和setgid位141.2
3、.3应为系统用户设置缺省的umask值151.2.4 使用特殊属性位Sticky位对共享目录权限进行控制161.2.5 利用特殊文件属性Append-only位保护系统命令行历史日志文件,防止内容被篡改162访问控制182.1自主访问控制182.1.1 使用POSIX ACL进行更细粒度的访问控制182.2强制访问控制202.2.1 Linux系统上应安装强制访问控制系统作为应急的安全访问控制手段203记录和审计223.1监测、记录和审计223.1.1启用inotify监控机制,以文件系统事件进行安全监控223.1.2使用Auditd组件对系统中的重要目录或文件进行审计244认证264.1口令
4、和账号264.1.1 使用shadow套件对系统账号口令进行分离保护264.1.2Linux系统必须使用shadow套件对当前暂时不使用的账号进行锁定或登录限制274.1.3使用shadow套件对系统口令的时效进行限制294.2可插拔认证模块(PAM)294.2.1使用PAM模块增强认证管理295文件系统保护315.1日志文件保护315.1.1 应将操作系统日志发送至外部服务器单独存储,确保日志不被篡改315.2文件系统加密315.2.1对含有重要信息的文件目录或分区进行加密处理315.3分区和挂载325.3.1对于系统中的重要目录必须根据存储目的不同进行分区隔离325.3.2使用fstab对
5、外接、日志存储分区进行访问控制。325.3.3禁用自动工具对移动存储设备进行挂载336网络防护346.1网络防护能力346.1.1 使用sysctl工具增强系统网络防护能力346.1.2 使用iptables对系统中不使用的端口进行限制356.2限制网络服务356.2.1 远程访问需使用SSH取代telnet356.2.2 系统中不应安装不安全的传统网络服务357漏洞攻击防护377.1地址随机化377.1.1 使用Linux自带的ASLR功能(地址空间布局随机化)增强漏洞攻击防护能力377.2数据执行防护377.2.1 系统必须使用DEP防护手段提升漏洞攻击防护能力377.2.2 使用栈保护机
6、制387.3增强性安全防护397.3.1 使用Grsecurity增强Linux系统的安全防护能力397.3.2 使用PaX提升系统攻击防护能力408完整性保护438.1文件完整性检查438.1.1 使用IMA工具对系统文件的完整性进行检查439安全隔离和容器449.1安全隔离449.1.1 对于开放给第三方的shell环境,应使用隔离技术对其可访问的系统资源进行隔离449.1.2 对于系统中运行的第三方应用,需使用控制组或容器等技术手段将其于系统关键资源进行隔离。4610其他4710.1额外系统功能限制4710.1.1 对core dump功能的使用进行限制4710.1.2 关闭SysRq键
7、的使用4710.1.3 应对bootloader开启引导装载密码4810.1.4 使用ulimit工具限制用户可以打开文件个数4811设计样例50简介随着公司业务发展,越来越多的产品被公众所熟知,并成为安全研究组织的研究对象、黑客的漏洞挖掘目标,产品的安全问题不可小视。公司内许多产品使用Linux系统作为软件开发和安装的基础,由于对Linux系统中编译器、软件服务、系统自身防护等方面缺乏足够的了解,使产品存在许多安全漏洞,产品也因此遭受黑客的攻击。Linux安全应用指导结合Linux系统中常用的安全机制安全特性同时结合业界最佳实践,针对业内普遍的Linux系统漏洞和软件漏洞给出指导方法,帮助产
8、品开发团队减少由于设计过程中未引入安全机制或软件加固方法而引入安全风险。本指导的制订目的是希望能指导读者选择正确的安全机制和软件加固方法,以减少安全漏洞的产生。指导涵盖Linux系统中的:权限管理、访问控制、认证、审计、文件系统保护、漏洞攻击防护等内容。使用对象本指导的读者及使用对象主要是产品涉及Linux系统的需求分析人员、设计人员、开发人员、测试人员等。适用范围本指导适合于公司涉及使用Linux操作系统的产品(嵌入式产品除外),如使用欧拉server OS、suse 等产品。指导解释Linux安全应用指导目的在于通过结合业内的最佳实践,对在Linux系统下合理的使用安全机制和安全特性来解决
9、产品安全问题和增强系统安全能力提出要求。其目的在于以下几点:1. 充分发挥Linux已有的安全能力。2. 将Linux社区中普遍使用的安全组件及解决方案吸纳进来,合理的应用到系统中,增强系统的安全能力。3. 为产品线安全人员解决Linux安全问题赋能。用词约定规则:编程时必须遵守的约定。建议:编程时必须加以考虑的约定。说明:对此规则/建议进行必要的解释。示例:对此规则/建议从正面给出例子。术语解释名词解释MAC强制访问控制(Mandatory Access ControlMAC),用于将系统中的信息分密级和类进行管理,以保证每个用户只能访问到那些被标明可以由他访问的信息的一种访问约束机制。DA
10、C自主访问控制(Discretionary Access Control,DAC)是这样的一种控制方式,由客体的属主对自己的客体进行管理,由属主自己决定是否将自己的客体访问权或部分访问权授予其他主体,这种控制方式是自主的。容器容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。PAMPAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的
11、认证方式而无需更改服务程序,同时也便于向系 统中添加新的认证手段。ASLRASLR(Address space layout randomization)是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。DEPDEP (Data Execution Prevention) 是一套软硬件技术,能够在内存上执行额外检查以帮助防止在系统上运行恶意代码。ACL访问控制列表(Access Control List,ACL)。1 权限管理1.1 权限最小化1.1.1 禁止直接使用roo
12、t账号登录Linux系统说明:root是Linux系统中的超级特权用户,具有所有Linux系统资源的访问权限。如果允许直接使用root账号登录Linux系统对系统进行操作,会带来很多潜在的安全风险,为了规避由此带来的风险,应禁止直接使用root帐号登录操作系统,仅在必要的情况通过其他技术手段(如:su)间接的使用root账号。禁止直接使用root账号登录可以规避很多潜在的安全风险,提高系统安全性。此条目需满足以下要求: 禁止直接通过root账号远程登录系统(ssh远程登录) 禁止直接使用root账号本地标准终端登录(本地tty登录,如:tty1、tty2等)此条目对以下情况不做强制要求: 对于
13、设备维护用串口不做强制要求,如console。 系统初始化和调测阶段不在规则范围内。实施指导:l 禁止root账号本地直接登录1) 编辑root登录设备控制文件securettyvi /etc/securetty2) 注释掉或删除所有标准终端设备(形如ttyN,如:tty1、tty2等)#tty1#tty2#ttyN3) 保存文件后root用户本地标准终端登录即被禁止Login: rootPassword:Login incorrectl 禁止root账号远程直接登录例:修改openssh服务配置文件,禁止root账号远程直接登录1) 编辑openssh服务配置文件sshd_configvi
14、/etc/ssh/sshd_config2) 查找PermitRootLogin配置项(若不存在需添加),将其设置为NoPermitRootLogin No3) 保存文件后,重新启动sshd服务/etc/init.d/sshd restart1.1.2 除有明确特权需求,应用程序应以非root账号运行 说明:root权限是Linux系统中的超级特权用户,具有所有Linux资源的访问权限。若自研程序或者第三方程序存在堆栈溢出漏洞,那么攻击者就可以利用漏洞植入任意代码,获取程序执行者的权限,进而控制整个系统。因此,我们应该按照最小权限原则设计Linux系统权限,即使程序中存在堆栈溢出漏洞,由于被植
15、入恶意代码的程序只有普通用户权限,无法对系统造成严重影响,攻击面大大降低。实施指导:比如一个程序在使用普通用户就可以正常运行的情况,就不应用 root帐号运行,按照安全设计的最小权限原则,分析应用程序进程所需要的最小权限,无特权需求的程序禁止使用root运行。实施方法如下:root# useradd huaweisu - user -c programuser代表用户名,program是程序名(这里要注意的是程序名要给决对路径)1.1.3 采用不同权限的帐号运行不同的应用并对帐号进行权限分离说明:在设计实现应用系统时,应根据各个组成部分(子系统或程序)运行所需的操作系统权限的不同以及暴露给用户
16、的访问权限的不同,对其进行划分和授权,采用不同权限的帐号运行不同的程序或组成部分。此条目需满足以下要求: 运行web服务的系统帐号不能和运行数据库的系统帐号是同一个帐号,并且要做访问的权限分离。实施指导:例如典型的WEB应用系统,由WEB系统和数据库系统组成,WEB系统对外提供访问服务,外部用户通过WEB服务获取页面相关的数据,这此页面数据敏感度相对低一些,而数据库系统一般存放业务相关的重要数据,敏感度高,通常会为两个系统建立不同的帐号和权限,并分配不同的目录来存放敏感度不同的数据。对于WEB系统使用Apache服务器情况,会建立apache用户来运行httpd进程,限制httpd进程只能特定
17、WEB文件、配置文件和日志数据,如var/www;同时,对数据库使用mysql的情况,也会为数据库建立专门的帐户mysql和相应的特权目录,让mysqld服务进程只能访问限定的目录,如var/lib/mysql。通过这样的划分和授权,达到用不同的权限帐号运行不同的程序并实现了运行权限的分离。1.1.4 在运行时有特权需求的程序,在特权操作完后如后续无特权需求,必须使用setuid放弃特权说明:程序中有些任务必需使用root权限执行,当特权操作完成后并且后续无特权需求,应调用setuid()函数放弃root用户的权利,使用普通用户权限运行程序。需要注意的是一旦调用setuid()函数放弃root
18、用户的权利,在后续执行中这个进程就只能以普通用户的身份运行。此条目需满足以下要求: 在程序启动时需要特权需求,启动完成后不需要特权需求的程序,需放弃特权。实施指导:#include#include#includeint main() if( !setuid( getuid() ) ) 抛弃root权限,进入普通用户权限 printf(setuid successfully!n); else printf(setuid error!); perror(setuid); return 0;1.1.5 使用sudo机制代替以root帐号登录运行特权程序的方式。说明:sudo可以使普通用户以特定的用户
19、权限执行某些命令。大部分系统管理命令都需要使用root权限执行,对于系统管理员来说,适当的对其它用户授权可以减轻系统管理员负担,但直接授予其它用户root用户密码会带来安全方面的风险,而使用sudo可以解决这一问题。此条目需满足以下要求: 系统中的需要以root帐号执行的自开发程序,可以使用sudo机制避免使用root帐号登录。实施指导:下面看一个完整的例子:$ cat /etc/sudoers为方便对允许使用sudo命令的用户分类,我们可以用户分组:User_Alias NETWORK_ MAINTAINERS=www,com#定义NETWORK _COMMANDS可以运行网络接口配置命令C
20、mnd_Alias NETWORK _COMMANDS = /bin/ifconfig,/bin/ping# NETWORK_ MAINTAINERS用户组可以用 root身份运行NETWORK _COMMANDS中包含的命令NETWORK_ MAINTAINERS localhost = (root) NETWORK _COMMANDS1.1.6 应对允许使用su到root帐号的用户进行明确授权,非授权用户不能切换到root说明:su命令可以使一个一般用户拥有超级用户或其他用户的权限,它经常被用于从普通用户账号切换到系统root账号。su命令为用户变更身份提供了便捷的途径,但如果不加约束的使
21、用su命令,会给系统带来潜在的风险。通过对用户su访问root账户的权力进行限制,仅对部分账号进行su使用授权,可以提高系统账号使用的安全性。此条目需满足以下要求: 需建立su访问组,非组内帐号未无法使用su命令切换到root账号(包括在已知root口令的情况下)实施指导:l 使用pam_limits模块限制su root的访问组例:通过组成员限制能够su为root的用户1) 编辑pam的su配置文件vi /etc/pam.d/su2) 查找auth required pam_wheel.so配置行(若不存在需添加),做如下设置:auth required pam_wheel.so group
22、=wheel3) 保存文件后,根据需要将su授权的账号加入wheel组即可。usermod -a -G wheel testuser这样,只有wheel组的用户可以su到root(执行su的用户仍需要知道root口令,但未被授权的用户即使知道root口令也无法通过su切换为root用户。POSIX 能力(pcap)是一种分散root用户权利的方式,使用POSIX可以对具有特权需求的程序进行授权访问。在需要的时,通过POSIX可以把一项或几项特权赋予需要的程序。因此,POSIX以授予最小的完成工作所需的权限的方式提供一个更安全的选择,坚持了最小权限的安全原则。1.1.7 使用POSIX Capa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 48页 Linux 安全 应用 指导 _V1_1 精编 48
限制150内