安全运维体系

如何做到:

  1. 部署容易: 做好部署脚本,包含各种不同的应用的部署脚本

  2. 易维护:错误列表需要做好,各种安装文档作好。

  3. 更安全:做好安全协议和各种安全措施

运维体系面临的问题

系统部分

  1. 系统多样性: windows, linux, freebsd各种操作系统,而且很多时候运行于上面的程序也会各不相同。

  2. 应用多样性: web前端, master db, slave db, ha以及各种不同应用程序。

  3. 人员更替频繁: 操作流程要做好。

网络部分

  1. 应用复杂: 每个项目都需要不同的架设方式

  2. 各种协议问题

安全体系面临的问题

  • 大量应用带来安全问题
  1. 发展过快导致安全断层。 设计初就要考虑好完整的系统架构,针对这个架构再加以实现安全规范,同时安全人员需要对程序代码进行安全审查。
  2. 重实现,忽视安全。对于功能的实现不能光停留在实现的层次上,而需要考虑系统的可扩展性。而不是只是为了实现基本功能,而到时候要修改程序就十分麻烦了再。
  • 人员安全意识不足
  1. 安全需要普及意识。这个普及不光是意识上,而且制度上也要建立起来的。
  • 攻击方式多样
  1. 对安全人员要求更高。攻击方式已经不光是XSS,DDOS,更有注入以及CRSE等等。而这些都是需要安全人员自己学习的。

运维体系

  • 标准化
  1. 系统安装:系统安装需要有标准化文档,标准化文档也可以进行更新。
  2. 系统配置:对于不同的需求需要有不同的系统配置文档。
  3. 应用编译:这个一般就是针对XNIX系统。
  • 网络横向划分
    1. 保证足够的纵深。
  • 网络纵深划分
  1. 根据应用划分网络,隔绝不同的应用服务器,不用各个不同的系统之间调用相同的数据。
  2. 根据需要划分网络,监控和前台以及数据库之间要互相分离开来。

各个B2C购物网站比较

虽然我本人不用C2C,就是类似taobao这样的,但是我一直上B2C购买物品。

在china-pub, dangdang, joyo都是最高级别会员了,所以对这些网站也算比较了解了。所以就随便对比下。

以前看过amazon的评价,据说亚马逊的订单下去2个小时后就能把物品送到你家中,太厉害了,他们的物流是怎么做到这些的?而我们国内的能在第2天送上门我已经是非常满意了。网站做的好的就是一个售后系统和物流了。

china- pub是上的最早的,因为学计算机的缘故,china-pub以前是计算机图书最多的了,价格也是比较便宜的,一般有个73者,送货费比较贵,一般是需要 7元送货费,所以如果买100以内是绝对不合算的。但是送货还是比较快,从1天到4天都是有的,如果你的书在苏州书库里有的话那估计一到2天就可以到了,如果在北京的话就要4天了。

dangdang是上面随便什么都有,类似百货商店了,最早是在上面买过手表,是精工的表,但是走时还真是差阿,基本需要1个礼拜就要调一次。dangdang的送货费有时候会免费,有时候2元,有时候要5元,价格基本就是如此了。现在价格上跟china- pub比较多,但是评论没有china-pub多,而且枪手也比较多。不过似乎枪手都转到douban上去了。说个问题,现在dangdang的送货实在是慢的可以,基本都是需要1个星期左右,我就不知道这些快递公司外面的评论那么差,可dangdang还是委托他们。同时dangdang即使送货出来也不会通知你,不会告诉你快递公司的电话,除非你打他们的客服电话。客服电话的处理时间是2个工作日,我一个单子需要打2次电话,要是很着急的单子大家自己想想吧。

