超级守护进程 xinetd

 chkconfig --list |grep xinetd


xinetd based services:
        chargen-dgram:  off
        chargen-stream: off
        cvs:            off
        daytime-dgram:  off
        daytime-stream: off
        discard-dgram:  off
        discard-stream: off
        echo-dgram:     off
        echo-stream:    off
        eklogin:        off
        ekrb5-telnet:   off
        gssftp:         off
        klogin:         off
        krb5-telnet:    off
        kshell:         off
        ktalk:          off
        rmcp:           off
        rsync:          on
        tcpmux-server:  off
        tftp:           on
        time-dgram:     on
        time-stream:    on

 


守护进程分为:
 stand alone  --指的非xinet下的那些服务
 super daemon --指的就是xinetd下的那些服务


super daemon相当于是它下面的所有服务的管理程序,在安全性上更加了一道门


以rsync服务为例
vim /etc/xinetd.d/rsync

service rsync   --服务名
{
        disable = yes  --disable等于yes表示此服务关闭
        socket_type     = stream --tcp的连线机制
        wait            = no --不等待,可以同时进行大量连线功能
        user            = root --用root身份启动服务
        server          = /usr/bin/rsync --定义你的rsync的服务执行文件的位置
        server_args     = --daemon --服务参数,man rsycd可以查到这个参数,表示rsync以守护进程的方式来运行
        log_on_failure  += USERID  --登录错误时,额外记录你的用户id
}

 

例子一:
实现把ssh拖管到super daemon下管理

man xinetd.conf --写法去这里找帮助

vim /etc/xinetd.d/ssh    --新建一个文件,写上下面的内容


service   ssh
{
                disable = no
                socket_type = stream
  protocol = tcp
                wait = no
                user = root
                server = /usr/sbin/sshd
                server_args = -i
}


/etc/init.d/sshd stop
/etc/init.d/xinetd restart

 

 netstat -ntlup
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      8182/xinetd    --这时候查看你的端口会发现守护进程为xinetd,不是以前的sshd

 

例子二:
在上面例子的基础上再加上访问控制
service   ssh 
{
                disable = no
                socket_type = stream
  protocol = tcp
                wait = no
                user = root
                server = /usr/sbin/sshd
                server_args = -i
           only_from = 10.1.1.0/24 --允许10.1.1.0/24网段访问
                no_access = 10.1.1.104 --拒绝10.1.1.104访问
}

 

[root@a ~]# ssh 10.1.1.35
ssh_exchange_identification: Connection closed by remote host
 --被拒绝后报错如上

 

例三:定义只能上午10点到下午2点之间才能被ssh
service  ssh
{
        disable = no
        socket_type = stream
        protocol = tcp
        wait = no
        user = root
        server = /usr/sbin/sshd
        server_args = -i
        only_from = 2.2.2.0/24
        no_access = 2.2.2.35
        access_times = 10:00-14:00
}


/etc/init.d/xinetd restart


例四: 把端口换成2222
vim /etc/services    --把ssh对应的22端口改成2222


service  ssh
{
        disable = no
        socket_type = stream
        protocol = tcp
 port = 2222
        wait = no
        user = root
        server = /usr/sbin/sshd
        server_args = -i
        only_from = 2.2.2.0/24
        no_access = 2.2.2.35
        access_times = 10:00-14:00
}

/etc/init.d/xinetd restart

 

例五:
介绍一个super   daemon下的一个时间同步的方法
[root@li test]# vim /etc/xinetd.d/time-dgram
   disable = no
[root@li test]# vim /etc/xinetd.d/time-stream
   disable = no

/etc/init.d/xinetd    restart


 --重启后,查看tcp和udp的37端口都会开放

客户端使用    rdate   -s   10.1.1.35   来同步时间 

 


======================================================================


linux系统的备份与恢复

哪些需要备份:

/bin     存放的是系统可执行的二进制文件
/etc  存放的是配置文件
lost+found  分区下才会有这个目录,存放系统出错时遗失的碎片文件
/mnt   默认的挂载目录(mount)
/opt  扩展软件包
/sbin  系统管理员可执行的二进制文件
/tmp     存放临时文件的目录
/boot    存放引导镜象的目录
  initrd-2.6.18-164.el5.img     vmlinuz-2.6.18-164.el5
/home   用户家目录
  管理的家目录为/root
