Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1512875
  • 博文数量: 297
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 3082
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 11:36
文章分类

全部博文(297)

文章存档

2011年(1)

2009年(45)

2008年(67)

2007年(184)

我的朋友

分类: LINUX

2007-07-26 15:22:57

(十一)

安全的动态磁盘策略
linux内核可以模拟RAID控制器,用来管理硬盘,但只支持级别0,1,4,5
RAID0 又称striping
把连续的数据访问分散到多个磁盘上来提高存储性能,速度最快,但最危险。
RAID1 又称Mirror或Mirroring
最大限度的保证用户数据的可用性和可修复性,用户数据100%自动复制到另外一个硬盘上,速度稍慢,因为要同时写多个硬盘。
RAID5    最少需三个硬盘
不对存储的数据时行备份,而把数据和对应的奇偶校验信息分别存储在不同的磁盘上,当一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。
RAID0+1       也称RAID10
结合RAID0和RAID1的优点,很多公司在应用
 
Linux中的软件RAID
1.默认内核已支持软件RAID控制器
2.需用到raidtools工具来创建管理RAID设备,但Fedora Core5不使用这个,而用mdadm工具。
3.软件RAID设备文件名:/dev/mdN        (N=0,1,2…)
4.软件RAID设备可以当分区看待,需格式化后挂载
#mkfs.ext3     /dev/md1
#mount /dev/md1 /opt
 
使用mdadm来创建和管理RAID
RAID0
       添加硬盘
       RAID设备的成员是硬盘分区,需先对硬盘分区,分区不能在同一物理硬盘上
       #fdisk /dev/sdb
       n创建主分区,t分区类型fd,w写保存
       #fdisk /dev/sdc
       #mdadm –Cv /dev/md0 –l0 –n2 /dev/sdb1 /dev/sdc1
              -C,--create             创建一个新的阵列
              -v,verbose             显示细节
              /dev/md0               阵列设备的名称
              -l,--level=              阵列级别,如0,1,4,5,6
              -n,--raid-devices=   阵列活动数目
              /dev/sd[bc]1          阵列包含的设备列表
       #more /proc/mdstat              查看阵列状态
       #mkfs.ext3 /dev/md0     创建文件系统
       #mount /dev/md0 /mnt/raid
       让系统自动挂载,修改/etc/fstab,添加
       /dev/md0       /mnt/raid        ext3 defaults 0 0
 
RAID5 故障模拟
       前面已创建了一个RAID5设备md0
       #mdadm –Cv /dev/md0 –l5 –n3 –x1 –c128 /dev/sd[b,c,d,e]1
       1.将/dev/sdb1标记为已损坏的设备
       #mdadm /dev/md0 –f  /dev/sdb1
       这时阵列开始重构和恢复数据
       2.移除损坏的设备
       #mdadm /dev/md0 –r /dev/sdb1
       3.将新设备添加到阵列
       注意,一:对硬盘正确分区,二:添加设备名要与被移除的一致,如sdb1
       #mdadm /dev/md0 –a /dev/sdb1
      
生成配置文件/etc/mdadm.conf
格式如下:
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 ARRAY /dev/md10 level=raid10 num-devices=4 UUID=12334343dkfj
 
其中UUID信息通过#mdadm –D /dev/md10得到
#mdadm –Ds 扫描该文件信息
 
常用阵列维护命令
1.启用阵列
       #mdadm –As /dev/md0
       -A    启用已存在的阵列
       -s    以/etc/mdadm.conf为依据
       没有创建mdadm.conf文件,则采用如下方法启用
       #mdadm –A /dev/md0 /dev/sd[bc]1
2.停止阵列
       #mdadm –S /dev/md0
3.显示阵列详细信息
       #mdadm –D /dev/md0

 
(十二)
 
LVM逻辑卷管理器
PV (physical volume)物理卷
VG (Volume Group)卷组
LV (Logical Volume)逻辑卷
 
