Linux主机的安全管理
收集主机的信息
列出主机IP
/sbin/ifconfig |grep 'inet addr:'|grep -v '127.0.0.1'|awk '{print $2}'| awk -F: '{print $2}'
找出主机名
#! /bin/bashp=$1HostCmd="/bin/hostname"# 取得主机名HostName=$($HostCmd)if [ -n "$p" ]; thenif [ $p = host ]; thenMachineName=${HostName%%.*} #由尾部去掉最长的.*样式的字符串,如此即可把域名取除。echo $MachineName ; exit 0elif [ $p = domain ]; thenDomain=${HostName#*.} #最左方去掉最短的*.样式的字符串。echo $Domain; exit 0fifiecho $HostName
列出核心信息
uname --help用法:uname [选项]...输出一组系统信息。如果不跟随选项,则视为只附加-s 选项。-a, --all 以如下次序输出所有信息。其中若-p 和-i 的探测结果不可知则被省略:-s, --kernel-name 输出内核名称-n, --nodename 输出网络节点上的主机名-r, --kernel-release 输出内核发行号-v, --kernel-version 输出内核版本-m, --machine 输出主机的硬件架构名称-p, --processor 输出处理器类型或"unknown"-i, --hardware-platform 输出硬件平台或"unknown"-o, --operating-system 输出操作系统名称--help 显示此帮助信息并退出--version 显示版本信息并退出
列出内存的使用情况
#! /bin/bash# 变量要先声明后才能使用shopt -s -o nounsetFreeCmd="/usr/bin/free"Mem=$($FreeCmd | grep ^Mem:)TotalMem=$(echo $Mem | awk '{print $2}')UsedMem=$(echo $Mem | awk '{print $3}')FreeMem=$(echo $Mem | awk '{print $4}')echo $TotalMem $UsedMem $FreeMem
列出磁盘种类和磁盘容量
如果想要获得主机中磁盘驱动器种类,可先读取核心的分区信息,在读取住磁盘的设备型号。核心的分区信息记录在/proc/partitions这个虚拟文件中,每一行以空白隔开,分成4个字段,分别是:主要设备代码(MAJOR)、次要设备代码(MINOR)、拥有的区块数,设备名称。
[root@localhost ~]# cat /proc/partitionsmajor minor #blocks name8 0 20971520 sda8 1 512000 sda18 2 20458496 sda2253 0 19439616 dm-0253 1 1015808 dm-1
脚本文件,找到系统中挂载的磁盘剩余可用的空间大小,并列出磁盘类型。
#! /bin/bash# 变量要通过声明才能使用shopt -s -o nounsetdeclare -i TOTAL## 函数区#get_usedTotal() {TOTAL=$(df -B 1024K | grep ${p}$ | awk '{print $3}')echo "已使用空间的大小: $TOTAL MB."}get_avaibleTotal() {TOTAL=$(df -B 1024K | grep ${p}$ | awk '{print $4}')echo "剩余可用的空间大小: $TOTAL MB."}## 程序区#p=${1:?'请提供分区挂在点,例如: /、/home、/var'}if [[ ! $p == /* ]]; thenp=/$pfiget_usedTotal $1get_avaibleTotal $1#! /bin/bash# 使用变量前,需要先声明shopt -s -o nounsetwhile read x x x mdocase "$m"inhd?)Media=$(cat /proc/ide/$m/media)if [ "$Media" = "disk" ] ; thenecho "磁盘驱动器: $m, 型号: $(cat /proc/ide/$m/model)"fi;;sd?)M=$(scsi_info /dev/$m | grep MODEL)M=${M#*\"}M=${M%\"*}echo "磁盘驱动器: $m, 型号: $M";;*);;esacdone < /proc/partitions
列出系统平均负载
w和top都可以列出system load averages,分别使用脚本截取:
w命令实例:
#! /bin/bash# 使用变量前要先声明shopt -s -o nounsetW="/usr/bin/w"show_loading=$($W | head -1)L1=$(echo $show_loading | awk '{print $9}')L5=$(echo $show_loading | awk '{print $10}')L15=$(echo $show_loading | awk '{print $11}')L1=${L1%,*}L5=${L5%,*}L15=${L15%,*}echo "1 5 15分钟系统的平均负载: $L1 $L5 $L15”
top命令实例:
#! /bin/bash# 使用变量前要先声明shopt -s -o nounsetT="/usr/bin/top"show_loading=$($T | head -1)L1=$(echo $show_loading | awk '{print $11}')L5=$(echo $show_loading | awk '{print $12}')L15=$(echo $show_loading | awk '{print $13}')L1=${L1%,*}L5=${L5%,*}L15=${L15%,*}echo "1 5 15的系统平均负载: $L1 $L5 $L15"
列出系统中隐藏文件和具有特权的文件
找出系统中隐藏文件并且具有sticker bit权限的目录。
find / -name '.*' -perm 1777
这里的选项-perm是指对文件权限的属性之意,-perm 1777的意思是说:凡文件权限刚好是1777者,符合对比。
找出影藏并且有切换成群组身份的文件:
find / -name '.*' -perm +2000
列出影藏文件兵并且具有切换成拥有者身份的文件:
find / -name '.*' -perm +4000
如果系统中具有4xxx的隐藏文件,这时应该注意系统有可能已经被cracker放入了后门程序,如果想列出这样的文件,可以使用如下的命令:
find / -name '.*' -perm +4000 -exec ls -a {} \;
这里的-exec代表找到特定的文件之后,执行特定的指令。{}代表找到的文件,;代表程序就执行到此结束,斜杠表示转义。
经过判断后,决定将这些文件删除,可以执行如下命令。
find / -name '.*' -perm +4000 -exec rm -rf {} \;
注意:这里的命令对系统具有破坏性,要在上一条命令检查过后,在执行。
列出占用磁盘较多的文件
列出某一目录下面超过指定大小的子目录。
#! /bin/bash# 在使用变量之前要先声明变量shopt -s -o nounsetDIR=${1:?'请提供想要检查的目录,例如/var'}if [[ ! $DIR == /* ]]; thenDIR=/$DIRfideclare -i size SIZE#如果子目录超过了设定的大小就予以列车显示,这里是 50MB。