joyo,现在应该叫amazon中国了,自从被amazon收购后我来这个网站的时间就多了。joyo现在送货费都是免费的了,价格上也比较便宜,跟dangdang基本会产生比较,dangdang便宜它也跟着便宜。joyo的售后还是比较不错的。你单子下去后,首先他们会发 email给你,让你知道有这个事情。其次的话等单子发出后他也会发个email给你说明单子已经发出,同时会告诉你快递公司的名字和快递公司的电话给你。这些其实是很人性话的。china-pub以前也就是会发短消息给你说单子已经发送出来。joyo的东西也并没有dangdang多,但是 dangdang的店中店是比较麻烦的。

在centos5.1中做磁盘限额

磁盘限额,也就是quote,它分为v1和v2两个版本,网上的教程一般都是针对v1的quote

由于要做nis和nfs,所以要对用户的主目录进行磁盘限额,这里的测试帐号为test

对用户主目录:/home限制,修改/etc/fstab文件,重新启动计算机
A.编辑/etc/fstab文件,重新启动计算机,使限额功能生效

vi /etc/fstab

把
LABEL=/home   /home   ext3    defaults     1 2
修改为:
LABEL=/home   /home   ext3    defaults,usrquota,grpquota     1 2

touch quota.user
touch quota.group
chmod 666 quota.user
chmod 666 quota.group

reboot

启动完成后:

cd /home
convertquota /home       //这个就是v2的quote必须做的,它会把quota.userh和quota.group转换为aquota.user和aquota.group。如果没有这步下面会报错的。

quotacheck -avug
quotaon -a

B.限额配置文件的修改

edquota test//为用户test设置磁盘配额

系统会自动打开配额文件,如下:
Disk quotas for user test (uid 1008):
Filesystem blocks soft hard inodes soft hard
/dev/sda4 1244 0 0 13 0 0
#注:
#第一列是启用了配额的文件系统的名称。第二列显示了用户当前使用的块数,单位为KB。随后的两列用来设置用户在该文件系统上的软硬块限度。
inodes 列显示了用户当前使用的i节点数量。最后两列用来设置用户在该文件系统上的软硬i节点限度.硬限是用户或组群可以使用的磁盘空间的绝对最大值。达到了该限度后,磁盘空间就不能再被用户或组群使用了。软限定义可被使用的最大磁盘空间量。和硬限不同的是,软限可以在一段时期内被超过。这段时期被称为过渡期(grace period),默认七天的超越。过渡期可以用秒钟、分钟、小时、天数、周数、或月数表示。如果以上值中的任何一个被设置为 0,那个限度就不会被设置。
C.要校验用户的配额是否被设置,我们可以使用以下命令:

quota test

用以下命令显示磁盘配额使用状态:

repquota  -a

用rsync对网站进行镜像备份

01年的老文了,但是还是很经典,转载来

创建时间:2001-07-05
文章属性:原创
文章来源:http://xfocus.org/
文章提交:inburst (inburst_at_263.net)

用rsync对网站进行镜像备份

by inburst
http://xfocus.org

对系统管理员来说,平时的工作重心应该集中在维护系统正常运转,能够正常提供服务上,这里往往牵涉到一个数据备份的问题,在我所了解的情况中,有80%的系统管理员不是太关心自己服务器的安全性,但往往对备分镜像的技术相当感兴趣,但由于商业产品的软硬件价格都相当高昂,因此往往会选择自由软件。这里准备介绍的rsync就是这样的软件,它可以满足绝大多数要求不是特别高的备份需求。

一、特性简介

rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。它的特性如下:

1、可以镜像保存整个目录树和文件系统。
2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。
3、无须特殊权限即可安装。
4、优化的流程,文件传输效率高。
5、可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
6、支持匿名传输。

二、使用方法

rsync的使用方法很简单,我就举自己使用的例子来说明吧。

1、系统环境

rsync支持大多数的类unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。我的系统环境为:

