http://drops.wooyun.org/  最专业的安全知识分享平台

http://www.freebuf.com/  关注黑客与极客

http://book.beifabook.com/product/BookDetail.aspx?Plucode=712105019        Linux安全体系分析与编程目录

最佳的策略是采用分层的方法,即将“老当益壮”的程序,如Snort、 iptables等老前辈与psad、Apparmor、SELinuxu等一些新生力量结合起来,借助强大的分析工具,我们就可以始终站在技术的前沿。

IDS新宠:PSAD。Psad是端口扫描攻击检测程序的简称,它作为一个新工具,可以与iptables和Snort等紧密合作,向我们展示所有试图进入网络的恶意企图。
老当益壮:Snort。它是一款轻量级且易于使用的工具,可以独立运行,也可以与psad和iptables 一起使用
简洁方便:chkrootkit和rootkit。Rootkit检测程序chkrootkit和rootkit Hunter也算是老牌的rootkit检测程序了
多面手:Tripwire。Tripwire是一款入侵检测和数据完整性产品

CGI漏洞

CGI是Common Gateway Interface(公用网关接口)的简称,并不特指一种语言。
Web服务器的安全问题主要包括:1)Web服务器软件编制中的BUG;2)服务器配置的错误。可能导致CGI源代码泄漏,物理路径信息泄漏,系统敏感信息泄漏或远程执行任意命令。CGI语言漏洞分为以下几类:配置错误、边界条件错误、访问验证错误、来源验证错误、输入验证错误、策略错误、使用错误等等。CGI漏洞大多分为一下几种类型:暴露不该暴露的信息、执行不该执行的命令、溢出。


一次利用show files类cgi漏洞成功入侵uta.edu的经历

http://www.chinaunix.net/bbsjh/19/23.html  cgi漏洞利用

httpd的error_log分析

[Mon Apr  :: ] [error] [client 46.28.206.148] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /
[Mon Apr :: ] [error] [client 70.46.57.98] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /tmUnblock.cgi
[Mon Apr :: ] [error] [client 70.46.57.98] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /
[Tue Apr :: ] [error] [client 97.91.223.228] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /tmUnblock.cgi
[Tue Apr :: ] [error] [client 97.91.223.228] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /

第一步获取域名与ip关系

[Tue Apr 07 11:32:01 1010 /dev/pts/0 192.168.2.250 ~]#ping www.fltdz.com
PING www.fltdz.com (58.64.136.166) 56(84) bytes of data.
64 bytes from 58.64.136.166: icmp_seq=1 ttl=48 time=79.6 ms
64 bytes from 58.64.136.166: icmp_seq=2 ttl=48 time=76.2 ms
64 bytes from 58.64.136.166: icmp_seq=3 ttl=48 time=63.2 ms
^C
--- www.fltdz.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2245ms
rtt min/avg/max/mdev = 63.245/73.044/79.639/7.069 ms

第二步请出瑞士军刀nc(netcat)
[Tue Apr 07 11:32:47 1011 /dev/pts/0 192.168.2.250 ~]#yum install nc

我用get / http/1.1来取得他的webserver的相关信息
[Tue Apr 07 11:32:47 1011 /dev/pts/0 192.168.2.250 ~]#nc -vv 58.64.136.166 80
Connection to 58.64.136.166 80 port [tcp/http] succeeded!
输入下面,然后两次回车
GET / HTTP/1.1

HTTP/1.1 400 Bad Request
Server: nginx/1.0.2
Date: Tue, 07 Apr 2015 03:43:36 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close

ac
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.0.2</center>
</body>
</html>

0

[Tue Apr 07 11:33:59 1012 /dev/pts/0 192.168.2.250 ~]#

第三步由于信息量太少请出扫描器之王nmap
[Tue Apr 07 11:46:16 1015 /dev/pts/0 192.168.2.250 ~]yum install nmap
[Tue Apr 07 11:46:16 1015 /dev/pts/0 192.168.2.250 ~]#nmap -sS -O -vv 192.168.2.2

