
脚本大致内容: 基本信息统计(IP地址、MAC地址、端口信息、服务信息等)、主机安全检查(包括等保三级要求主机相关的检查点)、系统性能统计(暂时未加入分析)、恶意代码、程序检查等检查点。
脚本内容涉及到:
1、查看系统密码文件修改时间
2、查看是否开启了ssh服务
3、查看系统SSH远程访问设置策略(hostdeny拒绝列表)
4、查看shell是否设置超时锁定策略
5、查看syslog日志审计服务是否开启
6、查看syslog日志是否开启外发
7、查看passwd文件中有哪些特权用户
8、查看系统中是否存在空口令账户
9、PHP、JSP、perl、Python、HTML、以及linux下可执行文件内容的检查
里面列举了一些常见webshell、提权EXP、以及Python扫描工具、嗅探工具的特征,如果发现此类相关的文件,则会显示出来,或者拷贝一份到/tmp/目录下
例如:能扫描到的linux下提权工具:
一共是172个文件。都可以扫描的到。。。。
其实整个脚本相对起来比较简单,主要用到的命令为
find / -type
if语句
awk命令
more
egrep
等命令组成。
比如说awk命令,我们用more或cat命令,读取某个文件内容,然后通过awk进行筛选和输出,来显示我们想要看的东西
例如:
more /etc/logindefs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' ' '{if($2!=90){print "/etc/logindefs里面的"$1 "设置的是"$2"天,请管理员改成90天。"}}'
从这里我们可以看到,通过more来打开/etc/logindefs文件,并查找关键字 “PASS_MAX_DAYS”, 用awk命令,筛选以”为分隔符的内容,用作判断,如果$2第二个分隔符位置的内容不等于90,则输出该内容。
同理,任意针对文件内容做筛选的结果,都可以通过这样的方式去显示我们想要显示的内容。
又例如:
echo "查看系统中存在哪些非系统默认用户"
echo "root:x:“该值大于500为新创建用户,小于或等于500为系统初始用户”"
more /etc/passwd |awk -F ":" '{if($3>500){print "/etc/passwd里面的"$1 "的值为"$3",请管理员确认该账户是否正常。"}}'
echo ------------------------------------------------------------------------
if语句相关:
echo --------------------------------------------------------------------------
echo "检查系统文件完整性2(MD5检查)"
echo "该项会获取部分关键文件的MD5值并入库,默认保存在/etc/md5db中"
echo "如果第一次执行,则会提示md5sum: /sbin/portmap: 没有那个文件或目录"
echo "第二次重复检查时,则会对MD5DB中的MD5值进行匹配,来判断文件是否被更改过"
file="/etc/md5db"
if [ -e "$file" ]; then md5sum -c /etc/md5db 2>&1;
else
md5sum /etc/passwd >>/etc/md5db
md5sum /etc/shadow >>/etc/md5db
md5sum /etc/group >>/etc/md5db
md5sum /usr/bin/passwd >>/etc/md5db
md5sum /sbin/portmap>>/etc/md5db
md5sum /bin/login >>/etc/md5db
md5sum /bin/ls >>/etc/md5db
md5sum /bin/ps >>/etc/md5db
md5sum /usr/bin/top >>/etc/md5db;
fi
echo ----------------------------------------------------------------------
这里呢,对部分敏感文件的MD5值做了下验证,大致思路是,先检查 /etc/md5db 是否存在,如果不存在的话,则将所涉及文件的MD5值入库,并保存到 /etc/md5db文件中,当我们第二次对服务器进行检查时,则会对比两次的MD5值,如果MD5值发生变化,则会进行提醒。
脚本本身没什么复杂的东西,我先贴出部分内容,供大家参考下。
#!/bin/bash
echo " (__)"
echo " (oo)"
echo " /------\/ "
echo " / | || "
echo " /\---/\ "
echo " ~~ ~~ "
echo ""Are You Ready""
read key
echo "警告:本脚本只是一个检查的 *** 作,未对服务器做任何修改,管理员可以根据此报告进行相应的设置。"
echo ---------------------------------------主机安全检查-----------------------
echo "系统版本"
uname -a
echo --------------------------------------------------------------------------
echo "本机的ip地址是:"
ifconfig | grep --color "\([0-9]\{1,3\}\\)\{3\}[0-9]\{1,3\}"
echo --------------------------------------------------------------------------
awk -F":" '{if($2!~/^!|^/){print "("$1")" " 是一个未被锁定的账户,请管理员检查是否需要锁定它或者删除它。"}}' /etc/shadow
echo --------------------------------------------------------------------------
more /etc/logindefs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' ' '{if($2!=90){print "/etc/logindefs里面的"$1 "设置的是"$2"天,请管理员改成90天。"}}'
echo --------------------------------------------------------------------------
more /etc/logindefs | grep -E "PASS_MIN_LEN" | grep -v "#" |awk -F' ' '{if($2!=6){print "/etc/logindefs里面的"$1 "设置的是"$2"个字符,请管理员改成6个字符。"}}'
echo --------------------------------------------------------------------------
more /etc/logindefs | grep -E "PASS_WARN_AGE" | grep -v "#" |awk -F' ' '{if($2!=10){print "/etc/logindefs里面的"$1 "设置的是"$2"天,请管理员将口令到期警告天数改成10天。"}}'
echo --------------------------------------------------------------------------
grep TMOUT /etc/profile /etc/bashrc > /dev/null|| echo "未设置登录超时限制,请设置之,设置方法:在/etc/profile或者/etc/bashrc里面添加TMOUT=600参数"
echo --------------------------------------------------------------------------
if ps -elf |grep xinet |grep -v "grep xinet";then
echo "xinetd 服务正在运行,请检查是否可以把xinnetd服务关闭"
else
echo "xinetd 服务未开启"
fi
echo --------------------------------------------------------------------------
echo "查看系统密码文件修改时间"
ls -ltr /etc/passwd
echo --------------------------------------------------------------------------
echo "查看是否开启了ssh服务"
if service sshd status | grep -E "listening on|active \(running\)"; then
echo "SSH服务已开启"
else
echo "SSH服务未开启"
fi
echo --------------------------------------------------------------------------
echo "查看是否开启了TELNET服务"
if more /etc/xinetdd/telnetd 2>&1|grep -E "disable=no"; then
echo "TELNET服务已开启 "
else
echo "TELNET服务未开启 "
fi
echo --------------------------------------------------------------------------
echo "查看系统SSH远程访问设置策略(hostdeny拒绝列表)"
if more /etc/hostsdeny | grep -E "sshd: ";more /etc/hostsdeny | grep -E "sshd"; then
echo "远程访问策略已设置 "
else
echo "远程访问策略未设置 "
fi
echo --------------------------------------------------------------------------
可以啊,看你是想用shell,还是c++都可以啊
shell写脚本就不用说了,
C++的话可以调用类似system(“SAC”);的函数
另外,应该有SAC 在命令中直接打开file1的选项,你可以SAC --help看看
ps 是显示运行的程序
kill 是杀死运行的进程
两个和文件目录有关系么?
---------------------
杀别人的进程必须有权限,不然权限系统就是摆设。
不过你可以借助 sudo 的无密码授权功能,或者 SELinux 的授权功能给一个 shell 脚本增加直接获得 root 的权限,之后这个脚本里面来进行显示、杀死进程的工作。不过这个脚本会很危险,因为别人有可能借助这个脚本实现获取完整 root 权限的。这种安全问题导致的大事不是一个两个了。很多软件曾经都闹过这种问题。
另外,进程只能杀死(kill)不能删除(delete),而且删除用户和杀死进程又是两个事情。
新建脚本文件 vi 1sh
查看脚本内容 cat 1sh
修改文件权限 chmod +x 1sh
运行文件 /1sh
建立硬连接 ln 1sh 1shhard
建立符号连接 ln -s 1sh 1shsoft
复制文件 cp 1sh 2sh
删除文件 rm 2sh
新建目录 mkdir dir1
删除目录 rm -rf dir1
您好,在Linux *** 作系统中,nofile是指当前进程打开的最大文件描述符数量。要查看当前进程的nofile,可以使用以下命令:
1 使用命令“ulimit -n”可以查看当前用户的nofile限制。如果该值不够大,可以使用“ulimit -n <number>”来增加nofile限制。
2 使用命令“cat /proc/<pid>/limits”可以查看指定进程的nofile限制。其中,<pid>为要查看的进程的进程ID。
3 使用命令“cat /proc/<pid>/status | grep Nofiles”可以查看指定进程打开的文件描述符数量。其中,<pid>为要查看的进程的进程ID。
4 使用命令“lsof -p <pid> | wc -l”可以查看指定进程打开的文件数量。其中,<pid>为要查看的进程的进程ID。
以上是查看当前进程的nofile的几种方法,可以根据实际情况选择合适的方法进行查看。
以上就是关于如何编写自己的Linux安全检查脚本全部的内容,包括:如何编写自己的Linux安全检查脚本、在linux下,使用脚本,把远程相应的文件大小,和最新时间抓取下来、如何在LINUX的终端机里面的显示没有权限的文件目录呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)