server: FreeBSD 4.3 ip: 192.168.168.52
client: Solaris 8 ip: 192.168.168.137
rsync 版本 2.4.6(可以从http://rsync.samba.org/rsync/获得最新版本)

2、配置server端的/etc/rsyncd.conf文件

bash-2.03# cat /etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = no # 不使用chroot
max connections = 4 # 最大连接数为4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log # 日志记录文件

[inburst] # 这里是认证的模块名,在client端需要指定
path = /home/inburst/python/ # 需要做镜像的目录
comment = BACKUP CLIENT IS SOLARIS 8 E250
ignore errors # 可以忽略一些无关的IO错误
read only = yes # 只读
list = no # 不允许列文件
auth users = inburst # 认证的用户名,如果没有这行,则表明是匿名
secrets file = /etc/inburst.pas # 认证文件名

[web]
path = /usr/local/apache/htdocs/
comment = inburst.org web server

3、在server端生成一个密码文件/etc/inburst.pas

bash-2.03# cat /etc/inburst.pas
inburst:hack

出于安全目的,文件的属性必需是只有属主可读。

4、在server端将rsync以守护进程形式启动

bash-2.03# rsync –daemon

如果要在启动时把服务起来,有几种不同的方法,比如:

a、加入inetd.conf

编辑/etc/services,加入rsync 873/tcp,指定rsync的服务端口是873
编加/etc/inetd.conf,加入rsync stream tcp nowait root /bin/rsync rsync –daemon

b、加入rc.local

在各种操作系统中,rc文件存放位置不尽相同,可以修改使系统启动时rsync –daemon加载进去。

5、从client端进行测试

下面这个命令行中-vzrtopg里的v是verbose,z是压缩,r是recursive,topg都是保持文件原有属性如属主、时间的参数。–progress是指显示

出详细的进度情况,–delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。后面的inburst@ip中,

inburst是指定密码文件中的用户名,之后的::inburst这一inburst是模块名,也就是在/etc/rsyncd.conf中自定义的名称。最后的/tmp是备份

到本地的目录名。

在这里面,还可以用-e ssh的参数建立起加密的连接。可以用–password-file=/password/path/file来指定密码文件,这样就可以在脚本中使

用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

bash-2.03# rsync -vzrtopg –progress –delete inburst@192.168.168.52::inburst /tmp/
Password:
receiving file list … done
./
1
785 (100%)
1.py
4086 (100%)
2.py
10680 (100%)
a
0 (100%)
ip
3956 (100%)
./
wrote 190 bytes read 5499 bytes 758.53 bytes/sec
total size is 19507 speedup is 3.43

6、创建更新脚本

如果有比较复杂的工作,利用一些常见的脚本语言可以有帮助。比如:

bash-2.03# cat /usr/local/bin/rsync.sh

#!/bin/sh
DATE=`date +%w`

rsync -vzrtopg –progress –delete inburst@192.168.168.52::inburst /home/quack/backup/$DATE –password-file=/etc/rsync.pass >

/var/log/rsync.$DATE

7、修改/etc/crontab做好定时

比如:

bash-2.03# echo “15 4 * * 6 root rsync.sh”>>/etc/crontab

三、FAQ

Q:如何通过ssh进行rsync,而且无须输入密码?
A:可以通过以下几个步骤

1. 通过ssh-keygen在server A上建立SSH keys,不要指定密码,你会在~/.ssh下看到identity和identity.pub文件
2. 在server B上的home目录建立子目录.ssh
3. 将A的identity.pub拷贝到server B上
4. 将identity.pub加到~[user b]/.ssh/authorized_keys
5. 于是server A上的A用户,可通过下面命令以用户B ssh到server B上了
e.g. ssh -l userB serverB
这样就使server A上的用户A就可以ssh以用户B的身份无需密码登陆到server B上了。

Q:如何通过在不危害安全的情况下通过防火墙使用rsync?
A:解答如下:

这通常有两种情况,一种是服务器在防火墙内,一种是服务器在防火墙外。
无论哪种情况,通常还是使用ssh,这时最好新建一个备份用户,并且配置sshd仅允许这个用户通过RSA认证方式进入。
如果服务器在防火墙内,则最好限定客户端的IP地址,拒绝其它所有连接。
如果客户机在防火墙内,则可以简单允许防火墙打开TCP端口22的ssh外发连接就ok了。

Q:我能将更改过或者删除的文件也备份上来吗?
A:当然可以:

你可以使用如:rsync -other -options -backupdir = ./backup-2000-2-13 …这样的命令来实现。
这样如果源文件:/path/to/some/file.c改变了,那么旧的文件就会被移到./backup-2000-2-13/path/to/some/file.c,这里这个目录需要自己

手工建立起来

Q:我需要在防火墙上开放哪些端口以适应rsync?
A:视情况而定

rsync可以直接通过873端口的tcp连接传文件,也可以通过22端口的ssh来进行文件传递,但你也可以通过下列命令改变它的端口:

rsync –port 8730 otherhost::
或者
rsync -e ‘ssh -p 2002’ otherhost:

Q:我如何通过rsync只复制目录结构,忽略掉文件呢?
A:rsync -av –include ‘*/’ –exclude ‘*’ source-dir dest-dir

Q:为什么我总会出现”Read-only file system”的错误呢?
A:看看是否忘了设”read only = no”了

Q:为什么我会出现’@ERROR: invalid gid’的错误呢?
A:rsync使用时默认是用uid=nobody;gid=nobody来运行的,如果你的系统不存在nobody组的话,就会出现这样的错误,可以试试gid =

nogroup或者其它

Q:绑定端口873失败是怎么回事?
A:如果你不是以root权限运行这一守护进程的话,因为1024端口以下是特权端口,会出现这样的错误。你可以用–port参数来改变。

Q:为什么我认证失败?
A:从你的命令行看来:

你用的是:
> bash$ rsync -a 144.16.251.213::test test
> Password:
> @ERROR: auth failed on module test
>
> I dont understand this. Can somebody explain as to how to acomplish this.
> All suggestions are welcome.

应该是没有以你的用户名登陆导致的问题,试试rsync -a max@144.16.251.213::test test

四、一些可借鉴的脚本

这里这些脚本都是rsync网站上的例子:

1、每隔七天将数据往中心服务器做增量备份

#!/bin/sh

# This script does personal backups to a rsync backup server. You will end up
# with a 7 day rotating incremental backup. The incrementals will go
# into subdirectories named after the day of the week, and the current
# full backup goes into a directory called “current”
# tridge@linuxcare.com

# directory to backup
BDIR=/home/$USER

# excludes file – this contains a wildcard pattern per line of files to exclude
EXCLUDES=$HOME/cron/excludes

# the name of the backup machine
BSERVER=owl

# your password on the backup server
export RSYNC_PASSWORD=XXXXXX

########################################################################

BACKUPDIR=`date +%A`
OPTS=”–force –ignore-errors –delete-excluded –exclude-from=$EXCLUDES
–delete –backup –backup-dir=/$BACKUPDIR -a”

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

# the following line clears the last weeks incremental directory
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir
rsync –delete -a $HOME/emptydir/ $BSERVER::$USER/$BACKUPDIR/
rmdir $HOME/emptydir

# now the actual transfer
rsync $OPTS $BDIR $BSERVER::$USER/current

2、备份至一个空闲的硬盘

#!/bin/sh

export PATH=/usr/local/bin:/usr/bin:/bin

LIST=”rootfs usr data data2″

for d in $LIST; do
mount /backup/$d
rsync -ax –exclude fstab –delete /$d/ /backup/$d/
umount /backup/$d
done

DAY=`date “+%A”`

rsync -a –delete /usr/local/apache /data2/backups/$DAY
rsync -a –delete /data/solid /data2/backups/$DAY

3、对vger.rutgers.edu的cvs树进行镜像

#!/bin/bash

cd /var/www/cvs/vger/
PATH=/usr/local/bin:/usr/freeware/bin:/usr/bin:/bin

RUN=`lps x | grep rsync | grep -v grep | wc -l`
if [ “$RUN” -gt 0 ]; then
echo already running
exit 1
fi

rsync -az vger.rutgers.edu::cvs/CVSROOT/ChangeLog $HOME/ChangeLog

sum1=`sum $HOME/ChangeLog`
sum2=`sum /var/www/cvs/vger/CVSROOT/ChangeLog`

if [ “$sum1” = “$sum2” ]; then
echo nothing to do
exit 0
fi

rsync -az –delete –force vger.rutgers.edu::cvs/ /var/www/cvs/vger/
exit 0

4、利用find的一种巧妙方式

rsync -avR remote:’`find /home -name “*.[ch]”`’ /tmp/

可以用这种方法列出需要备份的文件列表——这种方法似乎比较少人用到。

五、参考资料:

1、http://rsync.samba.org/
2、rsync examples
3、rsync FAQ

Linux系统启动过程详解

作为一个系统管理员,对于操作系统底层的熟悉是我们相对于软件工程师优势所在,所以一些基础的东西我 可是还要好好加深哦,而系统管理员不光是要学会对系统软件的配置和优化,这些东西所有人经过一段时间的是都能会的,有些时候我们必须自己写些程序实现点小 功能,这些就是跟人家的区别和优势了,当然我自己还有我自己的方向的。

转自:http://www.cnscn.org(CNS电脑与英语学习网)
1)BIOS自检
2)启动Grub/Lilo
3)加载内核
4)执行init进程
5)通过/etc/inittab文件进行初始化
6)登陆Linux

