前言

上一篇博客中,我们的小linux又增加了网络功能,下面我们继续增加终端登录信息显示、用户登录界面、用户登录、用户认证 …… ^_^ !

1. 用户认证

使用不依赖与PAM的login程序 (已经编译好的),系统上的login的编译是依赖于PAM的,这里的login程序,去掉了对PAM的依赖,可以单独利用!(login 文件见附件!!!)

1)、复制 nsswitch 相关文件

nsswitch:Network Service Switch网络服务转换是一个协议框架,定义了login读取相关配置文件的位置:/etc/psaawd /etc/shadow /etc/group,nsswitch的配置文件在/etc/nsswitch.conf,而nsswitch的运行则依赖一些库文件:/lib/libnss*、/usr/lib/libnss*!

注意:复制库的时候必须保留库的连接:cp –d

[root@localhost ~]# cp -d /lib/libnss_files*  /mnt/sysroot/lib
[root@localhost ~]# cp -d /usr/lib/libnss_files.so/mnt/sysroot/usr/lib/
[root@localhost ~]# mkdir /mnt/sysroot/usr/lib  
[root@localhost ~]# cp -p /usr/lib/libnss3.so /usr/lib/libnssckbi.so /usr/lib/libnssutil3.so /mnt/sysroot/usr/lib/
[root@localhost ~]# cp -d /lib64/libnss_files*  /mnt/sysroot/lib64
[root@localhost ~]# cp -d /usr/lib64/libnss_files.so/mnt/sysroot/usr/lib64/
[root@localhost ~]# mkdir /mnt/sysroot/usr/lib64  
[root@localhost ~]# cp -p /usr/lib64/libnss3.so /usr/lib64/libnssckbi.so /usr/lib64/libnssutil3.so /mnt/sysroot/usr/lib64/

2)、复制并修改 nsswitch 配置文件

[root@localhost ~]# cp -p /etc/nsswitch.conf /mnt/sysroot/etc/  
[root@localhost ~]#
[root@localhost ~]# vim /mnt/sysroot/etc/nsswitch.conf
#只保留以下内容
passwd:     files  
shadow:     files   
group:       files   
hosts:       files dns

3)、创建用户、密码、组

[root@localhost etc]# grep -E "^root\>" /etc/passwd > /mnt/sysroot/etc/passwd
[root@localhost etc]# grep -E "^root\>" /etc/shadow > /mnt/sysroot/etc/shadow  
[root@localhost etc]# grep -E "^root\>" /etc/group> /mnt/sysroot/etc/group
[root@localhost ~]# grep -E "^root\>" /etc/gshadow >/mnt/sysroot/etc/gshadow

4)、移植相关命令

[root@localhost ~]# sh addcom.sh  
Your command: mingetty   
/sbin/mingetty   
copy /sbin/mingetty finished.   
Continue:  useradd    
/usr/sbin/useradd   
copy lib64 /lib64/libaudit.so.0 finished.   
copy /usr/sbin/useradd finished.   
Continue:  usermod
/usr/sbin/usermod   
copy /usr/sbin/usermod finished.   
Continue:  passwd   
/usr/bin/passwd   
copy lib64 /usr/lib64/libuser.so.1 finished.   
copy lib64 /lib64/libgobject-2.0.so.0 finished.   
copy lib64 /lib64/libgmodule-2.0.so.0 finished.   
copy lib64 /lib64/libglib-2.0.so.0 finished.   
copy lib64 /usr/lib64/libpopt.so.0 finished.   
copy lib64 /lib64/libpam_misc.so.0 finished.   
copy lib64 /lib64/libpam.so.0 finished.   
copy /usr/bin/passwd finished.   
Continue:  groupadd   
/usr/sbin/groupadd   
copy /usr/sbin/groupadd finished.

5)、修改 inittab 文件

[root@localhost ~]# vim /mnt/sysroot/etc/inittab
1:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty1  
id:3:initdefault:   
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0  
l3:3:wait:/etc/rc.d/rc 3   
l6:6:wait:/etc/rc.d/rc 6
#删除下面两行
1:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty1  
2:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty2
#增加下面两行
1:2345:respawn:/sbin/mingetty tty1  
2:2345:respawn:/sbin/mingetty tty2

6)、下载一个编译好、不依赖PAM认证的login到bin下,并给其执行权限

[root@localhost ~]# cd /mnt/sysroot/  
bin/        dev/        half/       lib/        lost+found/ remkdir/    sbin/       sys/        usr/      
boot/       etc/        home/       lib64/      proc/       root/       source/     tmp/        var/      
[root@localhost ~]# cd /mnt/sysroot/bin/   
[root@localhost bin]# ls   
basename  bash  df  hostname  login  ls  mkdir  mount  ping  rm  sh  sleep  sync  tar  touch  umount   
[root@localhost bin]# chmod +x login   
[root@localhost bin]# ls   
basename  bash  df  hostname  login  ls  mkdir  mount  ping  rm  sh  sleep  sync  tar  touch  umount   
[root@localhost bin]#

7)、终端登陆信息:(用户登陆的时候才会显示) /etc/issue内的内容,是通过终端来进行打印的,里面各式使用转移字符

[root@localhost ~]# cp /etc/issue /mnt/sysroot/etc/  
[root@localhost ~]# vim /mnt/sysroot/etc/issue
freeloda little linux !  
Kernel \r on an \m   
http://freeloda.blog.51cto.com/

8)、设定内核参数

[root@localhost etc]# vim /mnt/sysroot/etc/sysctl.conf #直接编辑文件添加一行代码即可  
net.ipv4.ip_forward = 1
[root@localhost etc]# vim /mnt/sysroot/etc/rc.d/rc.sysinit #添加以下内容  
sysctl -p &> /dev/null
[root@localhost ~]# sh addcom.sh #移植相关命令  
Your command: sysctl   
/sbin/sysctl   
copy lib64 /lib64/libproc-3.2.7.so finished.   
copy /sbin/sysctl finished.   
Continue:  id   
/usr/bin/id   
copy /usr/bin/id finished.   
Continue:  q

9)、移植 login 相关库文件

[root@localhost ~]# ldd /bin/login  
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002b461e61c000)  
        libpam.so.0 => /lib64/libpam.so.0 (0x00002b461e854000)  
        libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00002b461ea5f000)  
        libaudit.so.0 => /lib64/libaudit.so.0 (0x00002b461ec63000)  
        libc.so.6 => /lib64/libc.so.6 (0x00002b461ee7b000)  
        libdl.so.2 => /lib64/libdl.so.2 (0x00002b461f1d2000)  
        /lib64/ld-linux-x86-64.so.2 (0x00002b461e3ff000)  
[root@localhost ~]#
[root@localhost ~]# cp  /lib64/libcrypt.so.1 /mnt/sysroot/lib64/
[root@localhost ~]# cp  /lib64/libpam.so.0 /mnt/sysroot/lib64/
[root@localhost ~]# cp  /lib64/libpam_misc.so.0 /mnt/sysroot/lib64/
[root@localhost ~]# cp /lib64/libaudit.so.0 /mnt/sysroot/lib64/
[root@localhost ~]# cp  /lib64/libc.so.6 /mnt/sysroot/lib64/
[root@localhost ~]# cp  /lib64/libdl.so.2 /mnt/sysroot/lib64/
[root@localhost ~]# cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64/

)、测试效果

登录效果