Linux系统裁减之,制作一个极度精简的Linux-4-为精简的Linux 系统增加用户登录功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统裁减之,制作一个极度精简的Linux-4-为精简的Linux 系统增加用户登录功能相关的知识,希望对你有一定的参考价值。

4 为精简的Linux 系统增加用户登录功能

4.1下载mingettylogin程序源码

本文使用的CentOS 5.11的源代码都在官方源码网站http://vault.centos.org可以下载,

http://vault.centos.org/5.11/os/Source/查找mingettylogin程序,如下图:

?技术分享图片


技术分享图片

?

mingettylogin程序分别属于mingetty-1.07-5.2.2util-linux-2.13-0.59.el5_8软件包:

[[email protected] ~]# rpm -qf /sbin/mingetty

mingetty-1.07-5.2.2

[[email protected] ~]# rpm -qf /bin/login

util-linux-2.13-0.59.el5_8

?

4.2使用mingetty为miniLinux打开两个终端并直接运行/binbash

??????????? 红帽Linux在启动过程中执行完/etc/rc.d/rc.sysinit脚本后会根据/etc/inittab的配置运行mingetty实现生成6个终端和图形界面,用户看到的“主机名 logon:“登录提示符就是由mingetty程序抛出的,用户输入用户名和密码后还会通过/bin/login处理。

这里我通过mingetty直接生成两个终端并绕过登录程序直接打开/bin/bash,这些步骤都在源主机(CentOS5lsrv01)做。

1步:修改miniLinux系统下的/etc/inittab文件,修改成以下内容:

[[email protected] ~]# cat /mnt/sysroot/etc/inittab

id:3:initdefault:

si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc.halt

l6:6:wait:/etc/rc.d/rc.reboot

?

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

提示:mingetty有一个参数“--login-prog=/bin/login”,经过验证添加“--login-prog=/bin/bash”是无效的,必须修改minigetty源代码。

?

2步:安装mingetty源代码包,下载的源码rpm包我放在源系统的/root/Softwares/Source/目录下:

[[email protected] ~]# ll /root/Softwares/Source/

total 2892

-rw-r--r-- 1 root root?? 19624 Apr? 9? 2007 mingetty-1.07-5.2.2.src.rpm

-rw-r--r-- 1 root root 2933601 Nov? 9? 2012 util-linux-2.13-0.59.el5_8.src.rpm

[[email protected] ~]# cd Softwares/Source/

[[email protected] Source]# rpm -ivh mingetty-1.07-5.2.2.src.rpm

?

红帽的源码包默认安装在/usr/src/redhat/SOURCE目录下:

[[email protected] Source]# cd /usr/src/redhat/SOURCES/

[[email protected] SOURCES]# ll|grep mingetty-1.07

-rw-rw-r--? 1 root root?? 13435 Nov 17? 2006 mingetty-1.07.tar.gz

?

3步:解压mingetty-1.07.tar.gz并进入mingetty的源码目录:

[[email protected] SOURCES]# tar xf mingetty-1.07.tar.gz

[[email protected] SOURCES]# cd mingetty-1.07

[[email protected] mingetty-1.07]# ll

total 84

-rw-rw-r-- 1 2455 2459 17983 Feb 14? 1996 COPYING

-rw-rw-r-- 1 2455 2459?? 276 May 25? 2003 Makefile

-rw-rw-r-- 1 2455 2459? 3993 Feb 21? 2003 mingetty-0.9.4-autologin.patch

-rw-rw-r-- 1 2455 2459? 2806 May 14? 2003 mingetty.8

-rw-rw-r-- 1 2455 2459 10295 Dec? 2 10:40 mingetty.c

-rw-rw-r-- 1 2455 2459 10264 Jan? 3? 2004 mingetty.c.bak

-rw-r--r-- 1 root root 10672 Dec? 2 10:17 mingetty.o

?

4步:修改 源代码文件mingetty.c实现打开两个终端并直接打开/bin/bash

[[email protected] mingetty-1.07]# vi mingetty.c

??? 此处省略了部分源码…………

??? 53 /* login program invoked */

54 static char *loginprog = "/bin/login";? ?把这行修改成:static char *loginprog = "/bin/bash";????

??? 此处省略了部分源码………………

??? 409 /*????? if (autologin) {??????? */

??? 410 /*????????????? do_prompt (0);? */

??? 411 /*????????????? printf ("login: %s (automatic login)\n", autologin);??? */

??? 412 /*????????????? logname = autologin;??? */

??? 413 /*????? } else? */

??? 414 /*????????????? while ((logname = get_logname ()) == 0)???????? */