1)BIOS自检
a)POST(Power On Self Test),对硬件进行检测
计算机在通电后首先由BIOS进行自检,即所谓的POST(Power On Self Test),对硬件进行检测
依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入”引导块”
在PC中,Linux是从BIOS中的地址0xFFFF0处开始的
BIOS的第一个步骤是加电自检(POST),对硬件进行检测
第二个步骤是进行本地设备的枚举和初始化
BIOS由两部分组成: POST代码和运行时服务
当POST完成后,它从内存中清理出来,但BIOS运行时服务依然保留在内存中,目标操作系统可以使用这些服务
要引导一个操作系统,BIOS运行时会按照CMOS的设置的顺序来搜索处于活动状态并可引导的设备:软盘、CD-ROM、硬盘上的分区、网络上的某个设备、USB(通常Linux是从硬盘引导的
主引导记录MBR中包含主引导加载程序。MBR是一个512字节大小的扇区,位于磁盘上的第一个扇区中(0道0柱面1扇区))当MBR被加载到RAM中之后,BIOS会把控制权交给MBR

b)提取MBR的信息
要看MBR的内容,请使用下面的命令
#从/dev/sda上读取前512个字节的内容,并将其写入mbr.bin文件中
[root@localhost pam.d]# dd if=/dev/sda of=mbr.bin bs=512 count=1