1.fdisk /dev/sdb
       分区sdb1,sdb2,sdb3
       分区类型8e(Linux LVM)
       如果系统在使用sdb,需要重启,以便系统重新读取sdb的分区表信息
2.#pvcreate /dev/sdb[1-3]     初始化物理卷
3.#vgscan                            扫描物理卷,创建卷组数据库
4.#vgcreate vg0 /dev/sdb1 /dev/sdb2           用sdb1,sdb2创建卷组vg0
  #vgdisplay vg0                                      查看卷组vg0的信息
5.#lvcreate –n data –L 10M vg0                  从vg0中创建一个新的名为data,大小10M的逻辑卷
6.#mkfs.ext3 /dev/vg0/data                        格式化
7.#mount /dev/vg0/data /mnt
  #lvdisplay /dev/vg0/data                          查看逻辑卷data的分区情况
  #lvcreate –n test –l 5 vg0                        创建逻辑卷用-l指定块数,默认块大小4MB,即分配逻辑卷20MB大小
创建完逻辑卷一定要mkfs.ext3格式化才能使用
  #lvscan                                                 扫描逻辑卷,看它们的活动情况
 
#lvextend –L +20M /dev/vg0/data                扩大逻辑卷20M,要先umount分区,再扩大
#e2fsck –f /dev/vg0/data                                   强行检查data逻辑卷
#resize2fs /dev/vg0/data                             重新定义分区大小
以上三步要按顺序进行
 
#pvscan                                                   查看系统目前的物理卷情况
#vgextend vg0 /dev/sdb2                            扩大卷组vg0,将分区sdb3加入卷组
#pvmove /dev/sdb1                                          移除物理卷
#vgreduce vg0 /dev/sdb1                           从卷组中删除sdb1
pvmove将数据移走,但sdb1还在vg0内,还是属于卷组分区,vgreduce将sdb1从vg0中删除
创建卷组时,默认的PE大小4MB,允许的LV最大256G
#vgcreate –s 8M vg1 /dev/sdb1
-s    指定PE块大小
通过改变PE块大小,从而改变卷组允许支持的逻辑卷最大容量
 
技巧:
#clear      清屏
#df –lh    显示系统现在的分区挂载情况
 
建立快照(备份数据)
#lvcreate –s –L 52M –n snap /dev/vg0/data
-s    表示快照
-L    快照大小要大于或等于被创建的逻辑卷data
-n    快照名称
快照不用格式化即可使用
 
删除逻辑卷步骤LVàVGàPV
1.umount所有LV
2.lvremove /dev/vg0/data      (通过lvscan查看)如有快照,先移除快照再移除逻辑卷。
3.#vgremove vg0
使用过程中,如有错误,可查看系统日志
#tail /var/log/message
 
(十三)

综合应用案例
要求:使用三个硬盘存储数据,保证数据安全性的同时还能让磁盘窨根据需要动态的缩放
设备sdb sdc sdd
1.将三个硬盘组成RAID5,实现安全性
2.在阵列md0上创建物理卷,卷组,逻辑卷
3.将数据转移到逻辑卷
 
具体操作:
1.fdisk 三个硬盘,分区类型fd,最后得到sdb1,sdc1,sdd1
2.创建raid设备
#mdadm –Cv /dev/md0 –l5 –n3 /dev/sd[b,c,d]1
3.#pvcreate /dev/md0           在阵列上初始化物理卷
4.#vgcreate vg /dev/md0
5.#lvcreate –n home –L 100M vg
#lvcreate –n var –L 100M vg
#mkfs.ext3 /dev/vg/home
#mkfs.ext3 /dev/vg/var
#mkdir /mnt/home
#mkdir /mnt/var
#mount /dev/vg/home /mnt/home
#mount /dev/vg/var /mnt/var
#cp –a /home/* /mnt/home
#cp –a /var/*  /mnt/var
#df –lh
6.#vi /etc/fstab 添加
/dev/vg/home         /home     ext3 defaults 0 0
/dev/vg/var            /var         ext3 defaults 0 0
7.#vi /etc/mdadm.conf   创建文件,以便系统启动时能够自动识别raid设备,内容如下:
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 ARRAY /dev/md0 level=raid5 num-devices=3 UUID=123545:erdfj3:dkf3jd
(UUID具体通过mdadm –D /dev/md0获取)
8.reboot
 
