linux的自动登录--理解linux的方式

简介:

今天在一个邮件列表中有朋友问在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,实在很不错。其实所谓的桌面方式启用自动登录也无非就是用的这一套机制,只是细节上有所不同罢了。


 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1273413


相关文章
|
Linux 测试技术
Linux开机以root账户自动登录
最近我们的自动化测试平台需要支持中标麒麟系统,对于我们来说要让这个系统支持分布式自动化测试,最重要的一点就是虚拟机启动后自动以root账户登录系统,并且执行我们的环境配置脚本,那么如何能让它开启自动登录呢? 目前很多Linux版本都是用LightDM作为桌面环境的显示管理器,所以我们只需要对其进行配
601 0
|
Linux 网络安全
linux expect自动登录ssh,ftp
原文出自张映,大牛一个 http://blog.51yip.com/linux/1462.html
936 0
|
测试技术 Linux 网络安全
|
Linux 网络安全 数据安全/隐私保护
linux expect自动登录ssh,ftp
linux expect自动登录ssh,ftp  (2013-07-11 16:58:34) 转载▼ 标签:  文件   程序   第一次   例子   命令   it 分类: Linux expect是一种能够按照脚本内容里面设定的方式与交互式程序进行“会话”的程序。
1213 0
|
Shell Linux 网络安全
Linux ssh密钥自动登录 专题
在开发中,经常需要从一台主机ssh登陆到另一台主机去,每次都需要输一次login/Password,很繁琐。使用密钥登陆就可以不用输入用户名和密码了实现从主机A免密码登陆到主机B(即把主机A的pub密钥--公钥,添加到主机B的~/.
972 0
|
Unix Shell Linux
用了一天的时间,linux下expect实现ssh自动登录服务器记,鄙视下网上各种抄来抄去残段子
因为要对客户方的快30个项目进行特别有顺序的重启,所以不得不想办法写个脚本,网上看了不少段子。真是残缺的可以。没有一段是可以正常运行的。我来按顺序记录一下 脚本的本身 使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄、收藏。
1414 0
|
Shell Linux 网络安全
linux下ssh远程登录/scp远程复制文件/rsync远程同步命令的自动登录
原文出处: http://blog.csdn.net/five3/article/details/8648484 最近需要写一个脚本备份各个服务器上的程序到一个指定服务器上,本来以为查查rsync命令的使用321就能搞定,结果rsync命令要支持自动登录还是要配置服务和参数,又不确定网上说的配置的行不行,因为都是一个样,但是没有说明头尾,所以选择了一个尝试代价较小的ssh自动登录来替代之。
2292 0