#以十六进制和ASCII码格式打印这个二进制文件的内容
[root@localhost pam.d]# od -xa mbr.bin
0000000 48eb 0090 d08e 00bc fb7c d88e b9fc 0080
k   H dle nul  so   P   < nul   |   {  so   X   |   9 nul nul
0000020 f48b 00bf 8e06 f3c0 a566 2fea 0006 1000
vt   t   ? nul ack  so   @   s   f   %   j   / ack nul nul dle

2)启动GRUB/Lilo
GRUB和LILO都是引导加载程序,它们会引导操作系统。当机器引导它的操作系统时,BIOS会读取引导介质上最前面的512字节(即MBR: master boot record)

3)加载内核
当内核映像被加载到内存后,内核阶段就加开始了
内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。通常它是一个zImage(压缩映像,小于512KB)或bzImage(较大的压缩映像,大于512KB),它是提前使用zlib进行压缩的
在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始RAM磁盘映像,就会将它移动到内存中,并标明以后使用,然后此例程会调用内核,并开始启动内核引导的过程
在GRUB命令中,我们可以使用initrd映像引导一个特定的内核,方法如下:
grub> kernel /bzImage-2.6.14.2
[Linux-bzImage, setup=0x1400, size=0x29672e]

grub>initrd /initrd-2.6.14.2.img
[Linux-initrd @ 0x5f13000, 0xcc199 bytes]

