bios告诉vmlinuz有什么硬件,vmlinuz附带了一些基本的硬件驱动,vga和鼠标,键盘等的驱动,
而其他的驱动,类似于文件系统,硬盘的驱动,则放置在initrd中,减少kernel的空间占用
如果不是第一次启动,则需要一个新旧硬件的比对,kuduz 发现新硬件,然后根据/etc/sysconfig/hwconf
如果挂接老的硬件,需要添加的参数以及如何挂接需要参考/etc/modprobe.conf
如果是新硬件,需要修改这两个文件
modules里面有硬件信息
对比modules.alias根据厂商的硬件信息,识别出新硬件的信息
模块的具体的位置存储在modules.dep,也存储了模块的依赖关系
硬件的发现过程
实验:
1,给本机添加reiserfs的模块,让系统支持rfs的文件系统
kernel.org放置的kernel不能用在企业级的
必须用redhat测试过kernel (下载源代码,并打上补丁,生成打过补丁的源代码)
lftp ftp.redhat.com
>ls
>cd redhat
[[email protected] linux-2.6.18.i686]# uname -r确定自己的系统版本号
2.6.18-128.el5
[[email protected] tmp]# rpm -ivh kernel-2.6.18-128.4.1.el5.src.rpm 安装相应的的内核
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
. 这里报错是因为rpm包是官网下载打包好的,打包所使用的root用户是redhat打包时候的用户
.
.
.
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
[[email protected] tmp]# cd /usr/src/redhat/ 进入目录
[[email protected] redhat]# ls
BUILD RPMS SOURCES SPECS SRPMS
目录分别代表什么意义
BUILD(用来执行创建rpm的工作目录)编译的中间文件,解开的原代码放那里去
SOURCES源代码文件以及patch文件,rpm默认寻找目录
SPECS此目录存放源代码编译的时候的配置文件
SRPMS半成品,放置原代码包,编译出来的src的rpm包(*src.rpm),(包含了sources+specs,为了遵循GPL的协议,公布出去)
RPMS编译后产生的所有的rpm的文件
[[email protected] redhat]# cd SPECS/
[[email protected] SPECS]# ls
kernel-2.6.spec
[[email protected] SPECS]# rpmbuild -bp --target i686 kernel-2.6.spec
(其中p把pre的部分做完#spec文件中包含了pre,post等部分
Building target platforms: i686
Building for target i686
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.2082
+ umask 022
+ cd /usr/src/redhat/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ ‘[‘ ‘!‘ -d kernel-2.6.18/vanilla ‘]‘
+ rm -f pax_global_header
+ cd /usr/src/redhat/BUILD
+ rm -rf kernel-2.6.18
.
.
.
.
+ patch -p1 -s
+ exit 0
[[email protected] SPECS]# cd ../BUILD/
[[email protected] BUILD]# ls
kernel-2.6.18
[[email protected] BUILD]# cd kernel-2.6.18/ 到build目录下的kernel
[[email protected] kernel-2.6.18]# ls
config Config.mk linux-2.6.18.i686 vanilla xen
[[email protected] kernel-2.6.18]# cd linux-2.6.18.i686/
[[email protected] linux-2.6.18.i686]# ls
arch CREDITS fs Kbuild Makefile REPORTING-BUGS sound
block crypto include kernel mm samples usr
configs Documentation init lib net scripts
COPYING drivers ipc MAINTAINERS README security
[[email protected] linux-2.6.18.i686]# uname -r
2.6.18-128.el5
[[email protected] linux-2.6.18.i686]# vim Makefile
将 把 makefile的标识EXTRAVERSION改成当前的内核 e.g:EXTRAVERSION= -128.el5
EXTRAVERSION = -prep
修改为
EXTRAVERSION = -128.el5
保存退出
[[email protected] linux-2.6.18.i686]#make menuconfig 告诉kernel编译这个模块
File system ---->Reiserfs support-->选择:stats...../ReiserFs..../ReiserFs....ReiserFs....
保存退出
[[email protected] linux-2.6.18.i686]# make prepare 内核预执行
scripts/kconfig/conf -s arch/i386/Kconfig
CHK include/linux/version.h
UPD include/linux/version.h
CHK include/linux/utsrelease.h
UPD include/linux/utsrelease.h
SYMLINK include/asm -> include/asm-i386
CC arch/i386/kernel/asm-offsets.s
GEN include/asm-i386/asm-offsets.h
[[email protected] linux-2.6.18.i686]# make modules_prepare 内核模块的预执行
CHK include/linux/version.h
CHK include/linux/utsrelease.h
HOSTCC scripts/genksyms/genksyms.o
[[email protected] linux-2.6.18.i686]# make M=fs/reiserfs/ 依赖模块要逐层make
模块的具体路径
WARNING: Symbol version dump /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686/Module.symvers
is missing; modules will have no dependencies and modversions.
LD fs/reiserfs/built-in.o
CC [M] fs/reiserfs/bitmap.o
CC [M] fs/reiserfs/do_balan.o
CC [M] fs/reiserfs/namei.o
CC [M] fs/reiserfs/inode.o 结束后有reiserfs.ko即所需的模块
[[email protected] linux-2.6.18.i686]# insmod fs/reiserfs/reiserfs.ko
#手动添加reiserfs.ko模块,位置可以在任意地方
[[email protected] linux-2.6.18.i686]# lsmod |grep reiserfs 查看系统加载模块有没有挂接好
reiserfs 211588 0
[[email protected] linux-2.6.18.i686]# ls
arch configs CREDITS Documentation fs init Kbuild lib Makefile net REPORTING-BUGS scripts sound
block COPYING crypto drivers include ipc kernel MAINTAINERS mm README samples security usr
[[email protected] kernel-2.6.18]# rmmod reiserfs #删除rfs模块
[[email protected] kernel-2.6.18]# lsmod |grep reiserfs
[[email protected] linux-2.6.18.i686]#
mkdir /lib/modules/2.6.18-128.el5/kernel/fs/reiserfs 创建文件夹
[[email protected] linux-2.6.18.i686]# install -m 755 -d /lib/modules/2.6.18-128.el5/kernel/fs/reiserfs/
[[email protected] linux-2.6.18.i686]# depmod -a 生成modules.dep文件
[[email protected] linux-2.6.18.i686]#
grep reiserfs /lib/modules/2.6.18-128.el5/modules.dep
[[email protected] linux-2.6.18.i686]# lsmod |grep reiserfs 查看系统加载模块有没有挂接好
reiserfs 211588 0
[[email protected] reiserfs]#
install -m 755 -t /lib/modules/2.6.18-128.el5/kernel/fs/reiserfs/ /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686/fs/reiserfs/reiserfs.ko
Install -m 755 -t (单个文件) 源目标 目的目标
-d (整个目录)
手动拷贝需要先设定权限,copy后再给文件设置权限
安装rfs模块到指定的位置
#make install 就是调用install命令,就是将产生的文件copy到相应的位置
[[email protected] reiserfs]# depmod -a
[[email protected] reiserfs]# modprobe reiserfs
[[email protected] reiserfs]# modinfo reiserfs 查看模块的信息
filename: /lib/modules/2.6.18-128.el5/kernel/fs/reiserfs/reiserfs.ko
license: GPL
author: Hans Reiser <[email protected]>
description: ReiserFS journaled filesystem
srcversion: 75AFFF93098091BCAD10C8A
depends:
vermagic: 2.6.18-128.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
[[email protected] reiserfs]# module_sig红帽子的官方签名
[[email protected] bootinitrd]# zcat initrd-2.6.18-128.el5.img | cpio -i
11745 blocks
[[email protected] bootinitrd]# ls -R
\.:
bin dev etc init initrd-2.6.18-128.el5.img lib proc sbin sys sysroot
./bin:
dmraid insmod kpartx modprobe nash
./dev:
console null ram ram1 systty tty0 tty10 tty12 tty3 tty5 tty7 tty9 ttyS1 ttyS3
mapper ptmx ram0 rtc tty tty1 tty11 tty2 tty4 tty6 tty8 ttyS0 ttyS2 zero
./dev/mapper:
./etc:
./lib:
ata_piix.ko dm-message.ko dm-region_hash.ko firmware mptbase.ko ohci-hcd.ko scsi_transport_spi.ko vmxnet3.ko
dm-log.ko dm-mod.ko ehci-hcd.ko jbd.ko mptscsih.ko pvscsi.ko sd_mod.ko vmxnet.ko
dm-mem-cache.ko dm-raid45.ko ext3.ko libata.ko mptspi.ko scsi_mod.ko uhci-hcd.ko
./lib/firmware:
./proc:
./sys:
./sysroot:
权限和认证
login 我是谁
su 我想成为谁
sudo 我想作某件事情,可以作某件事情,需要作一件事情,授权
授权在suid sgid
使用这个文件的时候拥有文件拥有者的权限
sgid,某个组的权限
认证可以有多种方式,passwd+shadow 标准unix的认证方式,login调用一个 pam的模块,pam.so,包括pamunix.so pam.md5.so
login把用户给的用户名字和密码给pam判断是否成功,然后给login返回信息成功还是不成功
认证本身和程序相关,如果程序需要的话,就需要
NIS 是远端的yppasswd ypshadow
如果login包含认证,则需要重新写程序,但是现在只需要写程序,需要修改的用模块的定义
认证不止是su在用,login,
可插入性的认证方式的好处,统一认证,与程序无关,用户透明 (pam机制)
授权,要给用户授权要有一个基准
配置,可以是文件本身上的认证 (suid sgid acl权限,
附加授权权限 setfacl,为了和windows连用,
为了使文件被kevin写,tube读,told写,mark读,如果还有一个其他的用户,则不方便设置
实验2
#mount -o remount,acl /myfiles/
给某一个分区作
#cd /myfiles/testdir
#mkdir dir
#setfacl -m u:kevin:rwx dir
m是modules u用户还是组,kevin用户还是组名
#getfacl dir
kevin有了rwx的权限
使用acl使的系统性能下降17%
需要去查看用户的权限,然后去比对
htpasswd也是一种授权方式,mysql的用户的认证,哪些用户能对哪些表做什么事情
安全也就是授权和认证
认证和授权都是针对程序的,程序本身不需要授权,则可以跳过去
从用户登录开始,
login登录的提示符,登录的认证程序,inittab 产生的 tty终端调用的login,如果调用的是需要认证的则去找pam机制
终端登录调用的是允许在哪些终端登录,在/etc/securetty
判断是否有nologin的文件,如果存在,普通用户是不可以登录的
passwd认证是否存在该用户,是否可以登录shell
用户的
(0,多长时间可以改密码
最后是0或者1,则不能登录)
shadow看用户是否过期了
minetty --autologin root tty1
跳过认证自动登录
man minetty查看参数
/etc/pam.d/login
去查看/etc/nologin是否存在,如果存在,则不允许登录
进去了,但是被T出来了
tty错误/etc/securetty,删除了tty3,则tty3不允许的登录
从安全的角度考虑,一般只开两个tty的登录许可
tty调用的pam.d/login
登录管理器 gdm 用的不是login
2,用户登录
3,motd文本的信息
4,pam决定了家目录的位置,如果是本地的则去找 /etc/passwd,进入到/
5,启动shell,csh,tcsh,zsh,nash
判断用户使用哪种shell
执行/etc/profile下面的*.sh
系统有很多的shell,需要各自的环境,以单独的一个文件放置到 profile
conf 其中conf.d设置的是为了修改局部的配置,而不影响整体的配置
图形登录的时候执行xterm的,bash子 shell,之后执行bashrc
tty的时候先读取.bash_profile后,执行bashrc
用户自己决定是否执行 /etc/bashrc
退出的时候不保留记录 kill -9 0
/etc/skel包含了profile,bashrc等配置文件,添加用户的时候拷贝过去
可以放置木马
initrd.img只需要放置本地启动需要的
安装需要防止所有可能的模块,可能需要各种板卡的驱动
1,用于启动的initrd.img
cp /boot/initrd*.img
mkdir /tmp/bootinitrd
zcat ../initrd*.img | cpio -i
#-i input
#cpio用在纸带机上
#tar最早用在磁带机
dmraid lvm如果根是 raid 或者lvm则能识别出来
kpartx硬件虚拟化 mutipath
双hba卡+一个storage
两个卡认到2个设备
虚拟成一个设备
cd bootinitrd
#解压开来
zcat ../initrd-2.6.18-128.el5.img | cpio -i
去掉lib中的ext3.ko,然后重新生成
#重新生成
find ./ | cpio -H newc -o > ../initrd.my
#以最高压缩比压缩
gzip -9 initrd.my
2,用于安装的 initrd.img
mkdir installinitrd
cd !$
解压开来之后
modules/pci.ids
作业:
查找pci.ids在系统中的哪个位置
dmesg
pci.ids由org提供
mkdir modules
mkdir 2.6.18-164.el5/i686/
zcat ../* | cpio -i
el4 initrd的制作方法
ext2的initrd
dd if=/dev/zero of=/tmp/initrddir bs=1M count=8
mkfs.ext2 initrddir
mount
cp -a bootinitrd initrddir
gzip -9 initrddir
initrd.img然后去lib/modules-modules_alias 先去比对,然后去.dep去找位置