linux的自动登录–理解linux的方式_inittab getty后无登录

今天在一个邮件列表中有朋友问在linux下如何做到自动登录,就是不用输入用户名和密码,我的回答是在桌面上进行设置,然后那位朋友就学会了并且很高兴,我敢肯定他是windows的下的老用户...

仅仅知道如何设置自动登录实在不够,自动登录不是linux的风格,我敢肯定如果不是在拥有桌面的linux下,在黑屏的命令行下是很少有人使用自动登录的,linux的一个意义就是网络,而网络的环境就是不安全,自动登录就是不安全,因此自动登录和linux的大环境是格格不入的。桌面设置自动登录十分简单,无非就是和windows一样的点几下鼠标而已,但是在这简单操作的背后却再一次揭示了linux的灵活和安全。

以拥有运行级别概念的发行版RedHat为例,如果换成在运行级3下设置自动登录,相信会难倒一批英雄好汉的,并不是这些英雄好汉们不会,而是他们实现想不通为何这么做,一般意义上用命令行的都是高手,用GUI的很多都是刚刚入门的新手,偶尔设置一下自动登录怀念一下windows也没有什么不可。如果在命令行设置自动登录,并且直接用root登录的话,这是最简单的了,因为linux启动时就是以root用户启动的,如果不以root启动,那么很多守护进程的配置文件以及一般守护进程本身是没有权限读取和执行的,因此这种情况下如果想设置自动登录,直接把/etc/inittab里面的getty换成 bash即可,不过如果想做的更加像那么回事,那就要自己写一个程序,该程序可以为elf文件也可以是脚本,只要在程序中设置一下 HOME,SHELL,USER,LOGNAME这几个环境变量即可,因为这和shell的提示符有关,在程序的最后执行shell就可以了,记着一定执行shell,因为在执行到登录之前,系统是没有shell的,要想和系统交互必然要有一个shell。有人可能会有疑问,如果可以如此简单的靠修改一个 inittab启动配置文件就可以直接以root自动登录,那系统不是太不安全了吗?是的,就是这么回事,不过请问,你如果不是root权限你能修改 inittab吗?如果你本来就是root,那么有必要再设置一个自动登录以证实些什么吗?如果你真的这么做了,那么我可以告诉你,任何事情都证实不了,而只会自己在你的系统上敲开一个大洞,正如我的前面的几篇文章所述,linux不会阻止你做任何事情,只要你有权限,因此linux就比较难以驯服,不过这也是它很强大的原因。

如果你想以非root用户自动登录,那么就要费一番工夫了,因为非root用户意味着安全性提高了,从不安全的系统启动时默认的root到安全的非 root是需要做功的,这是一个真理。linux提供了一个接口可以得到任何用户的一些配置,比如uid,gid等等,该配置的结构如下:

struct passwd {

char *pw_name; //用户名

char *pw_passwd; //密码

uid_t pw_uid; //用户id(uid)

gid_t pw_gid; //组id (gid)

char *pw_gecos; //名字

char *pw_dir; //用户目录

char *pw_shell; //该用户的shell程序

};

得到该结构的接口就是:

struct passwd *getpwnam(const char *name); //name就是用户名

当然这个接口程序谁都有权调用,其实这个接口并没什么,它所做的仅仅是一个封装而已,它其实就是读取/etc/passwd文件,然后找到和name对应的那一行,然后把该行的其它信息取出来,执行完这个接口会发现返回结果的pw_passwd字段是x,说明真正的密码在/etc/shadow中加密保存,你完全可以不用这个接口而是自己去解析/etc/passwd文件,得到了uid和gid后就可以切换用户了,其实很简单,就是在为控制台和终端设置好uid及gid后将当前进程的uid和gid也设置成结果的uid和gid,然后直接exec一个shell,该shell就是你要自动登录的用户的 shell,在该shell上whoami一下试试看。当然如果想让shell的提示符看起来像那么回事,就也和前面一样设置一下环境变量即可。

看到这里就会发现,只有root才可以设置uid和gid从而切换用户,非root用户是没有办法直接通过设置uid和gid的方式来切换用户的,必须用系统提供的su等标准接口来切换,在启动启动的时候系统就是root,如此一来可以通过这种方式随意切换用户达到自动登录的目的。root可以不通过密码验证直接登录别人的非root用户,这并不奇怪,谁让root是至高无上的呢?之所以可以做到这么随意这么简单,还是受到了linux的进程架构的恩惠,子进程可以继承父进程的uid和gid,实在很不错。其实所谓的桌面方式启用自动登录也无非就是用的这一套机制,只是细节上有所不同罢了。

原文链接: https://blog.csdn.net/dog250/article/details/5303658

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    linux的自动登录--理解linux的方式_inittab getty后无登录

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/409994

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月26日 上午11:45
下一篇 2023年4月26日 上午11:45

相关推荐