页次: 1
我所知道的内核层面关及用户的,只有进程和文件上的uid,euid,owner之类的整数ID而已。
那么用户的登录,密码的检查,这些东西全都是用户空间完成的吗?内核是否提供相关的系统调用呢?如果否,那是否意味着只要改写pam模块,可以制作一个完全不同的用户系统,因为内核只认识一个整数ID?
Systemd是如何做到用户第一次登录之后自动产生systemd用户进程,dbus用户IPC总线,user service的呢?为何Linux能允许用户在多个终端同时登录并且systemd会形成用户session
最近编辑记录 xtricman (2016-11-14 01:01:51)
反社会,精神极其不稳定,随时可能炸碎身边所有人
离线
都是用户态。
是的,你可以自定义登录,比如从 LDAP 取用户数据。Android 的用户就不用 /etc/passwd 文件。
systemd 有 PAM 模块来管理会话。你去掉它就不会形成 systemd 管理的会话(Arch Linux 上 su 和 sudo 不会产生用户会话就是因为它们的 PAM 配置里没有用 pam_systemd.so)。
见 man 8 pam_systemd。
离线
都是用户态。
那么我再问几个事情。
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是怎么登录的。
反社会,精神极其不稳定,随时可能炸碎身边所有人
离线
1.
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 的会话。
离线
Thus, setfsuid() is nowadays unneeded and should be avoided in new applications (likewise for setfsgid(2)).
我不是问这个,我是想问,ffmpeg进程的egid用top看见的明明不是video组,我的用户也不是root,这个进程是怎么写入/dev/fb0的?
反社会,精神极其不稳定,随时可能炸碎身边所有人
离线
那个不是 fsgid。你 man 2 setgroups 及 man 7 credentials 看看。应该是任意一组有权限即可。(这也是为什么将用户添加到新组之后要重新登录才能生效:因为 setgroups 需要 root 权限的登录进程来调用(实际调用的是 initgroups 库函数)。newgrp 程序是有 root 权限的。)
离线
那个不是 fsgid。你 man 2 setgroups 及 man 7 credentials 看看。应该是任意一组有权限即可。(这也是为什么将用户添加到新组之后要重新登录才能生效:因为 setgroups 需要 root 权限的登录进程来调用(实际调用的是 initgroups 库函数)。newgrp 程序是有 root 权限的。)
是我错了,不知道进程有补充组列表的,只要egid跟补充组列表有任意一个gid有权限即可访问文件。
反社会,精神极其不稳定,随时可能炸碎身边所有人
离线
页次: 1