上面已正确地将数据移植到LVM上,下面将/分区移植到LVM上
#lvcreate –n root –L 200M vg
#mkfs.ext3 /dev/vg/root
#mount /dev/vg/root /mnt
#cd /mnt
#mkdir proc tmp var home opt cdrom media mnt srv selinux
#cd /
#cp –a bin dev etc lib sbin root usr sys /mnt &
当操作的过程时间太长,可按ctrl+z,再输入bg,让它后台运行
技巧:
#rm –rf /mnt/bin    强行删除目录
#\ls         不高亮显示
RAID5的磁盘容量利用率为2/3
 
利用mkinitrd创建一个虚拟的磁盘映像文件
#mkdir /boot/test
#mkinitrd –v –preload raid5 –preload lvm-m0d /boot/test/initrd-lvm-$(uname-r)img $(uname –r)
在里面添加加载根分区所需的raid设备文件,驱动程序,命令mdadm等
#cd /boot/test
#mv initrd-lvm-2.6.15-1.2054_FC.img initrd-lvm-2.6.15-1.2054_FC.img.gz
#gunzip init-lvm-2.6.15-1.2054_FC.img.gz
#cpio –idv < init-lvm-2.6.15-1.2054_FC.img
#rm initrd-lvm-2.6.15-1.2054_FC.img
添加设备文件,复制文件时要注意-a参数
#cp –a /dev/vg dev
#cp –a /dev/mapper dev
#cp –a /dev/md0 dev
#cp –a /dev/sd[abcd] dev
#cp –a /dev/sd[abcd]1 dev
#vi init 添加,一定要在mkblkders后面添加,系统启动后执行的第一个脚本,自动激活磁盘阵列
       mdadm –As                 
       vgscan
       vgchange –a y
       修改加载的root分区
       mount –o defaults --ro -t ext3 /dev/vg/root /sysroot
#cp /sbin/vgscan bin
#cp /sbin/vgchange bin
#cp /sbin/mdadm bin
#ldd bin/mdadm     查看该命令所需的库文件
#cp /lib/libc.so.6 lib              (字母o)添加命令所需库文件
#cp /lib/ld-linux.so.1 lib
上面的mdadm -As会根据配置文件mdadm.conf激活阵列,所以将/etc/mdadm.conf拷过来
#cp /etc/mdadm.conf etc             (之前已经手工创建了mdadm.conf),添加配置文件
最后确认/boot/test目录里的文件准备打包
#cd /boot/test
#find -print | cpio -oc > /boot/initrd-lvm-$(uname -r).img
#cd /boot
#gzip initrd-lvm-2.6.15-1.2054_FC.img -c > init-lvm-2.6.15-1.2054_FC.img.gz
这样将文件恢复成一个虚拟磁盘映像文件
 
修改引导配置
#vi /boot/grub/grub.conf
修改defaults=1
添加
title Fedora LVM
       root (hd0,0)
       kernel /boot/vmlinuxz-2.6.15-1.2054_FC ro root=/dev/vg/root  
       和/boot目录里的vmlinuxz对应,注意root=/dev/vg/root的修改
       initrd /boot/initrd-lvm-2.6.15-1.2054_FC.img.gz
保存退出
#mount /dev/vg/root /mnt
#cd /mnt
#vi etc/fstab    修改
/dev/vg/root    /      ext3 defaults   1 1
这样系统启动就会将/dev/vg/root 作为主分区使用
完成所有修改
#reboot
从启后ls /boot应该没有东西,因为物理boot在sda1分区里
可以#mount /dev/sda1 /mnt 再看看里面的boot内容
证明已经成功的转移了根分区,完成了案例提出的要求。
 
