我正在阅读APUE,它一直在引用该login
程序,但我仍然不知道它在我的操作系统(Ubuntu)中做了什么。
§8.11:
通常情况下,真正的用户 ID 是
login(1)
在我们登录时由程序设置的,并且永远不会更改。因为login
是超级用户进程,所以在调用setuid的时候设置了所有三个用户ID
ps aux | grep login
:
root 840 0.0 0.0 70732 6120 ? Ss 15:13 0:00 /lib/systemd/systemd-logind
root 1120 0.0 0.0 419680 9468 ? Sl 15:13 0:00 gdm-session-worker [pam/gdm-autologin]
tianhe 1151 0.0 0.1 445184 20540 ? SLl 15:13 0:05 /usr/bin/gnome-keyring-daemon --daemonize --login
tianhe 10838 0.0 0.0 21536 1060 pts/0 S+ 21:50 0:00 grep --color=auto login
login
简而言之,该程序为操作系统提供了哪些功能?
在什么情况下使用或运行?
顺便说一句,与之login
相比如何ssh
?
这不是您交互式运行的命令。
—login
手册。IBM AIX 7.2它曾经是。早在 1980 年代,这将起作用,C-shell 用户甚至有一个方便的
login
内置命令,该命令将exec
外部login
程序覆盖 shell 进程与该程序,该程序设置为超级用户的 UID。但是现在的操作系统不像 1980 年代的 BSD 那样工作。登录会话(顺便说一下,这是正在讨论的会话类型)为它经历了太多的单向陷门(用户安全上下文、控制组、更改的 UID“污点”标记、AIX
setsenv
等等)从已经处于用户登录会话中的进程为任意用户正确启动新登录会话是可行的。无论如何,由于 1990 年代 PAM 的出现,将与新
login
程序重叠的 shell 进程不再像 1980 年代那样是树中最顶层的进程。它现在是一个监督过程的子进程,它正在执行 PAM 会话设置和拆卸。这就是为什么“dæmonization”是一个谬误的原因,这就是为什么
login
在现有登录会话中运行并不明智。它是一个系统程序。
login
由终端登录服务调用,通常是在服务或服务管理基础设施设置了一些环境变量后,打开终端设备并初始化/推送线路规程,将其设置为控制终端,并用一些初始化终端控制序列。ttymon
服务访问设施的一部分管理。今天,您仍然可以在 OpenSolaris 及其衍生产品(例如 Illumos 和 Schillix)上看到这些内容。autovt@something
getty@something
getty
login
ttylogin@something
/etc/ttys
表生成的。如果您在虚拟终端或真实终端上登录,则会
login
提示您输入密码,可能还会提示您输入用户名,然后继续调用您的交互式登录 shell。login
不被 SSH 登录使用。GUI登录也不使用它。这两者的操作方式不同,使用其他程序。login
期望与具有文本用户界面的终端交谈。旧的 Berkeley rlogin 系统使用它,但现在您不应该使用它。对所谓的伯克利“r-”命令的进一步讨论超出了这个答案的范围。因此,我只想说,这是 1980 年代不再采用的其他方式。
进一步阅读
getty
从中产生的init
已成为过去。. 经常给出答案。您可能会登录到一个窗口会话,在这种情况下,显示管理器
xdm
,gdm
,kdm
... 会让您登录。但是还有其他登录方式。例如,通过我们可以使用的网络(正如您所指出的)ssh
。如果我们在本地登录,但没有进入窗口系统,那么我们需要一个不同的登录程序。这就是登录的用武之地。尝试按ctrlaltf1,登录,然后查看正在运行的进程。什么让你登录。