您尚未登录。

#1 2016-11-14 00:53:54

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 1,267

对于Linux内核来说,用户登录意味着什么?

我所知道的内核层面关及用户的,只有进程和文件上的uid,euid,owner之类的整数ID而已。
那么用户的登录,密码的检查,这些东西全都是用户空间完成的吗?内核是否提供相关的系统调用呢?如果否,那是否意味着只要改写pam模块,可以制作一个完全不同的用户系统,因为内核只认识一个整数ID?
Systemd是如何做到用户第一次登录之后自动产生systemd用户进程,dbus用户IPC总线,user service的呢?为何Linux能允许用户在多个终端同时登录并且systemd会形成用户session

最近编辑记录 xtricman (2016-11-14 01:01:51)


反社会,精神极其不稳定,随时可能炸碎身边所有人

离线

#2 2016-11-14 11:17:24

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: 对于Linux内核来说,用户登录意味着什么?

都是用户态。
是的,你可以自定义登录,比如从 LDAP 取用户数据。Android 的用户就不用 /etc/passwd 文件。
systemd 有 PAM 模块来管理会话。你去掉它就不会形成 systemd 管理的会话(Arch Linux 上 su 和 sudo 不会产生用户会话就是因为它们的 PAM 配置里没有用 pam_systemd.so)。
见 man 8 pam_systemd。

离线

#3 2016-11-14 15:39:24

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 1,267

Re: 对于Linux内核来说,用户登录意味着什么?

依云 说:

都是用户态。

那么我再问几个事情。
1. 进程只有一个fsgid,用户却可以属于多个用户组,那怎么决定用户产生的进程的fsgid是哪个组?
我用groups命令输出的第一个组不是video,但是我的用户却能通过ffmpeg写入/dev/fb0,那就是说ffmpeg进程的fsgid是video了?这是如何做到的。
2. SSH远程登陆的时候,systemd是怎么建立用户session的,ssh服务进程不是只是跟client通信然后在本机上产生用户进程吗?ssh也没有配置pam_systemd.so啊,难道是通过dbus与本机上的logind进程通信吗?如果本机上没有logind,也没有consolekit甚至连dbus都没有(很老的系统好像就是这样吧),ssh是怎么登录的。


反社会,精神极其不稳定,随时可能炸碎身边所有人

离线

#4 2016-11-14 16:01:47

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: 对于Linux内核来说,用户登录意味着什么?

1.

man 2 setfsuid 说:

Thus, setfsuid() is nowadays unneeded and should be avoided in new applications (likewise for setfsgid(2)).

2. sshd 支持 PAM,然后 /etc/pam.d/sshd 里包含了 pam_systemd.so。如果没有 systemd 的东西就不会加载 pam_systemd.so 就不会有 systemd 的会话。

离线

#5 2016-11-14 19:19:17

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 1,267

Re: 对于Linux内核来说,用户登录意味着什么?

依云 说:

Thus, setfsuid() is nowadays unneeded and should be avoided in new applications (likewise for setfsgid(2)).

我不是问这个,我是想问,ffmpeg进程的egid用top看见的明明不是video组,我的用户也不是root,这个进程是怎么写入/dev/fb0的?


反社会,精神极其不稳定,随时可能炸碎身边所有人

离线

#6 2016-11-14 19:41:31

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: 对于Linux内核来说,用户登录意味着什么?

那个不是 fsgid。你 man 2 setgroups 及 man 7 credentials 看看。应该是任意一组有权限即可。(这也是为什么将用户添加到新组之后要重新登录才能生效:因为 setgroups 需要 root 权限的登录进程来调用(实际调用的是 initgroups 库函数)。newgrp 程序是有 root 权限的。)

离线

#7 2016-11-14 20:31:41

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 1,267

Re: 对于Linux内核来说,用户登录意味着什么?

依云 说:

那个不是 fsgid。你 man 2 setgroups 及 man 7 credentials 看看。应该是任意一组有权限即可。(这也是为什么将用户添加到新组之后要重新登录才能生效:因为 setgroups 需要 root 权限的登录进程来调用(实际调用的是 initgroups 库函数)。newgrp 程序是有 root 权限的。)

是我错了,不知道进程有补充组列表的,只要egid跟补充组列表有任意一个gid有权限即可访问文件。


反社会,精神极其不稳定,随时可能炸碎身边所有人

离线

页脚