grub> boot
Uncompressing Linux… Ok, booting the kernel.

如果不知道要引导的内核的名称,只需使用/然后按下Tab键,就会显示内核和initrd映像列表

对grub命令行进行加密
a)使用命令/sbin/grub-md5-crypt来产生grub使用的密码
[root@localhost pam.d]# /sbin/grub-md5-crypt
Password:
Retype password:
$1$3YbPF$zFVRY6J8VxNR9Ok4fXRkr1

b)修改/etc/grub.conf加入password –md5 $1$3YbPF$zFVRY6J8VxNR9Ok4fXRkr1 一定要放在title之前
这样重启系统时在grub的启动grub菜单时,想再按e命令进行编辑时,必须先按p键后输入密码才成

4)执行init进程
init进程是所有进程的起点,内核在完成内核引导后,即在本线程(进程)空间内加载init程序,它的进程号为1
init进程是所有进程的发起者和控制者
init进程有两个作用:
扮演终结父进程的角色:所有的孤儿进程都会被init进程接管
进入某个特定的运行级别时运行相应的程序,以此对各种运行级别进行管理,这个作用由/etc/inittab文件定义的

5)通过/etc/inittab文件进行初始化
init进程的工作是根据/etc/inittab来执行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络等,对于RedHat来说,按以下顺序执行
a)执行/etc/rc.d/rc.sysinit(由init执行的第一个脚本)
此步可进行的工作有:
设置$PATH变量
配置网络
为虚拟内存启动交换
设置系统的主机名
检查root文件系统,以进行必要的修复
检查root文件系统的配额
为root文件系统打开用户和组的配额
以读/写的方式重新装载root文件系统
清除被装载的文件系统表/etc/matb
把root文件系统输入到mtab
使用系统为装入模块做准备
查找模块的相关文件
检查文件系统,以进行必要的修复
加载所有其他文件系统
清除几个/etc文件,如/etc/mtab、/etc/fastboot和/etc/nologin
删除UUCP的lock文件
删除过时的子系统文件
删除过时的pid文件
设置系统时钟
打开交换
初始化串行端口
装入模块

b)执行/etc/rc.d/rcX.d[KS]
首先终止K开头的服务(用来关闭一个服务),然后启动S开头的服务(用来启动一个服务)
对每一个运行级别来说,在/etc/rc.d子目录中都有一个对应的下级目录。
这些运行级别的下级子目录的命名方法上rcX.d, 其中X就是代表运行级别的数字
在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接
链接的名称在K与S后有一个数字,表示执行顺序,数字小的先执行如K01tog-pegasus  、 S00microcode_ctl
对以K开头的脚本执行时系统会传递stop参数,而S开头的脚本系统会传递start参数

c)执行/etc/rc.d/rc.local
Redhat中运行模式2,3,5都把/etc/rc.d/rc.local作为初始化脚本中的最后一个文件,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登陆之前执行的命令

6)执行/bin/login
login程序会提示使用者需输入帐号与密码,接着编码并确认密码的正确性,若二者相合,则为使用者进行初始化环境,并将控制权交给shell,即等用户登录。

—————-至此,Linux启动过程全部结束———————-

dia的一个bug

画网络图,机柜图,系统结构图,加上以前就一直画的UML和E-R图以及EXCEL图表,我居然成为一个专职的绘画员了,或许以后还可以转行从事绘画呢?

以前用VISIO和Rational Rose以及Project,现在既然在UBUNTU下了,那就用了dia。

dia这个软件还是挺好用的,可dia画的图示居然是链接到本地硬盘文件的,而不是内嵌到dia格式中,如果本地不存在这个文件,那所画的图就无法显示了,而visio中就算是外来图片也会内嵌到文件中。

无奈现在只能保存为PNG,有明白这个问题的朋友希望能给我指条明路。不然保存为PNG对于后来要修改就麻烦了。