热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

让Linux更安全——安全含义的思考

文章标题:让Linux更安全——安全含义的思考。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  安全的定义
  安全是当今 IT 相关头条新闻的一个重要话题。经常出现的系统漏洞和安全补丁以及病毒和蠕虫是每个使用计算机的人都耳熟能详的名词。因为几乎每台计算机系统都连接到另外的计算机或者连接到 Internet,因此确保这些计算机的安全,对于减少入侵、数据窃取或丢失、误用甚至对第三方的责任而言是至关重要的。
  
  确保安全即使对于没有连接到网络的独立的计算机也是很重要的。必须自可信赖的来源安装应用程序,比如经过验证的并检查过病毒的光盘。对应用程序数据也必须同样小心。例如,对于可以执行强大的宏语言或者引入非法数据的软件程序包(office 套件等等),其软件缺陷可能会被利用来执行任意的代码。因此,应用程序数据在拷贝到计算机之前必须经过完整性检查。可以通过将数据放置在一个安全的地方来控制对系统的访问(当然,不考虑来自已授权人员的攻击)。
  
  当系统连接到网络并向其他计算机提供服务(有意地或无意地)时,事情会变得更为棘手。在那种情况下,数据可能不只是来自系统管理员,因为客户机程序要使用所提供的服务,而系统漏洞可能会让入侵者控制计算机。
  
  这就是为什么安全是从开始计划直到拆除系统的整个系统生命周期中最基本的问题。但是,安全的确切含义是什么?
  
  通常,数据安全和系统安全可以分开来考虑。 数据安全 通常被认为是确保以下方面的所有努力:
  
  机密性(Confidentiality)。
  完整性(Integrity)。
  可用性(Availability)。
  
  综合起来,这些被称作是存储在计算机上的数据的“CIA”。对 /etc/passwd 等配置数据的保护可以归类为数据安全。系统安全 指的是计算机平台本身。美国 National Information Systems Security Glossary(参阅 参考资料 以获得链接)对系统安全的定义如下:
  
  系统安全。对信息系统的保护,防止未授权的访问及对信息(不论是存储中的、正在处理的还是正在传输的)的修改,并防止对授权用户服务的拒绝或对未授权用户服务的允许,包括那些检测、记录和反击此类威胁的措施。
  
  重要的是要认识到系统安全强调的是一个反复的过程,这个过程包括应用安全补丁、经常审计、控制,同时最起码要有一个安全的系统配置。就此而言,不可能保证绝对的安全,也不可能提供百分之百安全的服务。目标更应该是在安全性、系统可用性和维护这个安全层级所需要的努力这三者之间找到一个折衷点。这个折衷取决于安全对于存储在计算机中的数据来说的重要性以及这些数据预期的使用情形(阅读 Bruce Schneier 的 Secrets and Lies,John Wiley & Sons,2000;参阅 参考资料 以获得链接)。
  
  完整性
  具备 完整性 的数据是指合法的而且没有经过偶然的或恶意的修改。当进行数据存储或交换时应该考虑其完整性。目标接收到的数据必须是源数据的原样拷贝。这就是说,一方面,物理传输和存储媒介必须是可靠的,以使得数据可以正确地传输而不发生位错误。另一方面,数据必须不能被未经授权的实体不加检测地访问而修改。完整性的范围是从用户 —— 最终的权威 —— 将数据委托给系统后开始的。因此用户错误不在完整性范围之内。
  
  对网络连接而言,要尤其注意确保完整性,不管网络是否安全(例如,通过加密传输)。在传输过程中,可以访问传输媒介的第三方可能会重新路由或者修改数据。涉及网络的物理环境和互联的计算机的完整性的方面并不特定于 Linux,而是对所有计算机安装来说都是如此;因而这也超出了本文的范围。无论如何,除了其他方法之外,在物理层上采取的保护数据的措施包括,限制对计算机的访问、保持对传输媒介(比如电缆和连接器)的保护,以及避免停电和静电释放(阅读“Building the Ideal Web Hosting Facility: A Physical Security Perspective”,参阅 参考资料 以获得链接)。
  
  本系列文章将集中关注加密和签名等在操作系统和应用程序环境中采取的措施,以积极地确保完整性。本文还将关注审计机制,以识别完整性的缺失并确定应对此负责的当事人。
  
  机密性
  当受保护的数据只能被授权的人或系统读取或者修改时,要保持其 机密性。这是一个与完整性截然不同的概念:当数据在网络上传输时,它可能是被毫无修改地正确传输,因此确保了其完整性,但是如果被第三方中途截取的话就再也不是机密的了。当未被授权的人可以访问数据传输并从中获取有价值的信息时,只有完整性是不够的。数据的机密性引出了三个更深入的问题:
  
  谁希望访问数据?(认证)
  哪些数据可以被访问?(授权)
  如何保护数据不受未授权的访问?
  
  Linux 有若干方法可以确保试图访问数据的实体是其所宣称的那一个。通过 Pluggable Authentication Modules(PAM),您可以实现一些认证策略,从存储在本地机器上一个集中目录(NIS、Kerberos、LDAP 等等)中简单的用户名/口令组合,到硬件标识或生物特征扫描不等。文件访问的授权可以使用传统的(粗糙的)UNIX 文件权限来解决:用户、组或全体级别的读、写和执行权限。较新的细粒度的(fine-grained)方法 —— 访问控制列表(Access Control Lists)—— 让您可以为具体的用户授予或拒绝具体的权限。
  
  标准 Linux 安全概念是在软件中实现的,依赖于内核不接受没有被授权的用户对资源的使用。不过,内核缺陷(特权提升/自动调整、未经检查的参数,等等)可能会使用户可以访问先前不能访问的内存区域、磁盘空间、网络或者其他资源。通过安装击键记录器(keyloggers)、取走硬盘驱动器并在其他机器中读取、嗅探网络传输等等,对硬件物理上的访问可以让用户绕过软件检查。这样,必须采取更进一步的努力来保护机密的数据,比如文件系统、单个文件、网络传输的加密,和/或应用程序级别的加密。此外,物理上的措施也需要考虑,比如安全区域、数据的安全删除,以及机密信息的会计程序,不过本文并不涉及这些。
  
  可用性
  即使完整性和机密性都得到了保证,如果数据不能被访问,那么它是没有用处的,即不可用的。 可用性 措施确保数据永远不会丢失,而且当被请求时,可以以预定义的性能级别被访问。可用性可能会受到不同方式的威胁:
  
  破坏性攻击 —— 称为拒绝服务(Denial-of-Service,DoS)攻击 —— 这类攻击的目标是可用性。它们通过消耗所有可用的网络、CPU、存储或操作系统资源(比如文件句柄),使得一台计算机或一个服务不可用或不能用。
  目标是数据本身的攻击,试图删除或覆盖数据。
  数据的意外破坏。在大部分情况下,不可能避免对数据的意外破坏,因为拥有适当权限的用户被认为是最终的权威。您只能通过在适当的位置使用一个备份/转储基础设施来预先做好准备。
  最后,但不是最不重要的,缺陷、配置错误、物理环境、硬件失败、停电、不必要的系统重新引导等等,也都可能影响可用性。这个列表中的软件相关话题更应该归入 系统安全,稍后将更深入讨论。如上所述,硬件相关的话题在本文中不做讨论,但是,如果您对这些话题感兴趣,请参阅 参考资料 部分以获得更多读物的链接。
  
  解决上面列表中的前两个问题的特定 Linux 措施包括,网络数据包的防御(firewalling)/过滤(filtering ),对文件系统完整性的保护,以及计划可根据需要进行添加的额外的资源(例如,使用 Tivoli® Intelligent Orchestrator;参阅 参考资料 以获得链接)。
  
  Linux 系统安全
  Linux 是一个现代的、开放源代码的操作系统,可以自由地发行和拷贝。每个用户都有权限修改它的源代码,易于为您自己的环境定制 Linux、向操作系统添加新部件、发现缺陷和提供补丁,以及检查源代码中的安全漏洞。
  
  尽管数据安全和系统安全是分开来考虑的,但是系统安全会对数据安全产生主要的影响。这就是为什么 Linux 具有很多解决机密性、完整性、可用性以及系统安全本身的问题的集成部件的原因。其中有 IP 防御、认证机制、系统日志和审计、加密协议和 API、内核级 VPN 支持,等等。另外,系统安全可以由(开放源代码)软件应用程序来支持,这些应用程序提供安全服务、加固和/或控制 Linux 系统、防止并检测入侵、检查系统和数据的完整性,并提供防止不同攻击的屏障。
  
  安全的一个值得关注的主要因素是,Linux 与不开放源代码的操作系统之间的区别在于开放源代码开发过程本身。由于软件的每个用户和开发都可以访问其源代码,因而有很多人都在控制和审视源代码中可能的安全漏洞。软件缺陷很快会被发现。一方面,这会导致这些缺陷更早被利用;另一方面,很快就会有可用的安全补丁。
  
  结束语
  考虑其可靠性、稳定性、可扩展性、可管理性、性能,以及最后但不是最不重要的一点,它的安全部件, Linux 已经证明适合专业的企业应用程序。由于它的开放源代码哲学让用户可以为满足具体的需要而定制和扩展系统,Linux 变得越来越流行。因此,Linux 系统管理员需要理解加固 Linux 并保护它不受可能攻击的安全机制。本系列的下一篇文章将讨论获得安全的 Linux 系统的第一个步骤:计划和执行安装。
推荐阅读
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文主要讨论了在xps15上安装双系统win10和MacOS后,win10无法正常更新的问题。分析了可能的引导问题,并提供了解决方法。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
author-avatar
手浪用户2602890531
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有