您好、欢迎来到现金彩票网!
当前位置:大象彩票app下载 > 改字段名 >

Linux身份鉴别机制技术方案及原理

发布时间:2019-05-27 22:32 来源:未知 编辑:admin

  身份鉴别机制是保护操作系统安全的重要机制之一,是防止恶意用户进入系统的一个重要环节。早期的身份鉴别机制就是传统的UNIX身份鉴别机制,它采用口令加密并与原密码进行对比的方式来对用户身份进行鉴别。但是这种加密方式过于单一,在一个服务中用户的帐号密码泄露会涉及到多个服务的安全性,所以为了增强系统的安全性,出现了许多其他的身份鉴别机制,如指纹认证、认证等。但是这样导致了一个问题,为了应用这些认证机制,就需要重新编写并编译应用程序(如系统登陆服务login)。

  为了解决这个问题,1995年Sun公司的ViPIn Samar和 Charlie LAI提出了PAM(Pluggable Authentication Modules)身份鉴别机制,它采用模块化设计和插件功能,使得系统在更改认证机制时不再需要修改应用程序,极大的提高了认证机制的灵活性。本报告对Linux各用户帐号的权限区别进行了分析,对传统UNIX身份鉴别机制的实现过程进行了研究,重点对PAM身份鉴别机制的实现过程进行了研究与分析,最后通过一个具体的PAM策略演示场景实现了身份鉴别机制的执行过程,研究结果也发现Linux身份鉴别机制是在Linux用户态下实现的,并不涉及内核的具体实现。

  由于Linux身份鉴别机制是在用户态下实现,本报告涉及的源码包括Linux-PAM-1.1.6,openpam和Linux su命令的实现。具体范围说明如下:

  Linux身份鉴别机制就是对请求服务的用户身份进行鉴别,并且赋予相应的权限的过程。本文通过查阅资料,分析Linux系统中对各用户帐号的管理及其权限分配,分析传统的UNIX身份鉴别机制,以su命令的代码实现来进行说明,着重分析PAM身份鉴别机制,并对其代码实现来进行分析说明。

  在Linux系统中,系统设置了多个帐号和组来进行管理,每个帐号都具有不同的权限,例如超级用户root就具有最大的权限,对所有的文件具有读写执行的权限,但是普通用户对某些文件只具有读有时甚至连读的权限都没有。Linux操作系统并不是以帐号名称来识别用户的,而是以标识符UID和GID来辨别用户的,这些帐号的信息都存放在/etc/passwd文件当中,该文件中记录的每个帐号信息是以行来表现的,如下所示:

  每行是以7个字段来描述的,每个字段以冒号来进行分隔,其中对应字段的依次解释如下:

  2. 密码:所有的用户都有对该文件的访问权限,为了防止密码窃取,就将这个字段的密码数据改放到/etc/shadow中了,所以这里显示的是X。

  3. UID:用户标识符,表1-1列出了redhat系统中UID号的限制。

  7. Shell:当用户登录系统后就会取得一个shell来与系统的内核通信以进行用户的操作任务(一个shell可以用来替代成让帐号无法取得shell环境的登录操作/sbin/nologin)。

  /etc/shadow中也是这样的字段,具体字段的意义这里不再做详细解释,这个文件主要是为了增加系统安全性而另外设置用来存放用户的密码,只有root用户才有权限访问,但是为了安全性显示的仍然是加密后的密码。

  系统是通过UID、GID来对不同的帐号进行区分的,但是系统中是如何对应实现具体的权限设置的呢?这里就从文件的权限来进行说明。执行ls -al命令后,结果如图1-1所示。

  每行显示内容分为七列:第一列代表这个文件的类型与权限,第二列表示有多少文件名链接到这个节点,第三列表示这个文件的所有者的帐号,第四列表示这个文件的所属用户组,第五列表示这个文件的容量大小,默认单位为B,第六列为该文件的创建文件日期或者是最近的修改日期,第七列为该文件名。

  1. 第一个字符为[d],表示为目录,为[-]则是文件,为[l]则是链接文件,为[b]则表示设备文件里面的可供存储的接口设备,为[c]则表示设备文件里面的串行端口设备,比如键盘、鼠标等。

  2. 接下来都是以三个字符为一组,一共有三组,且每组都是以“rwx”这样的形式组合,其中[r]代表刻度,[w]代表可写,[x]代表可执行,如果没有该权限则会用[-]来表示。第一组是文件所有者的权限,第二组为同组的权限,第三组为其他非本用户组的权限。这样就把文件的可读属性与不同用户帐号的权限对应起来了。

  传统的UNIX身份鉴别即口令认证方式,它主要通过识别用户的用户名或者UID号获取在/etc/shadow中存放的对应用户密码密文等信息,然后获取用户输入密码并采用crypt()函数对获得的输入密码进行加密,当然加密方式是与原用户密码的加密方式是一致的,然后将这两个密文进行比较,如果一致则通过验证,如果不一致则拒绝赋予权限。接下来以登录Linux系统为例,说明登录过程中传统UNIX认证方式对用户帐号的鉴别过程。Linux用户在登录主机时会出现一个输入账号及密码的界面,Linux会先找寻 /etc/passwd 里面是否有这个账号,如果拒绝用户登录请求,如果有的话则将该账号对应的 UID 、GID、该账号的主目录与shell设定 一并读出,接着就是将用户输入密码进行加密,然后读取/etc/shadow 中存放的密码,将这个密码与用户输入并加密的密码进行核对,如果核对成功,则进入系统。

  Linux 提供getpwnam()来获取用户登录的相关信息,返回的是一个passwd型的结构体,该结构体就包含了用户帐号的各种信息,该结构体如下所示。

  PAM(Pluggable Authentication Modules)即可插拔验证模块,它是一个非常完善的身份验证机制,它采用模块化设计和插件功能,从而可以轻易的在应用程序中插入新的鉴别模块或者替换原来的组件,而不必对应用程序做任何修改,从而使软件的定制、维持和升级更加轻松。PAM 的易用性较强,它对上层屏蔽了鉴别的具体细节,用户不必详细知道各种鉴别机制是如何实现的,它还实现了多鉴别机制的集成问题。

  PAM 为了实现其插件功能和易用性,采取了分层设计思想。就是让各鉴别模块从应用程序中独立出来,然后通过 PAM的API、 SPI作为两者联系的纽带,这样应用程序就可以根据需要灵活地在其中“插入”所需要的鉴别功能模块,从而真正实现了在认证和鉴别基础上的随需应变。PAM框架如下图所示:

  其中的配置文件(etc/pam.d)是由系统管理员来设置的,用以制定认证策略。当应用程序调用 PAM 的API 时,应用接口层按照 PAM 配置文件的定义来加载相应的认证鉴别模块,然后把请求(即从应用程序那里得到的参数)传递给底层的认证鉴别模块,这时认证鉴别模块就可以根据要求执行具体的认证鉴别操作了。当认证鉴别模块执行完相应的操作后,再将结果返回给应用接口层,然后由接口层根据配置的具体情况将来自认证鉴别模块的应答返回给应用程序。

  1.最上层为应用程序层:使用PAM 机制的应用程序(如login、su等),调用PAM接口库的上层接口API来实现认证功能;

  2.中间为应用接口层:连接应用程序和服务模块的中间层,它根据配置文件中的设置加载相应的服务模块,将请求传递到具体的服务模块,向应用程序的开发者提供API使用各种鉴别模块,向鉴别模块的开发者提供SPI来挂载新的鉴别模块;

  3.最下层为服务模块:服务模块中都为动态链接库,它给应用程序提供具体的认证用户服务,应用程序可以使用几个服务模块。PAM所支持的四种任务管理:account 类型表示账户管理,它执行账户管理,它主要用来限制/允许用户对某个服务的访问时间,当前有效的系统资源(最多可以有多少个用户),限制用户的位置(例如:root用户只能从控制台登录);auth类型表示认证管理,对用户进行认证。让应用程序提示用户输入密码或者其它的标记,确认用户的合法性;通过它的凭证许可权限,设定组成员关系或者其它优先权;password类型表示口令管理,用于更新与用户相关的认证特性,如更改用户密码;session类型表示会话管理,用于进入给定的服务之前,或者离开给定的服务之后,需要进行的会话操作,如:存储关于与用户交换数据的log信息、挂接目录等。【3】

  应用PAM的服务例程是通过读取PAM的配置文件初始化pam_handle这个句柄,用来记录整个PAM的过程信息例如服务名、接口传递参数等,定义服务的配置文件存放在/etc/pam.d中,f也是pam的配置文件,该配置文件是老版本的配置文件,目前所安装的版本当中,如果有pam.d这个文件就首要读取这个文件,若没有再读取pam.conf这个文件,另外若所读服务不存在相应配置文件,此时系统会读取other这个配置文件的信息,other这个配置文件是所有服务的缺省选项。pam.d中的配置文件的语法形式如下:

  2.control-flag:控制标志用来设置验证成功或者失败后PAM需要做出的反应,有四个关键词如下所示:

  required:表示即使某个模块对用户的验证失败,也要等所有的模块执行完成,PAM才可以返回错误信息,如此用户就不知道被哪个模块拒绝了。

  sufficient:一旦模块对用户的验证成功,PAM立马返回成功信息,并把控制权交给用户。

  optional:PAM会忽略这个模块所产生的验证错误,继续执行下一个模块。

  4.arguments:传递给模块的参数。参数是可选择的,可以是读取另外配置文件的路径信息,也可以是各种模块所需的传递参数。以下列出pam_unix模块的参数信息:

  pam_conf配置文件的写法与pam.d中的配置文件没有太大的出入,只是在最前面多了一行具体的服务名称,例如login,而pam.d中是将各种模块分开来写,这样更便于控制。

  PAM提供了多种接口函数以供用户使用,其中包括框架API【4】、服务类型的API和服务模块SPI。

  1.认证管理模块通过pam_authenticate()对用户名和密码进行认证,通过pam_setcred()用来修改用户的信任参数,建立数字认证;

  2.账户管理模块通过pam_acct_mgmt()来检查用户本身是否具有权限登录系统、账户是否过期、账户是否有登录时间限制等;

  文章出处:【微信号:LinuxDev,微信公众号:Linuxer】欢迎添加关注!文章转载请注明出处。

  课程从0开始,讲到云计算结束,按阶段授课,从入门到跑路,适合初学者,也适合定制,需要哪个模块学哪个模块2,包含初级运维工

  课程从0开始,讲到云计算结束,按阶段授课,从入门到跑路,适合初学者,也适合定制,需要哪个模块学哪个模块2,包含初级运维工

  Linux调度器中的PELT(Per-Entity Load Tracking)

  完美的调度算法需要一个能够预知未来的水晶球:只有当内核准确地推测出每个进程对系统的需求,她才能最佳地....

  对于Android开发者来说,基本不用关心图形方案这些细节,你只要调用java的class,最后的性....

  我正在使用linux驱动程序连接到34410A。我的代码(在perl中)看起来像这样。 我的$ echoresult =`echoSAMP:SOUR TI...

  本文档的主要内容详细介绍的是Linux操作系统基础教程资料免费下载包括了:1.Linux简介,2.各....

  有没有人尝试使用USB接口从嵌入式Linux设备访问iNEMO板?我能够从我的设备为iNEMO供电,并且还能够加载usb-serial驱...

  第三期 项目1中 第一课 第2.2节中 韦老师试验用的环境 编译内核需要使用arm-linux-gcc-4.3.2 否则编译内核时会出...

  最近一直断断续续的学习驱动和内核的相关知识,就我个人来说 有android开发实际经验,但是,开发久了,发现UI层挺没有意思的,...

  RADIUS的全称为Remote Authentication Dial-In User Servi....

  人工智能领域的同学应该对当前最火的开源框架TensorFlow并不陌生,但余凯(原百度研究院副院长、....

  本文档的主要内容详细介绍的是Linux Shell脚本编程基础和相关资料合集免费下载。

  华为事件已经发酵了将近一周的时间,随着事态的变化,华为不得不做出许多对于公司起到决定性的决策。

  实验设备:JZ2440 uboot: 1.6 , 手动更新内核分区4M 内核: 打完补丁后的3.4内核, 也手动更新common-smdk.c 的内核分区4M, ...

  大家好。 抱歉打扰你。 我已经构建了一个基于Spartan3E 1200,16 MB Numonyx闪存和64 MB Micron ram(2 x MT48LC32...

  ADC的采样速率有1M但是analogyread的速率只有100,导致采样速率只有100,有什么方法能把采样速率提上去啊,有没可能通过修改...

  使用的是 UBUNTU8.04版本,按照26页的方法安装,出现下列问题 : :/work/tools/ncurses-5.6$ make install ...

  随着信息技术的发展, 当今社会的信息量越来越大, 以往由单片机构成的系统简单地对存储媒介按地址、按字....

  做为一个运维工程师,你必须掌握最基本的技能方能胜任这份工作,否则,是没有公司愿意接纳你,并继续培养你....

  现在的运维工程师在大家眼中是个什么样子呢? 是不是还是把服务器搬来搬去,每天不是在拿着Linux光盘....

  我目前使用的编译器是arm-linux-gcc 3.4.5,可以用来编译u-boot 1.1.6 我编译裸机程序同样使用3.4.5,当用到除法时候提示__umo...

  随着通信技术和网络技术的迅猛发展,通过网络远程实时监控重要场所已倍受人们关注,网络摄像机在此背景下产....

  近年来,随着多媒体技术、计算机网络与通信技术的的快速发展,传统的监控系统也不断向着新的发展方向进行着....

  嵌入式系统EOS (Embedded OperatingSystem)是以应用为中心,以计算机技术为....

  基础部分需要学习的内容很多,本宝典不仅简明扼要地介绍了开源Linux软件的结构,并且展示了如何摒弃笨....

  很多做单片机开发的工程师因为各种原因可能要 学习 Linux ,但是很多人刚开始却无从下手 或者中途....

  本文档的主要内容详细介绍的是嵌入式Linux开发教程之嵌入式系统介绍资料免费下载包括了:1.了解嵌入....

  面向过程(pop)和面向对象(oop)是什么 1. pop(Process-oriented p....

  树莓派(英语:Raspberry Pi),是一款基于Linux的单片机电脑。它由英国的树莓派基金会所....

  对于PMEM设备来说,它的访问延迟已经和内存接近了,为什么还需要内存中的page cache呢?

  Rocke是专门从事门罗币(Monero)挖掘业务的顶级黑客组织。去年年底,自新黑客组织Pacha崛....

  你已经是大四,就不要照着大一的方式设计“精通C语言”的学习路线了。第一你学过C语言,又学过了一堆的专....

  各位朋友大家好,今天是我第一次写博客,我的叙述能力不是很好,希望大家见谅。今天我来给大家谈谈嵌入式开....

  在学习嵌入式Linux之前,肯定要有C语言基础。汇编基础有没有无所谓(就那么几条汇编指令,用到了一看....

  Deck的强项之一就是它既能作为传统的图形用户界面的桌面系统使用,又能用于渗透行动的投置机,而且还能....

  随着人们对开放源代码软件热情的日益增高,Linux作为一个功能强大而稳定的开源操作系统,越来越受到成....

  说到LINUX 驱动移植,没有移植过的朋友,或刚刚进入LINUX领域的朋友,最好去看看《LINUX ....

  随着人们对开放源代码软件热情的日益增高,Linux作为一个功能强大而稳定的开源操作系统,越来越受到成....

  自己感觉前段时间的学习,一直是东一榔头,西一棒子,所以决定听“赵磊”大哥的话:这个世界太浮躁,需要静....

  是时候给出一个总的图景了,是时候了。我的意思是说,为什么非要将OpenVPN移植到内核,而不是在用户....

  这是先进先出的实时进程。当调度程序把CPU分配给进程的时候,它把该进程描述符保留在运行队列链表的当前....

  很多同学接触Linux不多,对Linux平台的开发更是一无所知。而现在的趋势越来越表明,作为一个优秀....

  1.核心控制板:raspberry b+(树莓派B+):一种卡片式电脑。树莓派是只有信用卡大小的卡片....

  本文简要介绍了ARM处理器的特点及其基本结构,详细论述了基于ARM的嵌入式linux系统的关键技术,....

  虽然Linux发行版支持各种各样的饿GUI(graphical user interfaces),但....

  其实在Linux操作系统中,磁盘管理机制和windows上的差不多,绝大多数都是使用MBR(Mast....

  UCloud基于Linux内核新特性的下一代外网网关设计及相关开源工作

  Nftables是一种新的数据包分类框架,旨在替代现存的{ip,ip6,arp,eb}_tables....

  《Linux操作系统分析与实践》简要介绍操作系统的定义、功能、特性,以及发展历史、分类、内核结构,阐....

  一个服务器是以虚拟机的形式提供的,通过df -h看服务器磁盘空间只有30多个G,但通过fdisk -....

  天雷滚滚。天雷滚滚。天雷滚滚。作为一个Linux程序员,你能碰到的最伤心的事情,莫过于:编译了一整天....

  基于最新的Linux 4.0内核Linux设备驱动开发详解Linux设备驱动开发详解PDF电子书免费下载

  Linux从未停歇前进的脚步。Linus Torvalds,世界上最伟大的程序员之一,Linux内核....

  本文档的主要内容详细介绍的是JZ2440开发板使用手册资料免费下载包括了:第1章 嵌入式Linux开....

  这是一本介绍Linux设备驱动开发理论、框架与实例的书,Linux设备驱动开发详解基于LDD6410....

  讲授MATLAB语言基础入门知识,介绍MATLAB产品的体系、MATLAB桌面工具的使用方法,重点介....

  OpenCV(Open Source Computer Vision Library) 由公司在背后....

  docker是linux容器的一种封装,提供简单易用的容器使用接口。它是最流行的Linux容器解决方....

  Linux内核精髓精通Linux内核必会的75个绝技PDF电子书免费下载

  内核是操作系统的核心,操作系统的基本功能都是由内核提供的。文件生成和数据包传输等也是通过内核的功能实....

  值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常....

  目前,Linux作为嵌入式系统的主力军,广泛应用于消费类电子、工业控制、军工电子、电信/网络/通讯、....

  前面我们对按键驱动的开发已经基本完成了,但是当你对按键多次按下的时候,你会发现打印的返回值是不正确的....

  AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)

  TI AM437x高性能处理器基于ARM Cortex-A9内核。 这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)。基于Linux的® 可从TI免费获取。其它HLOS可从TI的设计网络和生态系统合作伙伴处获取。 这些器件支持对采用较低性能ARM内核的系统升级,并提供更新外设,包括QSPI-NOR和LPDDR2等存储器选项。 这些处理器包含功能方框图中显示的子系统,并且后跟相应的“说明”中添加了更多信息说明。 处理器子系统基于ARM Cortex-A9内核,PowerVR SGX图形加速器子系统提供3D图形加速功能以支持显示和高级用户界面。 可编程实时单元子系统和工业通信子系统(PRU-ICSS与ARM内核分离,允许单独操作和计时,以实现更高的效率和灵活性.PRU-ICSS支持更多外设接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太网Powerlink,Sercos,EnDat等...

http://dpi-berlin.net/gaiziduanming/345.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有