Linux主机的安全管理
收集主机的信息
列出主机IP
/sbin/ifconfig |grep 'inet addr:'|grep -v '127.0.0.1'|awk '{print $2}'| awk -F: '{print $2}'
找出主机名
#! /bin/bash p=$1 HostCmd="/bin/hostname" # 取得主机名 HostName=$($HostCmd) if [ -n "$p" ]; then if [ $p = host ]; then MachineName=${HostName%%.*} #由尾部去掉最长的.*样式的字符串,如此即可把域名取除。 echo $MachineName ; exit 0 elif [ $p = domain ]; then Domain=${HostName#*.} #最左方去掉最短的*.样式的字符串。 echo $Domain; exit 0 fi fi echo $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 nounset FreeCmd="/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/partitions major minor #blocks name 8 0 20971520 sda 8 1 512000 sda1 8 2 20458496 sda2 253 0 19439616 dm-0 253 1 1015808 dm-1脚本文件,找到系统中挂载的磁盘剩余可用的空间大小,并列出磁盘类型。
#! /bin/bash # 变量要通过声明才能使用 shopt -s -o nounset declare -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 == /* ]]; then p=/$p fi get_usedTotal $1 get_avaibleTotal $1 #! /bin/bash # 使用变量前,需要先声明 shopt -s -o nounset while read x x x m do case "$m"in hd?) Media=$(cat /proc/ide/$m/media) if [ "$Media" = "disk" ] ; then echo "磁盘驱动器: $m, 型号: $(cat /proc/ide/$m/model)" fi ;; sd?) M=$(scsi_info /dev/$m | grep MODEL) M=${M#*\"} M=${M%\"*} echo "磁盘驱动器: $m, 型号: $M" ;; *) ;; esac done < /proc/partitions
列出系统平均负载
w和top都可以列出system load averages,分别使用脚本截取:
w命令实例:
#! /bin/bash # 使用变量前要先声明 shopt -s -o nounset W="/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 nounset T="/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 nounset DIR=${1:?'请提供想要检查的目录,例如/var'} if [[ ! $DIR == /* ]]; then DIR=/$DIR fi declare -i size SIZE #如果子目录超过了设定的大小就予以列车显示,这里是 50MB。