Ant*_*sky 11 login authentication architecture
我试图了解用户权限在 Linux 中是如何工作的。内核init以 root 身份启动,对吗?然后 Init再次以 root 身份运行启动脚本并运行getty( agetty)。Agetty 只是读取用户名并运行login,我认为仍然以 root 身份运行。还没有什么有趣的。但是登录有什么作用呢?我找不到比“它尝试登录”更好的方法了。假设 login 发现密码匹配(并且我们尝试以普通用户身份登录),它如何更改用户 ID?我认为应该有系统调用,但我找不到它(也许我只是瞎了?)
另外,关于su。su设置了“setuid”位,所以当我们运行它时,它总是以 root 身份运行。但是当我们告诉它以普通用户身份登录时,它又需要更改用户 ID。难道我理解正确的话,同样的“神奇”发生在su和login当他们需要改变用户?如果是这样,为什么有两个不同的程序?运行登录时是否有其他类型的严重事务发生?
登录程序的作用有几个部分。登录程序在与尝试登录的用户交互的方式上有所不同。 以下是一些示例:
login: 读取文本终端上的输入su:由已经登录的用户调用,从其命令行参数中获取大部分数据,以及来自终端的身份验证数据(密码)gksu: 类似于su,但读取 X 中的身份验证数据rlogind: 通过rlogin协议通过 TCP 连接获取输入sshd: 通过SSH协议通过 TCP 连接获取输入login,但读取 X 显示上的输入这些程序以类似的方式运行。
第一部分是身份验证:程序从用户那里读取一些输入并决定用户是否有权登录。传统的方法是读取用户名和密码,并检查该用户是否在系统的用户数据库中被提及以及用户输入的密码是数据库中的密码。但还有许多其他可能性(一次性密码、生物特征认证、授权转移等)。
一旦确定了用户有权登录以及使用什么帐户,登录程序就会建立用户的授权,例如用户在此会话中将属于哪些组。
登录程序还可以检查帐户限制。例如,它可能会强制执行登录时间或最大登录用户数,或拒绝某些连接上的某些用户。
最后,登录程序设置用户会话。有几个子步骤:
setuid删除最后但并非最不重要的权限。loginand su,或者sshd如果没有指定命令;X 显示管理器调用 X 会话管理器或窗口管理器)。现在大多数 unice 使用PAM(可插拔身份验证模块)来提供管理登录服务的统一方式。PAM 将其功能分为4 个部分:“auth”包括身份验证(上面的 1)和授权(上面的 2);“帐户”和“会话”同上3和4;还有“密码”,它不用于登录,而是用于更新身份验证令牌(例如密码)。
| 归档时间: |
|
| 查看次数: |
2744 次 |
| 最近记录: |