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

Linux与Unix二大操作系统编程的安全

文章标题:Linux与Unix二大操作系统编程的安全。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类
  在考虑操作系统的继承安全性的时候,有一个常常被忽略了的问题(这到符合微软的口味):如果你为Windows平台编程,那么你的软件就只能够在有限的操作系统、版本和补丁层上运行。而UNIX和Linux则相反,它们包括很多开放源代码、商业,以及政府开发的版本,而且应用程序常常跨很多不同平台自由发布,而这些平台都有相当不同的安全特性。

  由于有些读者只在Windows上工作,所以这里要介绍一下*nix。UNIX和Linux的划分在于其内核以及用户空间上。大多数程序都可以在用户空间里的内核之上运行。刚刚接触Linux的程序员,尤其是有经验的UNIX开发人员,有时候无法意识Linux并不只是是免费版本的UNIX;事实上,两者的确存在一些很大的不同之处。从安全的角度讲,大多数版本Linux都非常相似,因为它们都基于相同的内核和C库。一个显著的不同之处是,Linux对按需动态加载内核模块提供了专门的支持。

  除了UNIX和Linux以上的不同之处,不同版本的UNIX之间也存在很大的安全差别。对于转到UNIX的Linux开发人员来说,这些差别不太明显,但是很重要。例如,有些和UNIX类似的操作系统会进行强制的访问控制,而有的则不会。

  还有一个紧密相关的平台:Free Software HURD宏内核的*nix,它有自己的安全特性。

  有些UNIX平台,其中最显著的是OpenBSD,在进行缺省安装的时候本身就要比其它的操作系统更加安全;如果为它们所写的应用程序还会运行在其他一些版本的UNIX系统上,那么这些应用程序仍然需要实现它们自己的安全特性,并遵照一些好的编程惯例。

  对于开发人员而言,理解线程和进程是尤其重要的。在UNIX的变体里,线程常常会被单独处理,而执行则由系统来计划安排。而在Linux里,进程和线程事实上没有区别。在UNIX里,同一个进程里的线程会共享内存,但是Linux的进程会创建另外的进程,并能够定义哪些资源可以被共享,而哪些不能。Linux的开发人员常常会用到“任务(task)”这个词,而他们事实上是在谈论进程。为了以最安全的方式让应用程序能够被移植,开发人员应该坚持使用标准的线程库。

  特别的,如果你希望应用程序能够被移植,那么就要使用“fork”调用来创建新的进程。要注意,如果可能的话要坚持使用fork,这一点很重要。不要使用“vfork”,它是由BSD开发的一个优化版本的fork(因此被广泛使用),而且出于兼容性的考虑,也被引入了Linux。其原因很简单:vfork会让子进程共享(或者更准确地说,接管)父进程的内存和控件,这会导致子进程和父进程之间的相互冲突。在有些版本的Linux里,vfork在特定情况下会被黑客攻破。

  尽管Windows有这样或者那样明显的和著名的问题,从某种角度上讲,微软的开发人员实现编程安全要相对容易一些,因为他们所工作平台的多样性受到了限制。

  UNIX和Linux的开发人员,尤其是跨平台的开发人员,可能对安全具有特别的敏感性,因为它们的操作系统可能在缺省的条件下就更加安全;但是,不同版本的UNIX之间在安全上有很多的不同,其差别甚至要比UNIX和Linux之间的还要大。它们之间众多的相同特性常常掩盖掉了这些差别,而可移植性的因素则加剧了这些差别。没有哪个Windows下的C或者VBASIC程序员,会认为他的或者她的应用程序会一成不变的只运行在UNIX平台上,或者相反;但是在UNIX/Linux社区内部,要记住,由于应用程序可能会运行在不同的平台上,所以它可能无法运行在相同的安全级别上,这一点很重要。
推荐阅读
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 从高级程序员到CTO的4次能力跃迁!如何选择适合的技术负责人?
    本文讲解了从高级程序员到CTO的4次能力跃迁,以及如何选择适合的技术负责人。在初创期、发展期、成熟期的每个阶段,创业公司需要不同级别的技术负责人来实现复杂功能、解决技术难题、提高交付效率和质量。高级程序员的职责是实现复杂功能、编写核心代码、处理线上bug、解决技术难题。而技术经理则需要提高交付效率和质量。 ... [详细]
author-avatar
王小小小小弦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有