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。