/media   默认挂载media的目录
/proc  虚拟目录 ,它记录的是当前系统的各种动态信息和状态
/selinux    高级安全管理
/usr   用户软件目录,用户装软件一般存放在此
/dev      一切设备都是文件
 /dev/sda     scsi   U盘
 /dev/hda IDE
 /dev/cdrom     光盘
 /dev/fd0 软驱
 /dev/lp  打印机
 /dev/mouse 鼠标


/lib 系统使用的函数库目录,程序运行过程中,会调用一些这里的库文件
/var    主要存放执行过程中经常变化的文件,比如说:日志,邮件
 /var/lib  程序执行过程中,使用的数据文件放置的目录:比如:rpm包的数据库, 的locate查找的数据库等
 /var/log  系统日志和各种服务日志存放的目录
 /var/run  一般用来存放程序运行的pid
 /var/spool/mail 每个用户收邮件的目录


系统本身:

  /etc/  --下面有/etc/passwd,/etc/fstab,/etc/initab等等重要的系统配置文件和服务配置文件
  /root,/home/用户名   --各个用户的家目录,存放各个用户的文件
  /var/spool/mail,/var/log/messages  --邮件,系统日志信息
  /usr/local,/opt/,/usr/src  --用户安装的软件,扩展软件包,软件包源码
  /bin/,/sbin/ --用户和管理的可执行命令

服务相关:
  与服务器跑的服务相关的数据要备

不需要备的: /tmp,/mnt,/proc,/dev

 

备份的介质:  
  软盘:/dev/fd0 
  光盘:/dev/cdrom
  硬盘:/dev/hda(b,c,...)   IDE /dev/sda(b,c,...)    SCSI,SATA,USB
  磁带机: /dev/ht0           IDE      /dev/st0        SCSI
  usb接口的外接设备

备份的种类:
  全备  --也可以称为镜像备份
  增量差异备份 --只备份变化的
  累计增量差异备份  --累计一段时间的变化数据


1 2 3 4 5 6 7 

全 增 增 累 增 增 增

 

linux下备份的工具

  cp   tar  
  scp  wget rsync
  dump/restore   rdump
  dd
  cpio


[root@li ~]# tar cvf /backup/xxxx  / --exclude=/tmp --exclude=/dev  --exclude=/proc   --exclude=/backup  


tar -N参数(了解)

tar -N '2010-05-09' -cvjf /backup/newer.tar.bz2 /test/test/
--备份比2010-05-09新的文件(也就是表示在这一天之后修改过的文件,包括20100509这天的)

 