在进行这个实验时,主要是对磁盘映像文件的修改,修改init文件时,要注意加载模块的顺序,先创建块设备,才能使用块文件。
使用mkinitrd创建文件后,要注意用file命令查看文件类型,从而进一步对映像文件进行解压,提取等操作。当修改完磁盘映像文件initrd后,要知道如何打包、压缩。注意如何使用cpio命令。
 
(十四)
 
Linux下使用U盘
#ls /dev   确认设备已识别
#mount -o iocharset=gb2312 /dev/sda1
more后ctrl+F向下翻页(或空格)ctrl+b(上滚)
ls -a        显示隐藏文件(以.开头的文件)
文件权限rws        s表示执行这个程序的使用者,临时拥有和所有者一样的权力身份来执行该程序
cp -r 源  目的      -r参数表示连子目录一起拷贝
rm -i            确认删除
       -r            删除子目录
       -f            强制删除
du    磁盘或目录使用了多少空间
df    磁盘或目录剩余可用空间
cat >file1        等价你输入文字,输完后ctrl+C或ctrl+D结束
>>符号表示在文件尾附加,>符号表示创建新文件
less  可上下滚动文件内容
which     在$PATH设置的目录查找文件
 
FTP服务器
FTP使用TCP协议
21端口传输控制信息
20端口传输数据
验证信息采用明文传输
匿名用户anonymous
binary模式传输程序、图片等二进制文件
ascii模式舆文本文件
安装vsftpd
1.下载源代码vsftpd-2.0.5.tar.gz
2.编译源程序,可参考帮助文件INSTALL
       #tar zxvf vsftpd-2.0.5.tar.gz
       #cd vsftpd-2.0.5
       #make
       #make install
3.安装配置文件
       #cp vsftpd.conf /etc
       #cp RedHat/vsftpd.pam /etc/pam.d/ftp
4.编缉配置文件/etc/vsftpd.conf
5.启动服务器
       #/usr/local/sbin/vsftpd &
 
配置文件
listen=YES             服务器独立运行
服务器默认配置文件,不允许其他用户登录,只能匿名登录,匿名登录需要先建/var/ftp目录
finger             用户信息查看工具
finger ftp        确认是否有ftp这个用户
 
为匿名用户可登录,要创建ftp用户和/var/ftp目录
#mkdir /var/ftp
#chown root.root /var/ftp
#chmod og-w /var/ftp
为使vsftpd开机自动进行,在/etc/rc.local添加/usr/local/sbin/vsftpd &
#netstat -tnl    查看本地已启动的服务
vsftpd可以以两种方式运行
让vsftpd独立运行,关闭xinetd的方式
#chkconfig vsftpd off
vsftpd的配置文件
anonymous_enabled=YES     #允许匿名登录
local_enable=YES                 #允许本地用户登录
write_enable=YES                #允许客户端写
local_umask=022                 #本地用户新建文件的umask值
anon_upload_enable=YES      #允许匿名用户上传文件
anon_mkdir_write_enable=YES     #允许匿名用户创建目录
dirmessage_enable=YES #允许使用目录的消息
ftpd_banner=Welcome to redhat    #登录欢迎词
ls_recure_enable=YES          #允许客户端使用ls -R命令
listen=YES                           #监听模式
修改配置文件后,重新启动vsftpd服务
#killall -9 vsftpd     强行终止
#/usr/local/sbin/vsftpd &              启动
#id redhat                            查看redhat用户信息(组id,所属组)
#mkdir /var/ftp/incoming      #为匿名用户开放上传incoming目录
#chgrp ftp incoming
#chmod g+w incoming
chroot环境 (用户不能改变主目录,不能查看主目录外的其他目录,可以隐藏主目录的位置)
 
/etc/vsftpd.conf:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
 
/etc/vsftpd.chroot_list: (锁定主目录的用户列表)
redhat
chiaitlab
 
#killall -HUP vsftpd
 

(十五)
 
用户控制
#vi /etc/vsftpd.conf添加
userlist_enable=YES      启用用户列表
userlist_file=/etc/ftpusers      定义用户列表文件位置
userlist_deny   =YES                    拒绝列表的用户
                   =NO                     只允许列表的用户登录
 