Starting Nmap 5.51 ( http://nmap.org ) at 2015-04-07 11:46 CST
Initiating ARP Ping Scan at 11:46
Scanning 192.168.2.2 [1 port]
Completed ARP Ping Scan at 11:46, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 11:46
Completed Parallel DNS resolution of 1 host. at 11:46, 0.09s elapsed
Initiating SYN Stealth Scan at 11:46
Scanning 192.168.2.2 [1000 ports]
Discovered open port 111/tcp on 192.168.2.2
Discovered open port 22/tcp on 192.168.2.2
Discovered open port 5500/tcp on 192.168.2.2
Discovered open port 5801/tcp on 192.168.2.2
Discovered open port 5666/tcp on 192.168.2.2
Discovered open port 10000/tcp on 192.168.2.2
Discovered open port 5901/tcp on 192.168.2.2
Discovered open port 2049/tcp on 192.168.2.2
Discovered open port 1521/tcp on 192.168.2.2
Discovered open port 6001/tcp on 192.168.2.2
Discovered open port 10003/tcp on 192.168.2.2
Discovered open port 80/tcp on 192.168.2.2
Completed SYN Stealth Scan at 11:46, 1.10s elapsed (1000 total ports)
Initiating OS detection (try #1) against 192.168.2.2
Retrying OS detection (try #2) against 192.168.2.2
Retrying OS detection (try #3) against 192.168.2.2
Retrying OS detection (try #4) against 192.168.2.2
Retrying OS detection (try #5) against 192.168.2.2
Nmap scan report for 192.168.2.2
Host is up (0.00023s latency).
Scanned at 2015-04-07 11:46:25 CST for 13s
Not shown: 988 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
80/tcp    open  http
111/tcp   open  rpcbind
1521/tcp  open  oracle
2049/tcp  open  nfs
5500/tcp  open  hotline
5666/tcp  open  nrpe
5801/tcp  open  vnc-http-1
5901/tcp  open  vnc-1
6001/tcp  open  X11:1
10000/tcp open  snet-sensor-mgmt
10003/tcp open  documentum_s
MAC Address: E4:1F:13:80:ED:2C (IBM)
No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=5.51%D=4/7%OT=22%CT=1%CU=34628%PV=Y%DS=1%DC=D%G=Y%M=E41F13%TM=552
OS:3531E%P=x86_64-redhat-linux-gnu)SEQ(SP=108%GCD=1%ISR=109%TI=Z%CI=Z%II=I%
OS:TS=A)OPS(O1=M5B4ST11NW7%O2=M5B4ST11NW7%O3=M5B4NNT11NW7%O4=M5B4ST11NW7%O5
OS:=M5B4ST11NW7%O6=M5B4ST11)WIN(W1=16A0%W2=16A0%W3=16A0%W4=16A0%W5=16A0%W6=
OS:16A0)ECN(R=Y%DF=Y%T=40%W=16D0%O=M5B4NNSNW7%CC=N%Q=)T1(R=Y%DF=Y%T=40%S=O%
OS:A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=Y%DF=Y%T=40%W=16A0%S=O%A=S+%F=AS%O=M5B4ST1
OS:1NW7%RD=0%Q=)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=4
OS:0%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%
OS:Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=40%IPL=16
OS:4%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD=S)

Uptime guess: 39.383 days (since Fri Feb 27 02:34:52 2015)
Network Distance: 1 hop
TCP Sequence Prediction: Difficulty=264 (Good luck!)
IP ID Sequence Generation: All zeros

Read data files from: /usr/share/nmap
OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.87 seconds
           Raw packets sent: 1103 (52.326KB) | Rcvd: 1076 (46.626KB)
[Tue Apr 07 11:46:38 1016 /dev/pts/0 192.168.2.250 ~]#

linux安全手段

 改名,强密码,改端口,开防火墙
组策略,ipsec策略 、用chattr命令防止系统中某个关键文件被修改
# chattr +i /etc/fstab
然后试一下rm mv rename等命令操作于该文件,都是得到Operation not permitted 的结果
、让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作
# chattr +a /data1/user_act.log
、不能修改root密码
lsattr /etc/passwd /etc/shadow
chattr -i /etc/passwd
chattr -i /etc/shadow 再修改root的密码就可以
chattr +i /etc/passwd
chattr +i /etc/shadow 策略与手段
.对目录设置粘滞位限定用户只能对自己的文件进行处理 stick bit
.对文件设置setuid可以让执行该命令的用户以该命令拥有者的权限去执行,setuid使用不是无限制的。出于安全目的,只能应用在Linux ELF格式二进制文件上,而不能用于脚本文件。
.防止某个文件被修改 chattr
.安全分区与只读分区 mount -o remount,noexec,ro
.root无法远程登录 手段有三个
.操作机,机房与公司,全部通过公钥认证,避免密码泄漏
.一律在win中cmd界面,用命令,这样不会有记录 想限制root在指定终端登录。如下做后,无法登录。
、在 /etc/pam.d/sshd 添加 auth required pam_securetty.so
、在/etc/securetty 中添加
pts/
pts/
依然无法用root登录ssh服务器。
PS:我的系统是arch。注释掉/etc/pam.d/sshd中的 pam_securetty.so,可以登录。 vim /etc/ssh/sshd_config
#PermitRootLogin yes
找到这一行,去掉注释。
改为
PermitRootLogin no
service sshd restart 我们经常使用SSH登录管理服务器,在享受便利的同时也会遇到一些安全隐患,最常见的就是SSH密码被暴力破解。如果我们将SSH密码设置的过于复杂,又不容易记,因此限制SSH登录方式,只能使用key登录是一个不错的选择,既可以保证安全性,又非常方便。具体的修改方式如下:
、添加信任key,并测试能否不通过密码直接登录
将公钥信息加入用户目录的SSH认证key文件下。(linux下可以用ssh-keygen命令生成,windows下可以用SecureCRT等工具生成)
比如,将如下格式的公钥信息拷贝到/root/.ssh/authorized_keys
ssh-rsa AAAAB3.....H+5w== hujiankang@qiyi.com
此时,带有对应私钥的机器就已经拥有了访问该机器root账户的权限。 完成配置后,请采用带对应私钥的机器访问服务器,如果不提示输入password,直接登录,则证明配置正确。 、修改SSH配置文件并重启SSH服务
SSH配置文件的位置:/etc/ssh/sshd_config
找到其中的两个参数配置:
PasswordAuthentication
ChallengeResponseAuthentication
将这两个参数值修改为no:
PasswordAuthentication no
ChallengeResponseAuthentication no
然后重启SSH服务。
# service sshd restart
现在我们就已经限制用户的SSH登录方式,只允许用key方式登录。
进一步测试,如果我们用一台不带信任key的机器尝试登录,那么会提示如下信息。
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
证明限制SSH登录方式成功。 可以说sudo命令补偿了它的一个致命缺陷,那就是任何一个想转为root用户的人都得掌握root用户的密码 linux安全设置 .删除所有那些不能在你系统上使用的默认用户和组账户: lp,sync,shutdown,halt, news, uucp, operator, games, gopher .ROOT自动从shell注销,编辑你的配置文件”vi /etc/profile”,在某个地方加入如下行,
“HISTFILESIZE=”
TMOUT=
我们为变量”TMOUT=”输入的这个值使用秒表示的、代表一个小时(*=3600秒)。如果你将此行加入你的“/etc/profile” 文件,那么在一小时的
非活动状态之后将要系统里的所有用户自动注销。你可以在用户私人的”.bashrc”文件里面设置这个变量,可以在一个确定的时间以后自动注销他们。 .禁止并且卸载所有没有用的服务
你必须禁止一切卸载所有你不用的的服务,那样的话,你就能少担心一些。看看你的”/etc/inetd.conf”文件,用注释的方法禁用(在一行的开始加个#),
然后给inetd进程发送一个SIGHUP命令去更新到当前的”inetd.conf”文件。这样做:
第一步把”/etc/inetd.conf”更改许可权限成600,那样的话,就只有root可以读和写。
[Root@kapil /]# chmod /etc/inetd.conf
第二步确保”/etc/inetd.conf”的所有者是root。
第三步编辑inetd.conf文件(vi /etc/inetd.conf),并且禁止一些服务,就像:ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-, pop-, finger, auth等等,
除非你打算用它。关闭这些服务就降低一些风险。
第四步给你的inetd进程发送一个HUP信号
[root@kapil /]# killall -HUP inetd
第五步设置”/etc/inetd.conf”文件为不可更改,使用 chattr 命令,这样的话,没人能修改那个文件。简单的设置文件为不可更改,执行如下命令:
[root@kapil /]# chattr +i /etc/inetd.conf
这将防止对”inetd.conf”文件的任何更改(意外的更改或者其他更改)。只有超级用户root能设置或者清除这个文件属性。修改inetd.conf 简单的取消不可更改的设置,执行如下命令:
[root@kapil /]# chattr -i /etc/inetd.conf .免疫”/etc/services”文件
你必须免疫 “/etc/services” 文件,防止未经授权的删除、增加服务。
免疫 “/etc/services” 文件,使用命令:
[root@kapil /]# chattr +i /etc/services .禁止Control-Alt-Deletc键盘关机命令
在你的”/etc/inittab”文件里面注释掉如下的行(用一个”#”)。
编辑inittab文件(vi /etc/inittab),
更换:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
读入:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
现在,按照如下提示输入,让更改生效:
[root@kapil /]# /sbin/init q .为脚本文件整理”/etc/rc.d/init.d”下的权限
整理脚本文件的许可权限,可靠的开始和结束所有你需要在引导时运行的常态进程,这样做:
[root@kapil/]# chmod -R /etc/rc.d/init.d/*
这意味着只有root可以被允许读,写,和执行目录里面的脚本文件。 7.隐藏你的系统信息
默认状态下,当你登录到linux机器时,他告诉你Linux分布商的名字,版本,核心版本和服务器名字。这对一个骇客来说从你的服务器得到这些信息足够了,所以必须立刻用一个”Login:”提示符提示用户。
  第一步
  这样做,编辑”/etc/rc.d/rc.local”文件,放置”#”在如下行的前面。
  # This will overwrite /etc/issue at every boot. So, make any changes you
  # want to make to /etc/issue here or you will lose them when you reboot.
  #echo “” >; /etc/issue
  #echo “$R” >;>; /etc/issue
  #echo “Kernel $(uname -r) on $a $(uname -m)” >;>; /etc/issue
  #
  #cp -f /etc/issue /etc/issue.net
  #echo >;>; /etc/issue
  第二步
  然后,删除如下文件:在”/etc/”目录下的”issue.net” 和 “issue”:
  [root@kapil /]# rm -f /etc/issue
  [root@kapil /]# rm -f /etc/issue.net 8.禁止未用的 SUID/SGID 程序
  一个常规用户如果设置为SUID root,将能够作为root运行程序。一个系统管理员必须最小化使用这些 SUID/GUID程序,而且禁止那些不需要的程序。
  第1步
  从root拥有的程序里发现所有有`s’位的程序,用此命令:
  [root@kapil]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
  在被选中的程序上禁止suid 位,键入如下命令:
  [root@kapil /]# chmod a-s [program]
  
9.关闭ipv6
  vi /etc/modprobe.conf,在文件中添加以下两行
  alias net-pf-10 off
  alias ipv6 off
我怎样才能区分程序是否使用了PAM验证?
  使用ldd命令,如果这个程序的使用的动态连接库没有libpam和libpam_misc,那它肯定不使用PAM验证。然而,还有可能已经包含这两个库了,但是因为某些问题,程序无法正常工作。因此需要更好的方法来测试。
  对于需要使用PAM的程序,需要在/etc/pam.d目录中为其设置配置文件。配置文件的名字被编写进程序源代码中,通常和程序的名字是一样的,但不总是这样。例如:有个程序叫作pamprog,它的PAM配置文件是/etc/pam.d/pamprog。在配置文件中,只有下面两行:
auth required pam_permit.so
auth required pam_warn.so
  现在对其进行测试。第一行,表示所有的用户都允许通过;第二行表示想syslog中写入一条警告信息。如果测试成功,就表示程序能够使用PAM进行验证。然后你可以在配置文件中加入更为复杂的验证功能。 [root@84-monitor ~]# ldd /usr/bin/passwd|grep pam
libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007fdfac008000)
libpam.so.0 => /lib64/libpam.so.0 (0x00007fdfab620000)
[root@84-monitor ~]# ldd /bin/login|grep pam
libpam.so.0 => /lib64/libpam.so.0 (0x00007f7d4c9d8000)
libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007f7d4c7d0000)
[root@84-monitor ~]# ldd /usr/sbin/sshd|grep pam
libpam.so.0 => /lib64/libpam.so.0 (0x00007f20629b8000)
[root@84-monitor pam.d]# ldd /usr/sbin/crond|grep pam
        libpam.so.0 => /lib64/libpam.so.0 (0x00007f6095e38000)

linux安全的更多相关文章

  1. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  2. Linux 内核概述 - Linux Kernel

    Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...

  3. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  4. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  5. [linux]阿里云主机的免登陆安全SSH配置与思考

    公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...

  6. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  7. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  8. SQL Server on Linux 理由浅析

    SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...

  9. Microsoft Loves Linux

    微软新任CEO纳德拉提出的“Microsoft Loves Linux”,并且微软宣布.NET框架的开源,近期Microsoft不但宣布了Linux平台的SQL Server,还宣布了Microsof ...

  10. Linux 江湖系列阶段性总结

    引言 我使用 Linux 已经有很多年了,最开始接触 Linux 的时候是从 RedHat 9(没有 Enterprise),中途换过 N 个不同的发行版.多年前,我在 BlogJava 上面分享 J ...

随机推荐

  1. IOS socket开发基础

    摘要 详细介绍了iOS的socket开发,说明了tcp和udp的区别,简单说明了tcp的三次握手四次挥手,用c语言分别实现了TCPsocket和UDPsocket的客户端和服务端,本文的作用是让我们了 ...

  2. Xcode7推出的新优惠:免证书测试

    1.准备 注意:一定要让你的真机设备的系统版本和app的系统版本想对应,如果不对应就会出现一个很常见的问题:could not find developer disk image 2.首先先安装Xco ...

  3. # 20145210 《Java程序设计》第05周学习总结

    教材学习内容总结 第八章 异常处理 8.1语法与继承架构 •使用 try.catch •Java中所有信息都会被打包为对象,如果愿意,可以尝试(try)捕捉(catch)代表错误的对象后做一些处理 • ...

  4. Redis - 密码配置和主从复制

    使用config set命令修改requirepass参数配置Redis密码config set requirepass password 也可以通过配置文件修改密码,重启后生效. 克隆虚拟机,分别运 ...

  5. CentOS安装Nginx负载

    一.准备 1.安装Nginx 地址:http://www.cnblogs.com/rainy-shurun/p/4983260.html 二.配置负载 1.配置nginx.conf

  6. Flume NG 简介及配置实战

    Flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 clo ...

  7. MariaDB exists 学习

    MariaDB exists 学习 exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当 exists里的条件语句能够返回记录行时(无论记录行是的多少,只要能返回),条件就 ...

  8. 【转】eclipse 安装插件

    eclipse安装插件或许没有什么多的可讲,但对于刚刚接触eclipse这款IDE的新手来说,可能还是会有点棘手! eclipse安装插件大致三种方法: 方法一:自身安装器 使用eclipse的Sof ...

  9. 设计模式:Strategy 策略模式 -- 行为型

    设计模式 策略模式Strategy(对象行为型) 这是几年前写的文字(转载做的笔记更准确些),发觉还是废话多了点. 其实,核心就是5.结构中的UML图 5.1 和 5.2(新增).现在看这张图就觉得一 ...

  10. 纯代码写UI的时候,如何指定style?

    有的时候,需要使用纯代码实现Android UI,那么这个时候如何指定某个UI组件的样式呢? 一般来说,UI组件都有一些set方法可供使用,以调整一些UI属性,从而达到调整样式的目的. 但是,情况并非 ...