415???????????????????????? /* do nothing */ ;

??? 409行到415行全部注释掉

??? 416

??? 417???????? if (ch_root)

??? 418???????????????? chroot (ch_root);

??? 419???????? if (ch_dir)

??? 420???????????????? chdir (ch_dir);

??? 421???????? if (priority)

??? 422???????????????? nice (priority);

??? 423

??? 424???????? execl (loginprog, loginprog, autologin? "-f" : "--", logname, NULL);

??? 425???????? error ("%s: can‘t exec %s: %s", tty, loginprog, strerror (errno));

??? 426???????? sleep (5);

??? 427???????? exit (EXIT_FAILURE);

428 }

?

修改完后保存退出,然后直接编译生成mingetty二进制文件:

[[email protected] mingetty-1.07]# make

gcc -O2 -Wall -W -pipe -D_GNU_SOURCE?? -c -o mingetty.o mingetty.c

mingetty.c:294: warning: ‘get_logname’ defined but not used

mingetty.c: In function ‘main’:

mingetty.c:424: warning: ‘logname’ is used uninitialized in this function

gcc?? mingetty.o?? -o mingetty?生成了mingetty文件

[[email protected] mingetty-1.07]# ll

total 84

-rw-rw-r-- 1 2455 2459 17983 Feb 14? 1996 COPYING

-rw-rw-r-- 1 2455 2459?? 276 May 25? 2003 Makefile

-rwxr-xr-x 1 root root 16122 Dec? 2 12:57 mingetty

-rw-rw-r-- 1 2455 2459? 3993 Feb 21? 2003 mingetty-0.9.4-autologin.patch

-rw-rw-r-- 1 2455 2459? 2806 May 14? 2003 mingetty.8

-rw-rw-r-- 1 2455 2459 10295 Dec? 2 10:40 mingetty.c

-rw-rw-r-- 1 2455 2459 10264 Jan? 3? 2004 mingetty.c.bak

-rw-r--r-- 1 root root 10672 Dec? 2 12:57 mingetty.o

?

5步:把重新编译出来的mingetty文件拷贝到miniLinux/sbin/目录下,并拷贝依赖的库文件:

[[email protected] mingetty-1.07]# cp mingetty /mnt/sysroot/sbin/

[[email protected] mingetty-1.07]# ldd /sbin/mingetty???? ?查看源系统的mingetty依赖的库文件

??????? linux-vdso.so.1 =>? (0x00007fff923d9000)

??????? libc.so.6 => /lib64/libc.so.6 (0x0000003977400000)

??????? /lib64/ld-linux-x86-64.so.2 (0x0000003977000000)

?

利用之前写的拷贝库文件的函数“libcp“完成拷贝库文件的过程:

[[email protected] ~]# cd /root

[[email protected] ~]# source bincp.sh

Input command what you want to copy to miniLinux:q????????? ?直接退出就可以了,目的是获取libcp函数

[[email protected] ~]# [[email protected] ~]# libcp /lib64/libc.so.6

Copy lib file /lib64/libc.so.6 Finished.

[[email protected] ~]# libcp /lib64/ld-linux-x86-64.so.2

Copy lib file /lib64/ld-linux-x86-64.so.2 Finished.

?

6步:修改miniLinux系统中文/etc/rc.d/rc.sysinit文件为以下内容:

[[email protected] ~]# cat /mnt/sysroot/etc/rc.d/rc.sysinit

#!/bin/bash

#

echo -e "\tWelcome to \033[31mMy team \033[0m Linux."

insmod /lib/modules/e1000.ko

ifconfig eth0 192.168.0.91 netmask 255.255.255.0

ifconfig eth0 up

/bin/bash??????????? ?删除原来的这行

?

7步:修改完成,挂起源系统(CentOS5lsrv01),启动过miniLinux系统测试:

技术分享图片


技术分享图片


看到吧,这就是Linux,开源的系统,什么都能按你的意愿修改,前提是你足够了解它!!

?


以上是关于Linux系统裁减之,制作一个极度精简的Linux-4-为精简的Linux 系统增加用户登录功能的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统裁减之,制作一个极度精简的Linux-5-重新编译login去除对pam模块的依赖

Linux系统裁减之,制作一个极度精简的Linux-4-为精简的Linux 系统增加用户登录功能

Linux系统裁减之,制作一个极度精简的Linux-用脚本实现自动拷贝命令和依赖库文件

极度简约 最小 Linux 发行版 Tiny Core Linux 7.1 发布

linux内核编译及系统裁减

制作busybox完成自制Linux系统及远程登录和nginx安装测试