#vi /etc/ftpusers
编缉用户列表,将要进行控制的用户添加进去,一行一个用户
#ldd vsftpd     显示依赖的共享库
默认编译安装没有支持PAM模块,通过ldd /usr/sbin/vsftpd看是否在依赖于libpam.so.0,如果有证明服务支持PAM。
 
通过光盘RPM安装(第二张)
#rpm -ivh vsftpd-2.0.4-1.2.i386.rpm
配置文件及用户列表在/etc/vsftpd目录下
pam服务名 /etc/pam.d/vsftpd
vsftpd在/usr/sbin/vsftpd
ftp默认拒绝id 500以下的用户登录
 
虚拟账号
对于用DB库存储用户及密码,先看系统是否有相应软件包
#rpm -qa | grep db4
db4-devel              第三张盘
db4                第一张盘
db4-utils         第4张盘
 
1.建虚拟账号users.txt
tom
123
jack
123
用户密码各占一行
#db_load -T -t hash -f users.txt /etc/vsftpd/vsftpd_login.db
#chmod 600 /etc/vsftpd/vsftpd_login.db
2.修改/etc/pam.d/vsftpd 增加(将其他注释掉)
auth        required   pam_userdb.so       db=/etc/vsftpd/vsftpd_login
account   required pam_userdb.so       db=/etc/vsftpd/vsftpd_login
3.建虚拟账号目录
#useradd vuser
!!注意,编译安装vsftpd时,首先检查是否安装了pam-devel(FC5在第4张盘),否则编译选项定义了pam,但依然无法使用pam服务,最好用ldd确定一下
4.编缉/etc/vsftpd/vsftpd.conf
anonymous_enable = NO
local_enable =YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
guest_enable=YES
guest_username=vuser
 
(十六)

Proftpd
#tar jxvf proftpd-1.2.9.tar.gz2
#cd proftpd-1.2.9
#./configure                  生成与系统有关的配置文件
#make                   编译把源程序编译成二进制文件
#make install
#/usr/local/sbin/proftpd
配置文件:/etc/local/etc/proftpd.conf
 
vi使用技巧:
yy    复制当前行
p     粘贴
/      查找
n     查找下一个
查找与查找下一个配合使用
shift+D   在当前行删除光标后的所有字符
 
#netstat -tnlp          显示进程及ID
 
为Grub设置密码,防止用户修改或编缉Grub的引导菜单
#grub-md5-crypt           产生一个md5加密的字符串
#grub-md5-crypt >> /etc/grub.conf
#vi /etc/grub.conf
password --md5 $1#123abckdfj343k
这样在启动时,要编缉引导菜单必须输入密码,在引导菜单最后加上 s ,可进入单用户模式。
 
find / -perm -002    查找文件权限中其他人具有写权限的文件,0表示用户,组不管
find / -perm +6000 查找文件,不管用户,组其他,只要权限中含有6(读写)即满足要求。
-            表示权限位必须具有的
+     表示权限位可能有或无
 
 (十七)
 
Linux-PAM认证模块
Pluggable Authentication Modules for Linux 可插拨认证模块
当用户访问服务器,服务程序将请求发送到PAM模块,PAM模块根据服务名称在/etc/pam.d目录下选择一个对应的服务文件,最后根据服务文件的内容选择具体的PAM模块进行处理。
通过ldd查看服务程序在编译时是否使用了libpam.so,决定服务程序是否支持PAM认证。
具体的pam文件放在/lib/security目录下,服务文件放在/etc/pam.d目录下
 
PAM服务文件格式
eg:
auth        required   pam_security.so
auth        required   pam_stack.so service=system-auth
service表示调用子服务文件
 
Module-type:
auth        检查用户和密码,分配权限
account   检查账号是否过期,是否有权登录
session    从用户登录成功到退出的会话控制
password              控制用户改密码的过程
control-flag:
       required          要求矣须通过,否则结束退出
       requisite         如果不通过还可继续向下认证,后面有一通过即可。
       sufficient        通过则不需要向下认证
       optional          可选项
 