tar打包备份,并按时间命令
  tar cvjf /backup/`date +%Y-%m-%d`.tar.bz2  /home/ --注意`符号(执行符号)是tab键上面的那个键

 


远程备份

 scp                 --远程备份目录时,记得加-r参数
  要实现用脚本自动scp的远程备份,注意配ssh等效性(有些场合不允许配置ssh等效性)   expect自动应答脚本

 
 rsync     remote sync    远程同步     比wget要好

  rsync  - faster, flexible replacement for rcp

  Wget - The non-interactive network down-loader.

 

 

wget http://127.0.0.1/ule07.txt  --直接接url  uniform  resource locate(统一资源定位)


[root@li ~]# wget http://10.1.1.35/extra/flash-plugin-10.0.32.18-release.i386.rpm

[root@li ~]# wget ftp://10.1.1.35/ule/ule12.txt


# wget -m -k -np http://10.1.1.35/ule

还支持https协议 

 

 

  rsync   特点:

 1,可以镜像保存整个目录树和文件系统
 2,容易做到保存原有的权限,时间,软硬链接
 3,传输效率高,使用同步算法,只比较变化的
 4,支持匿名传输,方便网站镜像

rsync 参数介绍
 -v    verbo
 -a    归档模式,递归的方式传输文件,并保持文件的属性
 -l    保留软链接
 -R 保留相对路径
 -H     保留硬链接
 -p ,-o,-g,-A  分别保留权限,属主,属组,acl等   ,但如果加了-a,这些就都包括了
 -D    等于--devices  --specials    表示支持b,c,s,p类型的文件

 

普通应用:

 rsync -av  /home    /backup     --本机上的同步,把/home目录下的内容同步到/backup目录下
 
  rsync -av /home/ 10.1.1.218:/backup --把本地的/home目录内容,同步到远端218的/backup目录下

 rsync -av 10.1.1.218:/backup/ /backup/ --把远端218的/backup目录下的内容同步到本地的/backup目录

 

思考:
1。 同步时保留原路径,也就是把/home同步到/backup会变成/backup/home/*再内容

 -R参数解决

 

2。如果源目录有文件被删除了,那同步的目录是删除还是不删除,是否可以用参数来控制?
 
 --delete


思考:能否把上面的rsync做成服务的形式,并加上一些控制功能或日志记录功能呢?

 man rsyncd.conf  

 

服务器端的配置:
1,第一步:
vim /etc/rsyncd.conf

motd file=/etc/rsyncd.welcome

[abc]
path=/test

 

vim /etc/rsyncd.welcome --手动建立自己定义的motd文件,并写上欢迎信息

 


2,第二步:
vim /etc/xinetd.d/rsync  --修改服务启动脚本

service rsync
{
        disable = no --yes改为no  打开rsync服务功能
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}


第三步:
/etc/init.d/xinetd restart  --重启服务

netstat -ntlup |grep 873  --服务端就会有873的端口在监听了
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      4080/xinetd 

 

客户端的操作:

# rsync -v 10.1.1.35::  --直接这样可以查看35这个服务器共享了哪些
        "hello today! @_@"

notes         

 


# rsync -avlR 10.1.1.35::abc /root/Desktop/
--这样同步,是不需要密码的;注意abc为服务名,前面有两个::

 

例二:在上面的基础上加上一些功能
要求:
1。把日志记录到/var/log/rsyncd.log
2。共享两个module一个为notes,目录为/share/110620,另一个module为soft,目录为/share/soft,soft这个module为隐藏module
3。并时同时只能1个客户端连接进行同步这两个module
4。只能允许一个IP(实验时这个IP自定义)进行同步这两个module
5。只允许客户端使用user1用户来同步notes这个module,并且同步密码为123

 

motd file=/etc/rsyncd.motd
log file=/var/log/rsyncd.log

[notes]
path=/share/110620
max connections=1
lock file=/var/run/rsyncd.lock
hosts allow=172.16.232.129
auth users=user1
secrets file=/etc/rsyncd.passwd


[soft]
path=/share/soft
list=false
max connections=1
lock file=/var/run/rsyncd.lock
hosts allow=172.16.232.129

 

vim /etc/rsyncd.passwd  --手工创建这个密码文件
user1:123  --明文

chmod 600  /etc/rsyncd.passwd  --注意权限改为600,只root用户能读能写 

/etc/init.d/xinetd restart


客户端上的操作
先su - user1切换到user1用户
[user1@localhost ~]$ rsync -av 10.1.1.35::www /home/user1

Password:   --输入密码就可以了

 

rsync的补充:

 sersync   这个软件  金山的一个人写的

 

=====================================


 dump 备份
 restore  恢复
 
 dump的特点:

 1,只能针对整个分区
 2,能够支持绝大部分文件类型,包括设备文件,也能保留原属性
 3,支持镜像备份和增量备份
 4,备份时支持基本压缩

 备份级别:
  通过备份级别来支持增量和镜像备份
  0-9级别,0代表的是全备(镜像备份),后面的数字代表递增的增量备份

 

1 2 3 4 5 6 7 周期

全 增 增 累 增 增 增

0 1 2 1 2 3 4 备份级别 
   
--dump里数字级别表示备份上一次小于它的数字到这一次之间的数据(oracle里会有所不一样,oracle里的累计增量备还要加一个c标识)

 


[root@li ~]# dump -0u /dev/sda12 -f /backup/sda12_0.dump
--0级别全备

[root@li ~]# dd if=/dev/zero of=/quota/dump1 bs=1M count=10
--在sda12挂载的quota目录里建立一个10M大小的文件dump1

[root@li ~]# dump -1u /dev/sda12 -f /backup/sda12_1.dump
--1级别增备,可以查看备份的文件为10M,所以验证了增量备

[root@li ~]# dd if=/dev/zero of=/quota/dump2 bs=1M count=10
--再建立10M的文件dump2

[root@li ~]# dump -2u /dev/sda12 -f /backup/sda12_2.dump
--2级别增备,还是10M

[root@li ~]# dd if=/dev/zero of=/quota/dump3 bs=1M count=10
--再建立10M的文件dump3

[root@li ~]# dump -1u /dev/sda12 -f /backup/sda12_1_4.dump
--1级别备份,会发现30M,表示它备份了dump1,dump2,dump3这三个10M的文件,所以验证了它是备第一次备份的0级别到这次之间的数据;也就是累计增量备

 


 restore -t -f  sda12_0.dump --查看备份集里备份的文件用-t参数

 恢复restore
  1, 因为整个分区崩溃,需要恢复,那么在这里最好重新格式化一下这个分区,再重新挂载
  2,开始restore恢复

  cd /恢复路径    --先cd到要恢复的路径,再一级一级恢复,不能跳级


[root@li quota]# restore -r -f /backup/sda12_0.dump
--先恢复0级别全备

[root@li quota]# restore -r -f /backup/sda12_1_4.dump
--因为做了累计增量备份,所以直接恢复累计增量的备份文件,就把dump1,dump2,dump3恢复回来了


直接从备份中提取出文件:

--如果你只需要恢复一个文件,就用下面的方式去提取
[root@li quota]# restore -x -f /backup/sda12_1_4.dump /dump2
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1
set owner/mode for '.'? [yn] y


 交互性的提取出文件:
 
[root@li quota]# restore -i -f /backup/sda12_1_4.dump --交互性用-i参数
restore >
restore > ls
.:
aquota.group aquota.user  dump1        dump2        dump3

restore > add dump1
restore > add dump3 --把备份集中的dump1,dump3加到提取列表,如果是目录的话使用 add 目录名/*
restore > ls  --再次查看备份集会看到加入到提取列表文件被加了标记
.:
 aquota.group  aquota.user  *dump1         dump2        *dump3

restore > extract  --这个命令提取出来
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1
set owner/mode for '.'? [yn] n
restore > quit  --退出


 rdump  remote  dump  远程dump
 
 先配ssh等效性

RSH=/usr/bin/ssh rdump -0u /dev/sda12 -f 172.16.232.129:/tmp/sda12_0_full.dump
 --把本地的/dev/sda12的数据远程dump到129的/tmp目录,远程dump要受网络的影响


===========================================================


。。。。。。。。。。。。。。。

  dd - convert and copy a file
 
 dd  指定大小地拷贝一个文件,并在拷贝的同时可以进行一些转换

 1,备份mbr
 dd if=/dev/sda of=/backup/mbr.backup  bs=1  count=512
 删除mbr  dd if=/dev/zero  of=/dev/sda bs=1 count=512
 就会发现fdisk -l 看不到分区,一重启系统就启不来了
 恢复:dd if=/backup/mbr.backup  of=/dev/sda  
 2,备份整个硬盘
 dd if=/dev/sda of=/dev/sdb  --把/dev/sda的数据备份到/dev/sdb
  恢复:dd if=/dev/sdb of=/dev/sda
 dd if=/dev/sda of=/backup/full.backup  --把/dev/sda的数据备份成一个文件
  恢复:dd if=/backup/full.backup of=/dev/sda
 3,备份软盘
 dd if=/dev/fd0 of=/backup/fd0.backup  bs=1   count=1440
  恢复:dd if=/backup/fd0.backup of=/dev/fd0
 4,从光盘拷贝iso镜像
    dd if=/dev/cdrom  of=/xxx.iso
 5,从内存里拷贝资料到磁盘
    dd if=/dev/mem  of=/backup/mem.bin
特殊应用:
 6,销毁磁盘数据
   dd if=/dev/urandom of=/dev/sda   --随机数填充磁盘
 7,修复硬盘,当硬盘长时间不使用
    dd if=/dev/sda  of=/dev/sda
 8,raw设备(裸设备)或者lvm数据迁移等


 logical  volumn  management  逻辑卷管理


[root@li raw]# vim /etc/udev/rules.d/50-udev.rules
KERNEL=="raw[0-9]*",            NAME="raw/%k" OWNER="user1" GROUP="user1"
--后面加owner,group指定裸设备的用户和组

[root@li raw]# vim /etc/udev/rules.d/60-raw.rules
  ACTION=="add", KERNEL=="sda9", RUN+="/bin/raw /dev/raw/raw1 %N"
--加上这一句,表示sda9绑定到/dev/raw/raw1
 
[root@li dump]# raw  /dev/raw/raw1 /dev/sda9
/dev/raw/raw1:  bound to major 8, minor 9

[root@li dump]# ll /dev/raw
total 0
crw------- 1 user1 user1 162, 1 Mar 21 15:17 raw1


-------------------------------------------------------


  cpio 能备份任何类型文件 (了解)

 一般使用管道和别的命令配合(find)


 find  /quota/ |cpio -ov > /backup/quota.cpio --备份

 cpio -iv < /backup/quota.cpio  --恢复

  -o     备份
  -i      恢复
  -v      显示