常用PAM服务文件
login       -------/etc/pam.d/login
ipop3d     -------/etc/pam.d/pop
vsftpd     -------/etc/pam.d/ftp(编译安装)或/etc/pam.d/vsftpd(rpm安装)
sshd        -------/etc/pam.d/sshd
su           -------/etc/pam.d/su
imap              -------/etc/pam.d/imap
 
/lib/security目录下,各个pam模块的作用,可参考/usr/share/doc/pam-0.99.3.0下的帮助文件。
相同类型Module-type组成一个堆栈。
 
常用PAM模块
pam_access.so              控制访问者地址与账号名称
pam_listfile.so        控制访问者的账号名称或登录位置
pam_limits.so         控制为用户分配的资源
pam_rootok.so              对管理员(uid=0)无条件允许通过
pam_userdb.so       设定独立用户账号数据库认证
 
tty   终端设备

(十八)

pam_access.so模块的使用
                     ―――控制访问sshd服务的主机和用户
1.修改需使用这个模块的服务文件,如sshd:   /etc/pam.d/sshd添加
account   required   pam_access.so
2.修改模块的配置文件
/etc/security/access.conf
- : redhat : ALL EXCEPT 192.168.0.            (格式)
3.测试
ssh 
ssh 
pam_access.so根据主机、IP、用户、拒绝或允许访问。
 
pam_listfile.so的应用 (比pam_access.so更加详细控制)
1.首先查看它的帮助文件,看它的具体格式,参数如何
#less /usr/share/doc/pam-0.99.3.0/txts/README.pam_listfile
item        user,tty,group         说明列表文件中的内容
sense      allow,deny             拒绝或允许文件中的用户
file          指定一个文件,内容根据item项来添加
onerr       succeed,fail    当模块本身产生错误时,返回的值,如无法打开file指定的文件,一般设为succeed
2.将模块应用到sshd服务
将上面添加的pam_access.so清掉,然后在/etc/pam.d/sshd中添加(第一行)
auth       required   pam_listfile.so        item=user      sense=deny     file=/etc/denyuser onerr=succeed
注意添加的位置顺序,否则看不到效果
3.创建编缉列表文件
#echo “redhat” >/etc/denyuser
4.测试
#ssh -l redhat 192.168.0.22   失败
#ssh -l chinaitlab 192.168.0.22 成功
 
#w   显示已登录的用户及最近的一次操作
 
(十九)

pam_limits.so的应用
1.查看帮助文件,确认它的配置文件位置,参数模式
#less /usr/share/doc/pam-0.99.3.0/txt/README.pam_limits
              
       用户名或组名
           soft软限制
                     hard硬限制(不能达到的)
           限制的内容,fsize文件大小,nproc最大进程数,maxlogins用户登录次数
2.将模块应用到sshd服务,修改服务文件
#vi /etc/pam.d/sshd       添加
session required     pam_limits.so
session    控制用户进程的登录次数,文件大小,通过控制用户的会话进程来限制用户使用的资源
3.编缉pam_limits.so的配置文件
redhat     hard        maxlogins       2
(限制redhat登录到sshd服务的次数。
4.测试
#ssh -l redhat 192.168.0.22   第1个
#ssh -l redhat 192.168.0.22   第2个
表示同时最多可以有两个redhat用户登录
 
pam_rootok.so的应用
#chfn      改变用户的finger信息
普通用户使用这个命令修改信息时,需要输入密码才能使用,而root用户则不需要。
分析:
#more /etc/pam.d/chfn
第一行为auth sufficient pam_rootok.so
因为chfn的pam服务文件的第一行应用了pam_rootok.so模块,所以当root用户使用chfn时不需验证,不需要再往下,直接通过。
pam_userdb.so模块需要一个db数据库储存用户信息,具体如何使用可参考前面的vsftpd虚拟用户。
在使用PAM模块时,注意参考README.pam帮助。
阅读(1241) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~