- 浏览: 30929 次
- 性别:
- 来自: 深圳
最新评论
linux黑客总结
linux安全问题概述
1.1 linux用户
添加一个用户并付于口令 adduser passwd
/etc/passwd 和/etc/shadow文件,保存用户名和密码文件。查看其说明。
LINUX将用户分为三类:ROOT,普通用户和系统用户。其中系统用户从不登录,这些账号用于特定的目的,不属于任何特定的人,没有主目录。它包括 ftp/apache和lp。ftp 用于匿名登录,apache用于处理http请求等,lp用来处理打印功能.
用户组的概念,多个用户的集合./etc/group
Usermod –G 把某用户加入某组
Chgrp 更改文件组的所有者
Chmod改变文件的权限
当我们用touch创建一个文本文档的时候,我们也可以用umask来设置用户的默认许可值
Chattr修改文件的属性 lsattr显示文件的属性
1.2 其它安全性控制
1.2.1信号
信号是一个进程发送给另一个进程的消息,TERM(终止信号)是发送给进程的常用信号之一,杀掉失控的进程,HUP信号通常用于当程序的配置改变后,强制进程重新读取配置文件.
Kill –TERM 1111
Killall –HUP 1111
1.2.2特权端口
小于1024的端口
1.2.3虚拟内存管理
任何消耗过多内存的进程都会被内核杀掉,而其它进程不受影响,这是
Linux内存管理安全性的一个特点,其它的操作系统没有这样的机制.进程在启动时都分配有自己的内存区保存程序和静态变量,内核自已处理任何其它的运行时内存分配,除非事先以标准的进程间通信方法去做特定的设置,否则任何进程都不能访问其它进程的内存。
1.2.4系统日志
1.2.5 /etc/securetty
指定了允许root登录的TTY设备。
认证模块PAM(pluggable authentication module),linux发布的默认配置
1.2.6 Chrooting
1.2.7使用LINUX权来减少ROOT风险
1.3错误代码
1.3.1末降低权限
1.3.2缓冲区溢出
把数据塞到小于其容积的空间,就会发生缓冲区溢出,许多语言没有内建的边界检查机制—编译期无警告,运行期无防护。攻击者在他的数据中手工编写合法的机器代码,强制函数来运行一些指令,而不是返回main。这些代码通常被称为shell 代码,因为大多数针对缓冲区溢出的攻击都会试图运行/bin/sh的一个拷贝,或者在/tmp中生成一个suid为root的/bin/sh的拷贝。
Libsafe是一个动态加载库,它通过中间软件层来截获对所有存在这类漏洞的库函数的请求,并激活与这些库函数同等功能的替代版本,这一版本将可能的缓冲区溢出限制在当前的堆栈中,从而防止那类可能被攻击者用于劫持程序的数据覆盖行为的发生。
Stackguard工具
1.3.3格式字符串漏洞
它通常出现在程序员使用类似于printf()或者syslog()等支持格式化输入的函数打印简单字符串的场合,正确的方式应该为
Printf(“%s”,str);
Libsafe工具可以解决这个问题
1.3.4竟争条件
1.3.5 审计工具
Rats 审计c,c++,perl,python,php或者用flawfinder工具都可以审计第一节所说的问题。
2.预防措施
2.1弱点扫描程序
2.1.1系统安全扫描程序
使用find命令发现系统中所有的suid或者sgid程序,这些地方通常是入侵的起始
Find / \ ( -perm -02000 –o –perm -04000 \) –ls
推荐使用 lsat工具来检查系统的安全性linux security auditing tool
2.1.2网络安全扫描
2.2扫描检测器
2.3加固系统
2.4日志文件分析、
2.4.1 syslog消息
日志级别 emerg 系统已不可用
Alert 必须马上采取行动
Crit 危急
Err 错误
Warning 警告
Notice 注意
Info 通知消息
Debug 调试信息
日志的表达方式 /etc/syslog.conf
Facility.loglevel logtarget
2.4.2审查日志文件
2.4.3日志分析软件
logsurfer
2.4.4与日志有关的常见攻击
Stunnel命令的应用
2.5文件系统完整性检查
2.5.1生成校验和许可数据库
Md5sum命令校验
在黑客入侵之前生成文件的校验和,建立数据库
修改配置文件或者修改可写的程序,比如在/etc/rc#.d中添加文件,在启动时运行任何命令.
2.5.2现有的文件完整性工具
Aide工具可以检查文件的完整性
3.对机器和网络进行踩点
3.1在线搜索
可以看一下有没有关于我们要入侵的网站或者服务器的一些信息。比如说联系人,IP范围等
3.2whois数据库
Whois bjca.org.cn
Host bjca.org.cn
Whois.arin.net数据库可以列出IP网络的使用者,然后再根据使用者列出其IP地址的范围。
whois 218.30.108.60@whois.arin.net区别whois 218.30.108.60的不同
这样可以看到我们需要扫描的网站或者服务器的IP地址,域名地址,以及一些与注册有关的详细信息,帮助我们更好的了解入侵主机的信息。
3.3ping 扫射
Linux下的端口扫描工具最好用NAMP,这个工具比较适合。而且功能还有许多的扩展功能
3.4DNS问题
两个重要的命令nslookup host
Host -t any sina.com.cn
Host -t txt sina.com.cn
Host -c chaos –t txt version(authors).bind some_name_server
加强主DNS的安全性,做次DNS,次DNS从主DNS上复制全部内容
次DNS的方法
Zone “bjca.org.cn” {
Type slave; file “slave/bjca.org.cn”;
Master { 210.73.90.203 ; 210.73.90.202 ; };
区域传送内容可以阅读DNS的相关文档。
有举可以阅读DJBDNS,也是一个非常不错的DNS系统
3.5 traceroutes
Traceroute 根据生存时间来确定是哪一种操作系统,以及版本的确定
TTL:生存时间 指定数据报被路由器丢弃之前允许通过的网段数量。
TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。
TTL 字段值可以帮助我们识别操作系统类型(不完全准确,因为 TTL 是可以修改的)。
LINUX 64
WIN2K/NT 128
WINDOWS 系列 32
UNIX 系列 255
3.6端口扫描
NAMP的端口扫描,同时也可以通过TTL生存值来确定是哪一种操作系统
3.7操作系统检测
根据旗标来检测来看是哪一种操作系统,以及各种旗标的对策
根据开放的端口来判定是哪种操作系统,假如监听的是SMTP,SSH,PROTMAP,我们就可以判定基本上应为UNIX操作系统。
最可依赖的检测方法是发送特定的IP包,并检查其响应。可以用NAMP来检测。
不同的操作系统对4个IP参数有不同的默认设置。TTL、窗口大小、DF(不要重新装位)和TOS(服务类型)
3.8枚举RPC服务
远程过程调用并没有指定专门的端口,它是一个规范,允许机器通过网络调用其它机器上的进程。因此这些服务向portmap(以前sunrpc)守护进程注册自己的端口。
可以使用namp检测是否有RPC服务在运行。
3.9通过NFS的文件共享
可以用showmount 显示主机上共享的NFS目录,启有NFS会依赖远程过程调用RPC服务,叫sunrpc或者protmap
Showmount –a target
它占用的端口是2049的TCP和UDP端口,可以在防火墙上阻止不必要人的访问。减少安全隐患。
3.10简单网络管理协议(SNMP)
它使用UDP的161、162端口,如果要开启此项服务,最好利用其最新的V3版本。连接SNMP的唯一方法是知道其群字符串,默认的有PUBLIC只读和PRIVATE读写群字符串,
查找群字符串可以用onesixtyone这个工具.
入侵信息查找可以用SNMPUTIL(windows下操作)这个工具。
3.11网络漏洞扫描程序
推荐用nessus 这个工具,最强的网络扫描工具。
由外到内的入侵
4社交工程、特洛伊木马和其它黑客的方法
4.1社交工程
4.1.1社交工程种类
4.1.2如何避免社交工程攻击
4.1.3黑客的家庭作业
员工目录
公司电话系统
办公目录
Usenet上的贴子和邮件列表
联机数据库
主页
公开的DNS信息
4.2特洛伊木马
4.3病毒和蠕虫
4.3.1病毒和LINUX
4.3.2蠕虫和LINUX
5.物理攻击
5.1攻击办公室
5.2启动权限是ROOT权限
Sulogin进入单用户的模式
启动时是加入linux single
Configfile命令加载他自己的配置文件
Module加载所需的模块
用root和rootnoverify设置grub的root设备
用savedefault将当前配置保存为默认配置
用uppermem设置高端内存
启动时的加载配置
5.3加密文件系统
6.网络攻击
6.1使用网络
6.1.1 tcp/ip网络
Tcp/ip协议组 ip\tcp\udp\icmp
了解各个协议的组成及基本情况
6.1.2公共电话网络
6.2可经由网络攻击的漏洞
6.2.1网络守护进程中的编程错误
最好的防止软件漏洞的方法是保持软件的最新版本.
常见的攻击目标
Rpc.mountd(nfs服务的一部分)
RPC和NFS服务,如RPC.start
邮件服务,如imapd/popd
Ftp服务,如wu-ftpd
对策:关闭不必要的进程,保持软件的最新版本,早期检测,保持性函数库
6.2.2默认或有害的配置
6.2.3 x windows系统
用xhost + 可以添加访问本地机器的客户端。
6.2.4攻击openssh
6.3攻击网络客户端
6.4默认口令
6.5嗅探网络信息
常见的嗅探器:tcpdump /ethereal
6.6口令猜测
关完备finger和rwho服务,关掉/etc/seruretty中不要的tty终端
7.高级网络攻击
7.1 DNS攻击
访问控制列表来限制访问
7.2路由问题
主干路由采用BGP可者OSPF,甚至IS-IS协议的会比较多些。源路由允许发送者指定数据包到达目的地前在internet上经由的路径。它可以用来对于网络勘探和调试,但也可以用来绕过安全网关和地址转换。如果攻击者能够向某个网络发送源路由数据包,就更容易伪装成该网络上的地址。以下命令确定系统是否允许源路由数据包:# cat /proc/sys/net/ipv4/conf/eth0/accept_source_route 1表示允许,0表示不允许
配置本地网卡为为某个可信的IP #ifconfig eth0:0 inet 192.168.3.15 netmasl 255.255.255.255
能够接192.168.3.15
#nc –g 10.4.4.1 –g 10.1.5.129 –g 10.10.1.1 –g 192.168.2.1 192.168.3.2 25
Netcat将建一个内建源路的TCP包,指定路径为从本机到10.4.4.1,再到 10.1.5.129,再经10.10.1.1和192.168.2.1最后到192.168.3.2
关闭源路由的方法
proc/sys/net/ipv4/conf/eth0/accept_source_route=0
在/etc/sysctl.conf中添加net.ipv4.conf.all.accept_source_route=0
在路由器上关闭(config)#no ip source-route
7.3高级嗅探和会话劫持
HUNT具有数据包嗅探和全话劫持能力,通过ARP期骗的形式来实现
DSNIFF是一个更优秀的网络审计、测试和嗅探工具
7.4 滥用信任关系
不依赖基于IP的约束 使用安全的SSH访问,而不采有telnet ftp等
NFS安全的对策建议采用替代产品,AFS或者coda.日常访问可以用vpn的方式
保护名字服务需要NIS的时候确保它运行在安全的网段 在/var/yp里面添加
/var/yp/securenets
使用ldap认证时,必须禁止对LDAP服务器的匿名访问。
7.5 攻击无线网络
Wlan连接区域的大小取决于空间的性质
只接受指定的网卡 .但可以有#ifconfig wlan0 10:20:30:40:50:60来更改MAC
建立加密密钥 WEP(wired equivalent privacy算法)
新的无线协议将以客户验证机制来取代简单的密码共享机 机制
SSID(service set id)用于辨识共享同一空间的不同无线网络
用VPN保护无线网络
7.6实施出口过滤
出口过滤是阻止欺骗的最重要途径
主要是防火墙策略设置, 允许或者不允许一些IP的通过
本地用户的攻击
8.提升用户权限
8.1提升权限
#cat >> /home/user/.profile >>EOM
Cp /home/cracker/suid_shell /tmp/.shells/ USER
Chomd 755 /tmp/.shells/ USER
EOM
这样当用户下次登录时,会将攻击者的suid_shell的拷贝保存在/tmp/.shells下,之后攻击者在运行个程序时就可获得该用户的身份。
限制有户主目录的访问,umask默认权限的设置
历史文件攻击.bash_history保存最近的1000条输入。
有时我们可以用locate替代find来查找一些命令,它的默认数据库为/var/lib/slocate/slocate.db 经常用updatedb命令维护、更新数据库..在查找方面updatedb 等价于find /,递归搜索整个文件系统
安全地创建locate数据库
备份tar xzvf /dev/nrtf0 /etc/shadow /root/.ssh
8.2口令存储和使用
/etc/passwd文件保存常用的账户信息,比如用户和组ID,用户SHELL和用户的全名等
/etc/shadow保存加密的口令,只能被 ROOT读取
通常查找.netrc(保存了ftp,http,curl等的密码)
#find / -name .netrc | xargs cat
去掉用户文件中的口令
保护系统的口令文件
可恢复口令的对策.不使用/etc/popauth
8.3可信路径和特洛伊木马
特洛伊木马程序是rootkit的一部分,而rootkit中的程序可以替代系统内相应的二进制程序
从路径中去掉 “ . “
防止不安全程序的执行 减少系统中suid和sgid程序的数量 以noexec标志加载
限制可执行程序
8.4 SUDO
Sudo能够限制用户只在某台主机上运行某些命令。
Sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
Sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。
Sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411。
Sudo用法见附件一
8.5可从本地攻击的程序
Suid和sgid程序是安全问题的常见根源,linux不支持suid的shell脚本
Chattr +i 将限制文件为不可修改
硬链接和符号链接
存储在碰盘上的文件实际上只是位元(bit)集合,并拥有与之相关的信息节点(inode).文件系统通过信息节点找到包含文件数据的碰盘扇区,各个文件系统维护它自己的信息节点表。每个文件都可以通过指向信息节点的目录项找到.
ln 建立硬链接 #ln file2 file1
符号链接是一类间接指向文件的目录项,并不直接指向文件的信息节点。
Stat可以判断目录下的文件是否是符号链接
8.6基于内核的攻击
最近的安全漏洞与用于进程跟踪的系统调用ptrace()有关.
升级内核或者加载相关的模块(insmod\modprode)
9.LINUX的用户证机制
9.1 LINUX上口令的工作方式
MD5加密方法,DES加密只能支式到8位密码
9.2口令破解程序
John the ripper
9.3 PAM(可插入认证模块pluggable authentication modules)
9.4蛮力口令猜测攻击
9.5口令保护
9.6 linux中非shell程序的有户认证机制
Apache httpasswd
Samba sampasswd /etc/samba
服务器的安全
10.邮件安全
更改旗标
关闭vrfy响应
关闭expn请求
阻塞垃圾邮件
资源限制
加密邮件和smtp
10.1.1 sendmail
10.1.2 qmail
10.1.3 postfix
10.1.4 exim
11.ftp服务器安全
11.1 ftp会话范例
11.2 主动FTP模式
只有在主动模式下才能进行加密,确保口令不被监听到
用SSH建立连接.
设置一次有效口令算法 /etc/pam.d/ftp中设置
更改旗标
12.web服务器和动态页面
12.1 apache web 服务器
/etc/httpd/conf/httpd.conf
12.2 CGI程序问题
12.3 PHP
12.4其它linux web 服务器
13.访问控制和防火墙
13.1 inetd和xinetd概述
/etc/xinetd.d
以前的版本中主要有inetd做守护进程,现在主要用xinetd做守护进程,由它来维护各项服务的启动或者停止,而不需要由各项服务自己来启动或者停止,这样避免了系统中同时有多个守护进程运行.
默认default配置/etc/xinted.conf的意思
Defaults
{
Instance = 60
Log_type = FILE /var/log/servicelog
Log_on_success = HOST PID
Log_on_failure = HOST RECORD
Per_source = 5
}
Instance 服务器并发处理的请求数上限
Log_type 在文件中记录日志,也可以用syslog
Log_on_success,log_on_failure 对成功或者失败的连接选择要记录的信息,包括PID,HOST和USERID
Per_source 同一IP地址对同一服务建立连接的上限.它和instance可以防止系统资源耗尽的情况.
Tcp封装器使用两上文件/etc/hosts.deny和/etc/hosts.allow来实现其功能
13.2 防火墙:内核访问控制
三种方式,接受accept,回绝reject,拒绝数据包drop
Itpables –A INPUT –i eth0 –s 0/0 –d 192.168.2.22 –p tcp –dport telnet –j ACCEPT
Itpables –A INPUT –i eth0 –s 0/0 –d 192.168.2.22 –p tcp –dport telnet –j REJECT
Itpables –A INPUT –i eth0 –s 0/0 –d 192.168.2.22 –p tcp –dport telnet –j DROP
13.2.1 linux包过滤
拒绝ICMP PING 和 traceroute
Iptables –A INPUT –s 0/0 –d 192.168.2.22 –p icmp –icmp-type echo-request –j DROP
为对付traceroute,拒绝所有流向端口33435-33525的UDP数据包
Iptables –A INPUT –s 0/0 –d 192.168.2.22 –p udp –dport 33435:33525 –j DROP
13.2.2阻塞特定的网络访问
14.拒绝服务攻击
14.1 内核DOS攻击
对于此种攻击我们能解决的办法只有一种,升级内核,或者别连接互联网好了
14.2 网络潮涌
Ping –f –s 2048 192.168.2.22持继向192.168.2.22发送大小为2048的数据包
Udp潮涌攻击对像 解决方法 关闭/etc/xinetd.conf中的chargen,echo,以及其它的tcp/udp小型服务就可以
Smurt是以icmp\echo\request(ping)的方式攻击,解决的办法关闭路由器和防火墙的广播功能,在LINUX主机上忽略广播包
#echo 1 > /proc/sys/net/ipv4/icmp_igonre_broadcasts
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
SYN潮涌
14.3 分布式拒绝服务攻击
Ddos攻击
14.4 本地资源耗尽攻击
Ulimit约束用户 –a 显示所有约束
-f shell所能创建的文件大小的上限
-t 每秒可以占用的CPU时间上限
-n 打开文件的上限
-u 进程数上限
-v虚拟内存上限
在/etc/security/limits.conf中定义约束
入侵之后
15.隐藏通道
15.1踪迹隐藏
抹掉与其相关的日志内容/var/log
15.2木马化的系统程序
找出删除状态的文件lsof –c suspicious_program
使用stuunel的ssl加密或者使用ssh的反向连接可以隐藏自己的信息。
连接伪装
16后门
16.1基于主机的认证和用户访问
在/etc/hosts.allow添加自己的主机
监视/etc/exports 、/etc/rc.d
查看账号信息/etc/passwd 、/etc/shadow 、/etc/group
查看用户的crontab文件 /var/spool/cron/crontabs/username
16.2创建和修改账号
16.3使用ssh无口令登录
修改/etc/ssh/hosts.equiv .rhosts实现无口令登录
对策:修改/etc/ssh/sshd_config文件来配置
16.4可从网络访问的root shell
16.5木马后门
17攻击系统的高级方法
17.1入侵内核
查看正在运行的模块lsmod使用modprobe和rmmod程序来安装和删除内核模块
解决内核攻击的办法升级运行lids的内核补丁,并适时配置
17.2rootkit
Rootkit 是一个可快速安装预打包的特洛伊程序套件.多数rootkit也包括监听局域网上传输的口令.
利用chkrootkit来检测入侵
Linux的运行级别
关闭系统(保留)
单用户模式(保留)
多用户模式,但不支持NFS
完整的多用户模式(运行级别2+NFS)
未用
完整多用户模式+x11(xdm)登录
重新启动系统(保留)
S,s用于进入运行级别1的脚本,不能被直接使用
7-9合法,但通常不使用
查看运行级别
Chkconfig --list
改变运行级别的方法
Chkconfig -- level 123456 mysql off(on)
附件
Sudo用法
Sudo是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,us等等。这样不仅减少了root用户的登陆 和管理时间,同样也提高了安全性。Sudo不是对shell的一个代替,它是面向每个命令的。它的特性主要有这样几点:
§ Sudo能够限制用户只在某台主机上运行某些命令。
§ Sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
§ Sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。
§ Sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411。
一,安装
检测是否一经安装了SUDO:
[root@localhost ~]# rpm -q sudo
sudo-1.6.8p12-4.1
如果没有安装,下载软件包进行安装:
对于大多数系统来说,sudo的配置都是相对比较简单的:
0) $> cd /;cp sudo-1.6.8p12.tar.gz /
1) $> tar vxzf sudo-1.6.8p12.tar.gz
2) 如果是从低版本升级的话,升级之前请仔细阅读UPGRADE文件。
3) 如果你在编译之前,已经为另外一台不同的主机运行了’configure’,你必须用make distclean清除’config.cache’文件。否则,’configure’将不能再运行。你也可以直接’rm config.cache’.
4) 阅读’OS dependent notes’看是否支持你的系统。
5) $> cd sudo-8p12
6) 阅读configure文件,仔细看其中的’Available configure options’部分,看是否要加一些特殊的选项。这里选项很多,不过常用的主要有这么几个主要的配置参数:
--with-pam 支持使用PAM,使用该选项时要求一个有效的/etc/pam.d/sudo文件
--cache-file=FILE 将缓存test的结果存到FILE文件中。
--help 打印帮助。
--no-create 不要输出.o文件
--quiet, --silent 不打印’checking…’信息
--exec-prefix=EPREFIX 设置包含sudo 和visudo命令的目录
--bindir=DIR 将sudo命令安装到EPREFIX/bin
--sbindir=DIR将visudo命令安装到EPREFIX/bin
--sysconfdir=DIR 将sudoers配置文件安装到DIR,默认为/etc.
--mandir=DIR将man文件安装到DIR,默认为/man.
--with-CC=path 指定你要使用的c编译器的路径。
--with-skey 支持S/Key OTP(一次使用密码)
--with-opie支持NRL OPIE OTP(一次使用密码)
--disable-shadow 不支持shadow密码的系统的选项开关,sudo默认是编译并使用shadow密码的。
--with-sudoers-mode=mode sudoers配置文件模式,默认为0440。
--with-sudoers-uid sudoers配置文件的所有者id,默认为0
--with-sudoers-gid sudoers配置文件的所有者的组id,默认为0
--without-passwd 用户认证无须密码。
--with-logging=TYPE 日志类型,可以选择’syslog’、’file’或者两种都可以。
--with-logpath=path 日志存放的路径和文件名,默认为/var/log/sudo.log
--with-umask 在运行root命令是用umask,默认的umask是0022
--with-passwd-tries=tries sudo写入log日志前提示输入密码的次数,默认为3次。
--with-timeout=minutes sudo提示输入密码之前的时间,默认为5分钟
--with-password-timeout=minutes 密码的有效期,默认为5分钟,0表示密码永远有效。
--without-lecture 第一次运行sudo不打印lecture信息
--disable-root-sudo root用户不能运行sudo。
--enable-log-host 记录主机host到日志文件
--disable-path-info 出错时,不显示sudo的路径。
如 输入:./configure --with-timeout=10 --without-lecture --disable-root-sudo --disable-path-info --sysconfdir=/home/config/ --bindir=/bin --sbindir=/sbin
7) make
8) make install
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
二,配置,
编辑配置文件命令:visudo
默认配置文件位置:/etc/sudoers
[root@localhost ~]# cat /etc/sudoers
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
# User alias specification
# Cmnd alias specification
# Defaults specification
# Runas alias specification
# User privilege specification
root ALL=(ALL) ALL
# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
[root@localhost ~]#
可以用visudo编辑sudoers配置文件,不过也可以直接通过修改sudoers文件实现,不过编辑之前最好看一下它的sample.sudoers文件,里面有一个相当详细的例子可以参考。
#第一部分:用户定义,将用户分为FULLTIMERS、PARTTIMERS和WEBMASTERS三类。
User_Alias FULLTIMERS = millert, mikef, dowdy
User_Alias PARTTIMERS = bostley, jwfox, crawl
User_Alias WEBMASTERS = will, wendy, wim
#第二部分,将操作类型分类。
Runas_Alias OP = root, operator
Runas_Alias DB = oracle, sybase
#第三部分,将主机分类。这些都是随便分得,目的是为了更好地管理。
Host_Alias SPARC = bigtime, eclipse, moet, anchor :\
SGI = grolsch, dandelion, black :\
ALPHA = widget, thalamus, foobar :\
HPPA = boa, nag, python
Host_Alias CUNETS = 128.138.0.0/255.255.0.0
Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
Host_Alias SERVERS = master, mail, www, ns
Host_Alias CDROM = orion, perseus, hercules
#第四部分,定义命令和命令地路径。命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全隐患 ,因此使用的时候也是使用绝对路径!
Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\
/usr/sbin/restore, /usr/sbin/rrestore
Cmnd_Alias KILL = /user/bin/kill
Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm
Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown
Cmnd_Alias HALT = /usr/sbin/halt, /usr/sbin/fasthalt
Cmnd_Alias REBOOT = /usr/sbin/reboot, /usr/sbin/fastboot
Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \
/usr/local/bin/tcsh, /usr/bin/rsh, \
/usr/local/bin/zsh
Cmnd_Alias SU = /usr/bin/su
# 这里是针对不同的用户采用不同地策略,比如默认所有的syslog直接通过auth 输出。FULLTIMERS组不用看到lecture(第一次运行时产生的消息);用户millert使用sudo时不用输入密码;以及logfile的 路径在/var/log/sudo.log而且每一行日志中必须包括年。
Defaults syslog=auth
Defaults:FULLTIMERS !lecture
Defaults:millert !authenticate
Defaults@SERVERS log_year, logfile=/var/log/sudo.log
#root和wheel组的成员拥有任何权利。 如果想对一组用户进行定义,可以在组名前加上%,对其进行设置.
root ALL = (ALL) ALL
%wheel ALL = (ALL) ALL
#FULLTIMERS可以运行任何命令在任何主机而不用输入自己的密码
FULLTIMERS ALL = NOPASSWD: ALL
#PARTTIMERS可以运行任何命令在任何主机,但是必须先验证自己的密码。
PARTTIMERS ALL = ALL
#jack可以运行任何命令在定义地CSNET(128.138.243.0, 128.138.242.0和128.138.204.0/24的子网)中,不过注意前两个不需要匹配子网掩码,而后一个必须匹配掩码。
jack CSNETS = ALL
#lisa可以运行任何命令在定义为CUNETS(128.138.0.0)的子网中主机上。
lisa CUNETS = ALL
#用户operator可以运行DUMPS,KILL,PRINTING,SHUTDOWN,HALT,REBOOT以及在/usr/oper/bin中的所有命令。
operator ALL = DUMPS, KILL, PRINTING, SHUTDOWN, HALT, REBOOT,\
/usr/oper/bin/
#joe可以运行us operator命令
joe ALL = /usr/bin/su operator
#pete可以为除root之外地用户修改密码。
pete HPPA = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root
#bob可以在SPARC和SGI机器上和OP用户组中的root和operator一样运行如何命令。
bob SPARC = (OP) ALL : SGI = (OP) ALL
#jim可以运行任何命令在biglab网络组中。Sudo默认“+”是一个网络组地前缀。
jim +biglab = ALL
#在secretaries中地用户帮助管理打印机,并且可以运行adduser和rmuser命令。
+secretaries ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
#fred能够直接运行oracle或者sybase数据库。
fred ALL = (DB) NOPASSWD: ALL
#john可以在ALPHA机器上,us除了root之外地所有人。
john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*
#jen可以在除了SERVERS主机组的机器上运行任何命令。
jen ALL, !SERVERS = ALL
#jill可以在SERVERS上运行/user/bin/中的除了us和shell命令之外的所有命令。
jill SERVERS = /user/bin/, !SU, !SHELLS
#steve可以作为普通用户运行在CSNETS主机上的/usr/local/op_commands/内的任何命令。
steve CSNETS = (operator) /usr/local/op_commands/
#matt可以在他的个人工作站上运行kill命令。
matt valkyrie = KILL
#WEBMASTERS用户组中的用户可以以www的用户名运行任何命令或者可以us www。
WEBMASTERS www = (www) ALL, (root) /usr/bin/su www
#任何用户可以mount或者umount一个cd-rom在CDROM主机上,而不用输入密码。
ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\
/sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM
三,使用
指令名称:sudo
使用权限:在 /etc/sudoers 中有出现的使用者
使用方式:sudo -V
sudo -h
sudo -l
sudo -v
sudo -k
sudo -s
sudo -H
sudo [ -b ] [ -p prompt ] [ -u username/#uid] -s
用法:sudo command
说明:以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行
参数:
-V 显示版本编号
-h 会显示版本编号及指令的使用方式说明
-l 显示出自己(执行 sudo 的使用者)的权限
-v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
-k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
-b 将要执行的指令放在背景执行
-p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
-u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
-s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
-H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令
范例:
sudo -l 列出目前的权限
sudo -V 列出 sudo 的版本资讯
linux安全问题概述
1.1 linux用户
添加一个用户并付于口令 adduser passwd
/etc/passwd 和/etc/shadow文件,保存用户名和密码文件。查看其说明。
LINUX将用户分为三类:ROOT,普通用户和系统用户。其中系统用户从不登录,这些账号用于特定的目的,不属于任何特定的人,没有主目录。它包括 ftp/apache和lp。ftp 用于匿名登录,apache用于处理http请求等,lp用来处理打印功能.
用户组的概念,多个用户的集合./etc/group
Usermod –G 把某用户加入某组
Chgrp 更改文件组的所有者
Chmod改变文件的权限
当我们用touch创建一个文本文档的时候,我们也可以用umask来设置用户的默认许可值
Chattr修改文件的属性 lsattr显示文件的属性
1.2 其它安全性控制
1.2.1信号
信号是一个进程发送给另一个进程的消息,TERM(终止信号)是发送给进程的常用信号之一,杀掉失控的进程,HUP信号通常用于当程序的配置改变后,强制进程重新读取配置文件.
Kill –TERM 1111
Killall –HUP 1111
1.2.2特权端口
小于1024的端口
1.2.3虚拟内存管理
任何消耗过多内存的进程都会被内核杀掉,而其它进程不受影响,这是
Linux内存管理安全性的一个特点,其它的操作系统没有这样的机制.进程在启动时都分配有自己的内存区保存程序和静态变量,内核自已处理任何其它的运行时内存分配,除非事先以标准的进程间通信方法去做特定的设置,否则任何进程都不能访问其它进程的内存。
1.2.4系统日志
1.2.5 /etc/securetty
指定了允许root登录的TTY设备。
认证模块PAM(pluggable authentication module),linux发布的默认配置
1.2.6 Chrooting
1.2.7使用LINUX权来减少ROOT风险
1.3错误代码
1.3.1末降低权限
1.3.2缓冲区溢出
把数据塞到小于其容积的空间,就会发生缓冲区溢出,许多语言没有内建的边界检查机制—编译期无警告,运行期无防护。攻击者在他的数据中手工编写合法的机器代码,强制函数来运行一些指令,而不是返回main。这些代码通常被称为shell 代码,因为大多数针对缓冲区溢出的攻击都会试图运行/bin/sh的一个拷贝,或者在/tmp中生成一个suid为root的/bin/sh的拷贝。
Libsafe是一个动态加载库,它通过中间软件层来截获对所有存在这类漏洞的库函数的请求,并激活与这些库函数同等功能的替代版本,这一版本将可能的缓冲区溢出限制在当前的堆栈中,从而防止那类可能被攻击者用于劫持程序的数据覆盖行为的发生。
Stackguard工具
1.3.3格式字符串漏洞
它通常出现在程序员使用类似于printf()或者syslog()等支持格式化输入的函数打印简单字符串的场合,正确的方式应该为
Printf(“%s”,str);
Libsafe工具可以解决这个问题
1.3.4竟争条件
1.3.5 审计工具
Rats 审计c,c++,perl,python,php或者用flawfinder工具都可以审计第一节所说的问题。
2.预防措施
2.1弱点扫描程序
2.1.1系统安全扫描程序
使用find命令发现系统中所有的suid或者sgid程序,这些地方通常是入侵的起始
Find / \ ( -perm -02000 –o –perm -04000 \) –ls
推荐使用 lsat工具来检查系统的安全性linux security auditing tool
2.1.2网络安全扫描
2.2扫描检测器
2.3加固系统
2.4日志文件分析、
2.4.1 syslog消息
日志级别 emerg 系统已不可用
Alert 必须马上采取行动
Crit 危急
Err 错误
Warning 警告
Notice 注意
Info 通知消息
Debug 调试信息
日志的表达方式 /etc/syslog.conf
Facility.loglevel logtarget
2.4.2审查日志文件
2.4.3日志分析软件
logsurfer
2.4.4与日志有关的常见攻击
Stunnel命令的应用
2.5文件系统完整性检查
2.5.1生成校验和许可数据库
Md5sum命令校验
在黑客入侵之前生成文件的校验和,建立数据库
修改配置文件或者修改可写的程序,比如在/etc/rc#.d中添加文件,在启动时运行任何命令.
2.5.2现有的文件完整性工具
Aide工具可以检查文件的完整性
3.对机器和网络进行踩点
3.1在线搜索
可以看一下有没有关于我们要入侵的网站或者服务器的一些信息。比如说联系人,IP范围等
3.2whois数据库
Whois bjca.org.cn
Host bjca.org.cn
Whois.arin.net数据库可以列出IP网络的使用者,然后再根据使用者列出其IP地址的范围。
whois 218.30.108.60@whois.arin.net区别whois 218.30.108.60的不同
这样可以看到我们需要扫描的网站或者服务器的IP地址,域名地址,以及一些与注册有关的详细信息,帮助我们更好的了解入侵主机的信息。
3.3ping 扫射
Linux下的端口扫描工具最好用NAMP,这个工具比较适合。而且功能还有许多的扩展功能
3.4DNS问题
两个重要的命令nslookup host
Host -t any sina.com.cn
Host -t txt sina.com.cn
Host -c chaos –t txt version(authors).bind some_name_server
加强主DNS的安全性,做次DNS,次DNS从主DNS上复制全部内容
次DNS的方法
Zone “bjca.org.cn” {
Type slave; file “slave/bjca.org.cn”;
Master { 210.73.90.203 ; 210.73.90.202 ; };
区域传送内容可以阅读DNS的相关文档。
有举可以阅读DJBDNS,也是一个非常不错的DNS系统
3.5 traceroutes
Traceroute 根据生存时间来确定是哪一种操作系统,以及版本的确定
TTL:生存时间 指定数据报被路由器丢弃之前允许通过的网段数量。
TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。
TTL 字段值可以帮助我们识别操作系统类型(不完全准确,因为 TTL 是可以修改的)。
LINUX 64
WIN2K/NT 128
WINDOWS 系列 32
UNIX 系列 255
3.6端口扫描
NAMP的端口扫描,同时也可以通过TTL生存值来确定是哪一种操作系统
3.7操作系统检测
根据旗标来检测来看是哪一种操作系统,以及各种旗标的对策
根据开放的端口来判定是哪种操作系统,假如监听的是SMTP,SSH,PROTMAP,我们就可以判定基本上应为UNIX操作系统。
最可依赖的检测方法是发送特定的IP包,并检查其响应。可以用NAMP来检测。
不同的操作系统对4个IP参数有不同的默认设置。TTL、窗口大小、DF(不要重新装位)和TOS(服务类型)
3.8枚举RPC服务
远程过程调用并没有指定专门的端口,它是一个规范,允许机器通过网络调用其它机器上的进程。因此这些服务向portmap(以前sunrpc)守护进程注册自己的端口。
可以使用namp检测是否有RPC服务在运行。
3.9通过NFS的文件共享
可以用showmount 显示主机上共享的NFS目录,启有NFS会依赖远程过程调用RPC服务,叫sunrpc或者protmap
Showmount –a target
它占用的端口是2049的TCP和UDP端口,可以在防火墙上阻止不必要人的访问。减少安全隐患。
3.10简单网络管理协议(SNMP)
它使用UDP的161、162端口,如果要开启此项服务,最好利用其最新的V3版本。连接SNMP的唯一方法是知道其群字符串,默认的有PUBLIC只读和PRIVATE读写群字符串,
查找群字符串可以用onesixtyone这个工具.
入侵信息查找可以用SNMPUTIL(windows下操作)这个工具。
3.11网络漏洞扫描程序
推荐用nessus 这个工具,最强的网络扫描工具。
由外到内的入侵
4社交工程、特洛伊木马和其它黑客的方法
4.1社交工程
4.1.1社交工程种类
4.1.2如何避免社交工程攻击
4.1.3黑客的家庭作业
员工目录
公司电话系统
办公目录
Usenet上的贴子和邮件列表
联机数据库
主页
公开的DNS信息
4.2特洛伊木马
4.3病毒和蠕虫
4.3.1病毒和LINUX
4.3.2蠕虫和LINUX
5.物理攻击
5.1攻击办公室
5.2启动权限是ROOT权限
Sulogin进入单用户的模式
启动时是加入linux single
Configfile命令加载他自己的配置文件
Module加载所需的模块
用root和rootnoverify设置grub的root设备
用savedefault将当前配置保存为默认配置
用uppermem设置高端内存
启动时的加载配置
5.3加密文件系统
6.网络攻击
6.1使用网络
6.1.1 tcp/ip网络
Tcp/ip协议组 ip\tcp\udp\icmp
了解各个协议的组成及基本情况
6.1.2公共电话网络
6.2可经由网络攻击的漏洞
6.2.1网络守护进程中的编程错误
最好的防止软件漏洞的方法是保持软件的最新版本.
常见的攻击目标
Rpc.mountd(nfs服务的一部分)
RPC和NFS服务,如RPC.start
邮件服务,如imapd/popd
Ftp服务,如wu-ftpd
对策:关闭不必要的进程,保持软件的最新版本,早期检测,保持性函数库
6.2.2默认或有害的配置
6.2.3 x windows系统
用xhost + 可以添加访问本地机器的客户端。
6.2.4攻击openssh
6.3攻击网络客户端
6.4默认口令
6.5嗅探网络信息
常见的嗅探器:tcpdump /ethereal
6.6口令猜测
关完备finger和rwho服务,关掉/etc/seruretty中不要的tty终端
7.高级网络攻击
7.1 DNS攻击
访问控制列表来限制访问
7.2路由问题
主干路由采用BGP可者OSPF,甚至IS-IS协议的会比较多些。源路由允许发送者指定数据包到达目的地前在internet上经由的路径。它可以用来对于网络勘探和调试,但也可以用来绕过安全网关和地址转换。如果攻击者能够向某个网络发送源路由数据包,就更容易伪装成该网络上的地址。以下命令确定系统是否允许源路由数据包:# cat /proc/sys/net/ipv4/conf/eth0/accept_source_route 1表示允许,0表示不允许
配置本地网卡为为某个可信的IP #ifconfig eth0:0 inet 192.168.3.15 netmasl 255.255.255.255
能够接192.168.3.15
#nc –g 10.4.4.1 –g 10.1.5.129 –g 10.10.1.1 –g 192.168.2.1 192.168.3.2 25
Netcat将建一个内建源路的TCP包,指定路径为从本机到10.4.4.1,再到 10.1.5.129,再经10.10.1.1和192.168.2.1最后到192.168.3.2
关闭源路由的方法
proc/sys/net/ipv4/conf/eth0/accept_source_route=0
在/etc/sysctl.conf中添加net.ipv4.conf.all.accept_source_route=0
在路由器上关闭(config)#no ip source-route
7.3高级嗅探和会话劫持
HUNT具有数据包嗅探和全话劫持能力,通过ARP期骗的形式来实现
DSNIFF是一个更优秀的网络审计、测试和嗅探工具
7.4 滥用信任关系
不依赖基于IP的约束 使用安全的SSH访问,而不采有telnet ftp等
NFS安全的对策建议采用替代产品,AFS或者coda.日常访问可以用vpn的方式
保护名字服务需要NIS的时候确保它运行在安全的网段 在/var/yp里面添加
/var/yp/securenets
使用ldap认证时,必须禁止对LDAP服务器的匿名访问。
7.5 攻击无线网络
Wlan连接区域的大小取决于空间的性质
只接受指定的网卡 .但可以有#ifconfig wlan0 10:20:30:40:50:60来更改MAC
建立加密密钥 WEP(wired equivalent privacy算法)
新的无线协议将以客户验证机制来取代简单的密码共享机 机制
SSID(service set id)用于辨识共享同一空间的不同无线网络
用VPN保护无线网络
7.6实施出口过滤
出口过滤是阻止欺骗的最重要途径
主要是防火墙策略设置, 允许或者不允许一些IP的通过
本地用户的攻击
8.提升用户权限
8.1提升权限
#cat >> /home/user/.profile >>EOM
Cp /home/cracker/suid_shell /tmp/.shells/ USER
Chomd 755 /tmp/.shells/ USER
EOM
这样当用户下次登录时,会将攻击者的suid_shell的拷贝保存在/tmp/.shells下,之后攻击者在运行个程序时就可获得该用户的身份。
限制有户主目录的访问,umask默认权限的设置
历史文件攻击.bash_history保存最近的1000条输入。
有时我们可以用locate替代find来查找一些命令,它的默认数据库为/var/lib/slocate/slocate.db 经常用updatedb命令维护、更新数据库..在查找方面updatedb 等价于find /,递归搜索整个文件系统
安全地创建locate数据库
备份tar xzvf /dev/nrtf0 /etc/shadow /root/.ssh
8.2口令存储和使用
/etc/passwd文件保存常用的账户信息,比如用户和组ID,用户SHELL和用户的全名等
/etc/shadow保存加密的口令,只能被 ROOT读取
通常查找.netrc(保存了ftp,http,curl等的密码)
#find / -name .netrc | xargs cat
去掉用户文件中的口令
保护系统的口令文件
可恢复口令的对策.不使用/etc/popauth
8.3可信路径和特洛伊木马
特洛伊木马程序是rootkit的一部分,而rootkit中的程序可以替代系统内相应的二进制程序
从路径中去掉 “ . “
防止不安全程序的执行 减少系统中suid和sgid程序的数量 以noexec标志加载
限制可执行程序
8.4 SUDO
Sudo能够限制用户只在某台主机上运行某些命令。
Sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
Sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。
Sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411。
Sudo用法见附件一
8.5可从本地攻击的程序
Suid和sgid程序是安全问题的常见根源,linux不支持suid的shell脚本
Chattr +i 将限制文件为不可修改
硬链接和符号链接
存储在碰盘上的文件实际上只是位元(bit)集合,并拥有与之相关的信息节点(inode).文件系统通过信息节点找到包含文件数据的碰盘扇区,各个文件系统维护它自己的信息节点表。每个文件都可以通过指向信息节点的目录项找到.
ln 建立硬链接 #ln file2 file1
符号链接是一类间接指向文件的目录项,并不直接指向文件的信息节点。
Stat可以判断目录下的文件是否是符号链接
8.6基于内核的攻击
最近的安全漏洞与用于进程跟踪的系统调用ptrace()有关.
升级内核或者加载相关的模块(insmod\modprode)
9.LINUX的用户证机制
9.1 LINUX上口令的工作方式
MD5加密方法,DES加密只能支式到8位密码
9.2口令破解程序
John the ripper
9.3 PAM(可插入认证模块pluggable authentication modules)
9.4蛮力口令猜测攻击
9.5口令保护
9.6 linux中非shell程序的有户认证机制
Apache httpasswd
Samba sampasswd /etc/samba
服务器的安全
10.邮件安全
更改旗标
关闭vrfy响应
关闭expn请求
阻塞垃圾邮件
资源限制
加密邮件和smtp
10.1.1 sendmail
10.1.2 qmail
10.1.3 postfix
10.1.4 exim
11.ftp服务器安全
11.1 ftp会话范例
11.2 主动FTP模式
只有在主动模式下才能进行加密,确保口令不被监听到
用SSH建立连接.
设置一次有效口令算法 /etc/pam.d/ftp中设置
更改旗标
12.web服务器和动态页面
12.1 apache web 服务器
/etc/httpd/conf/httpd.conf
12.2 CGI程序问题
12.3 PHP
12.4其它linux web 服务器
13.访问控制和防火墙
13.1 inetd和xinetd概述
/etc/xinetd.d
以前的版本中主要有inetd做守护进程,现在主要用xinetd做守护进程,由它来维护各项服务的启动或者停止,而不需要由各项服务自己来启动或者停止,这样避免了系统中同时有多个守护进程运行.
默认default配置/etc/xinted.conf的意思
Defaults
{
Instance = 60
Log_type = FILE /var/log/servicelog
Log_on_success = HOST PID
Log_on_failure = HOST RECORD
Per_source = 5
}
Instance 服务器并发处理的请求数上限
Log_type 在文件中记录日志,也可以用syslog
Log_on_success,log_on_failure 对成功或者失败的连接选择要记录的信息,包括PID,HOST和USERID
Per_source 同一IP地址对同一服务建立连接的上限.它和instance可以防止系统资源耗尽的情况.
Tcp封装器使用两上文件/etc/hosts.deny和/etc/hosts.allow来实现其功能
13.2 防火墙:内核访问控制
三种方式,接受accept,回绝reject,拒绝数据包drop
Itpables –A INPUT –i eth0 –s 0/0 –d 192.168.2.22 –p tcp –dport telnet –j ACCEPT
Itpables –A INPUT –i eth0 –s 0/0 –d 192.168.2.22 –p tcp –dport telnet –j REJECT
Itpables –A INPUT –i eth0 –s 0/0 –d 192.168.2.22 –p tcp –dport telnet –j DROP
13.2.1 linux包过滤
拒绝ICMP PING 和 traceroute
Iptables –A INPUT –s 0/0 –d 192.168.2.22 –p icmp –icmp-type echo-request –j DROP
为对付traceroute,拒绝所有流向端口33435-33525的UDP数据包
Iptables –A INPUT –s 0/0 –d 192.168.2.22 –p udp –dport 33435:33525 –j DROP
13.2.2阻塞特定的网络访问
14.拒绝服务攻击
14.1 内核DOS攻击
对于此种攻击我们能解决的办法只有一种,升级内核,或者别连接互联网好了
14.2 网络潮涌
Ping –f –s 2048 192.168.2.22持继向192.168.2.22发送大小为2048的数据包
Udp潮涌攻击对像 解决方法 关闭/etc/xinetd.conf中的chargen,echo,以及其它的tcp/udp小型服务就可以
Smurt是以icmp\echo\request(ping)的方式攻击,解决的办法关闭路由器和防火墙的广播功能,在LINUX主机上忽略广播包
#echo 1 > /proc/sys/net/ipv4/icmp_igonre_broadcasts
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
SYN潮涌
14.3 分布式拒绝服务攻击
Ddos攻击
14.4 本地资源耗尽攻击
Ulimit约束用户 –a 显示所有约束
-f shell所能创建的文件大小的上限
-t 每秒可以占用的CPU时间上限
-n 打开文件的上限
-u 进程数上限
-v虚拟内存上限
在/etc/security/limits.conf中定义约束
入侵之后
15.隐藏通道
15.1踪迹隐藏
抹掉与其相关的日志内容/var/log
15.2木马化的系统程序
找出删除状态的文件lsof –c suspicious_program
使用stuunel的ssl加密或者使用ssh的反向连接可以隐藏自己的信息。
连接伪装
16后门
16.1基于主机的认证和用户访问
在/etc/hosts.allow添加自己的主机
监视/etc/exports 、/etc/rc.d
查看账号信息/etc/passwd 、/etc/shadow 、/etc/group
查看用户的crontab文件 /var/spool/cron/crontabs/username
16.2创建和修改账号
16.3使用ssh无口令登录
修改/etc/ssh/hosts.equiv .rhosts实现无口令登录
对策:修改/etc/ssh/sshd_config文件来配置
16.4可从网络访问的root shell
16.5木马后门
17攻击系统的高级方法
17.1入侵内核
查看正在运行的模块lsmod使用modprobe和rmmod程序来安装和删除内核模块
解决内核攻击的办法升级运行lids的内核补丁,并适时配置
17.2rootkit
Rootkit 是一个可快速安装预打包的特洛伊程序套件.多数rootkit也包括监听局域网上传输的口令.
利用chkrootkit来检测入侵
Linux的运行级别
关闭系统(保留)
单用户模式(保留)
多用户模式,但不支持NFS
完整的多用户模式(运行级别2+NFS)
未用
完整多用户模式+x11(xdm)登录
重新启动系统(保留)
S,s用于进入运行级别1的脚本,不能被直接使用
7-9合法,但通常不使用
查看运行级别
Chkconfig --list
改变运行级别的方法
Chkconfig -- level 123456 mysql off(on)
附件
Sudo用法
Sudo是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,us等等。这样不仅减少了root用户的登陆 和管理时间,同样也提高了安全性。Sudo不是对shell的一个代替,它是面向每个命令的。它的特性主要有这样几点:
§ Sudo能够限制用户只在某台主机上运行某些命令。
§ Sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
§ Sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。
§ Sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411。
一,安装
检测是否一经安装了SUDO:
[root@localhost ~]# rpm -q sudo
sudo-1.6.8p12-4.1
如果没有安装,下载软件包进行安装:
对于大多数系统来说,sudo的配置都是相对比较简单的:
0) $> cd /;cp sudo-1.6.8p12.tar.gz /
1) $> tar vxzf sudo-1.6.8p12.tar.gz
2) 如果是从低版本升级的话,升级之前请仔细阅读UPGRADE文件。
3) 如果你在编译之前,已经为另外一台不同的主机运行了’configure’,你必须用make distclean清除’config.cache’文件。否则,’configure’将不能再运行。你也可以直接’rm config.cache’.
4) 阅读’OS dependent notes’看是否支持你的系统。
5) $> cd sudo-8p12
6) 阅读configure文件,仔细看其中的’Available configure options’部分,看是否要加一些特殊的选项。这里选项很多,不过常用的主要有这么几个主要的配置参数:
--with-pam 支持使用PAM,使用该选项时要求一个有效的/etc/pam.d/sudo文件
--cache-file=FILE 将缓存test的结果存到FILE文件中。
--help 打印帮助。
--no-create 不要输出.o文件
--quiet, --silent 不打印’checking…’信息
--exec-prefix=EPREFIX 设置包含sudo 和visudo命令的目录
--bindir=DIR 将sudo命令安装到EPREFIX/bin
--sbindir=DIR将visudo命令安装到EPREFIX/bin
--sysconfdir=DIR 将sudoers配置文件安装到DIR,默认为/etc.
--mandir=DIR将man文件安装到DIR,默认为/man.
--with-CC=path 指定你要使用的c编译器的路径。
--with-skey 支持S/Key OTP(一次使用密码)
--with-opie支持NRL OPIE OTP(一次使用密码)
--disable-shadow 不支持shadow密码的系统的选项开关,sudo默认是编译并使用shadow密码的。
--with-sudoers-mode=mode sudoers配置文件模式,默认为0440。
--with-sudoers-uid sudoers配置文件的所有者id,默认为0
--with-sudoers-gid sudoers配置文件的所有者的组id,默认为0
--without-passwd 用户认证无须密码。
--with-logging=TYPE 日志类型,可以选择’syslog’、’file’或者两种都可以。
--with-logpath=path 日志存放的路径和文件名,默认为/var/log/sudo.log
--with-umask 在运行root命令是用umask,默认的umask是0022
--with-passwd-tries=tries sudo写入log日志前提示输入密码的次数,默认为3次。
--with-timeout=minutes sudo提示输入密码之前的时间,默认为5分钟
--with-password-timeout=minutes 密码的有效期,默认为5分钟,0表示密码永远有效。
--without-lecture 第一次运行sudo不打印lecture信息
--disable-root-sudo root用户不能运行sudo。
--enable-log-host 记录主机host到日志文件
--disable-path-info 出错时,不显示sudo的路径。
如 输入:./configure --with-timeout=10 --without-lecture --disable-root-sudo --disable-path-info --sysconfdir=/home/config/ --bindir=/bin --sbindir=/sbin
7) make
8) make install
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
二,配置,
编辑配置文件命令:visudo
默认配置文件位置:/etc/sudoers
[root@localhost ~]# cat /etc/sudoers
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
# User alias specification
# Cmnd alias specification
# Defaults specification
# Runas alias specification
# User privilege specification
root ALL=(ALL) ALL
# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
[root@localhost ~]#
可以用visudo编辑sudoers配置文件,不过也可以直接通过修改sudoers文件实现,不过编辑之前最好看一下它的sample.sudoers文件,里面有一个相当详细的例子可以参考。
#第一部分:用户定义,将用户分为FULLTIMERS、PARTTIMERS和WEBMASTERS三类。
User_Alias FULLTIMERS = millert, mikef, dowdy
User_Alias PARTTIMERS = bostley, jwfox, crawl
User_Alias WEBMASTERS = will, wendy, wim
#第二部分,将操作类型分类。
Runas_Alias OP = root, operator
Runas_Alias DB = oracle, sybase
#第三部分,将主机分类。这些都是随便分得,目的是为了更好地管理。
Host_Alias SPARC = bigtime, eclipse, moet, anchor :\
SGI = grolsch, dandelion, black :\
ALPHA = widget, thalamus, foobar :\
HPPA = boa, nag, python
Host_Alias CUNETS = 128.138.0.0/255.255.0.0
Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
Host_Alias SERVERS = master, mail, www, ns
Host_Alias CDROM = orion, perseus, hercules
#第四部分,定义命令和命令地路径。命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全隐患 ,因此使用的时候也是使用绝对路径!
Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\
/usr/sbin/restore, /usr/sbin/rrestore
Cmnd_Alias KILL = /user/bin/kill
Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm
Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown
Cmnd_Alias HALT = /usr/sbin/halt, /usr/sbin/fasthalt
Cmnd_Alias REBOOT = /usr/sbin/reboot, /usr/sbin/fastboot
Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \
/usr/local/bin/tcsh, /usr/bin/rsh, \
/usr/local/bin/zsh
Cmnd_Alias SU = /usr/bin/su
# 这里是针对不同的用户采用不同地策略,比如默认所有的syslog直接通过auth 输出。FULLTIMERS组不用看到lecture(第一次运行时产生的消息);用户millert使用sudo时不用输入密码;以及logfile的 路径在/var/log/sudo.log而且每一行日志中必须包括年。
Defaults syslog=auth
Defaults:FULLTIMERS !lecture
Defaults:millert !authenticate
Defaults@SERVERS log_year, logfile=/var/log/sudo.log
#root和wheel组的成员拥有任何权利。 如果想对一组用户进行定义,可以在组名前加上%,对其进行设置.
root ALL = (ALL) ALL
%wheel ALL = (ALL) ALL
#FULLTIMERS可以运行任何命令在任何主机而不用输入自己的密码
FULLTIMERS ALL = NOPASSWD: ALL
#PARTTIMERS可以运行任何命令在任何主机,但是必须先验证自己的密码。
PARTTIMERS ALL = ALL
#jack可以运行任何命令在定义地CSNET(128.138.243.0, 128.138.242.0和128.138.204.0/24的子网)中,不过注意前两个不需要匹配子网掩码,而后一个必须匹配掩码。
jack CSNETS = ALL
#lisa可以运行任何命令在定义为CUNETS(128.138.0.0)的子网中主机上。
lisa CUNETS = ALL
#用户operator可以运行DUMPS,KILL,PRINTING,SHUTDOWN,HALT,REBOOT以及在/usr/oper/bin中的所有命令。
operator ALL = DUMPS, KILL, PRINTING, SHUTDOWN, HALT, REBOOT,\
/usr/oper/bin/
#joe可以运行us operator命令
joe ALL = /usr/bin/su operator
#pete可以为除root之外地用户修改密码。
pete HPPA = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root
#bob可以在SPARC和SGI机器上和OP用户组中的root和operator一样运行如何命令。
bob SPARC = (OP) ALL : SGI = (OP) ALL
#jim可以运行任何命令在biglab网络组中。Sudo默认“+”是一个网络组地前缀。
jim +biglab = ALL
#在secretaries中地用户帮助管理打印机,并且可以运行adduser和rmuser命令。
+secretaries ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
#fred能够直接运行oracle或者sybase数据库。
fred ALL = (DB) NOPASSWD: ALL
#john可以在ALPHA机器上,us除了root之外地所有人。
john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*
#jen可以在除了SERVERS主机组的机器上运行任何命令。
jen ALL, !SERVERS = ALL
#jill可以在SERVERS上运行/user/bin/中的除了us和shell命令之外的所有命令。
jill SERVERS = /user/bin/, !SU, !SHELLS
#steve可以作为普通用户运行在CSNETS主机上的/usr/local/op_commands/内的任何命令。
steve CSNETS = (operator) /usr/local/op_commands/
#matt可以在他的个人工作站上运行kill命令。
matt valkyrie = KILL
#WEBMASTERS用户组中的用户可以以www的用户名运行任何命令或者可以us www。
WEBMASTERS www = (www) ALL, (root) /usr/bin/su www
#任何用户可以mount或者umount一个cd-rom在CDROM主机上,而不用输入密码。
ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\
/sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM
三,使用
指令名称:sudo
使用权限:在 /etc/sudoers 中有出现的使用者
使用方式:sudo -V
sudo -h
sudo -l
sudo -v
sudo -k
sudo -s
sudo -H
sudo [ -b ] [ -p prompt ] [ -u username/#uid] -s
用法:sudo command
说明:以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行
参数:
-V 显示版本编号
-h 会显示版本编号及指令的使用方式说明
-l 显示出自己(执行 sudo 的使用者)的权限
-v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
-k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
-b 将要执行的指令放在背景执行
-p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
-u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
-s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
-H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令
范例:
sudo -l 列出目前的权限
sudo -V 列出 sudo 的版本资讯
- linux-shell编程5.part07.rar (3 MB)
- 下载次数: 0
- linux-shell编程5.part08.rar (3 MB)
- 下载次数: 0
- linux-shell编程5.part09.rar (3 MB)
- 下载次数: 0
相关推荐
### Linux Kernel 黑客指南:关键技术点解析 #### 一、引言 《Linux Kernel 黑客指南》是一本深入探讨Linux内核技术的指南,它涵盖了设备驱动、文件系统和内存管理等核心主题。虽然这份文档的部分内容可能已经过时...
【Linux基础知识总结】 1. Linux与UNIX的区别与关系: Linux和UNIX都是操作系统,它们的源代码具有兼容性。Linux是遵循GPL版权协议的开放源码操作系统,而UNIX通常是封闭源码的商业操作系统。尽管两者有诸多相似之...
总结来说,Linux桌面系统作为一个可行的Windows替代品,它的开放源代码特性既是其优势也是挑战。在追求信息安全的过程中,我们需要更深入地探讨如何在开放性和安全性之间找到平衡,以确保用户的数据安全。同时,这也...
通过以上对《黑客入门(超级详细版)》的内容总结与扩展,我们可以看到,成为一名合格的“黑客”不仅需要掌握大量的计算机与网络安全知识,还需要具备良好的道德观和社会责任感。无论是为了防御还是攻防实践,都应该...
网络上被攻陷的大多数主机,是黑客用扫描工具大范围进行扫描而被瞄准上的。所以,为了避免被扫描到,除了必要的端口,例如 Web、FTP、SSH 等,其他的都应关闭。值得一提的是,我强烈建议关闭 icmp 端口,并设置规则...
Linux 操作系统基础知识点总结 Linux 操作系统是目前最流行的开源操作系统之一,由 Linus Torvalds 于 1991 年创建。Linux 操作系统具有非常高的安全性、可靠性和可扩展性等特点。 Linux 操作系统的特点 Linux ...
特别是在多用途操作系统中,实现良好的桌面系统交互和高负载服务器的低延迟一直是内核黑客们的挑战。尽管自由软件的兴起带来了一些进步,但许多专家认为该领域仍然不够完美。 其次,文档提到新手操作系统爱好者通常...
总结,《2012黑客知识大全》为初学者提供了全面的网络安全学习路径,涵盖了从基础概念到实际操作的多个层面,是踏上黑客学习之路的良好起点。通过深入学习和实践,不仅可以提升个人技能,还能更好地参与到网络安全的...
总结来说,这份“步入Linux的现代方法”笔记为新手提供了全面的Linux学习资源,涵盖了从基础到进阶的各个方面,无论是运维人员还是开发者,都能从中受益。通过深入学习和实践,你可以熟练掌握Linux操作系统,从而更...
本文总结了当前业内被接受程度较高的几大标准技术测试体系理论,通过使用Kali-Linux系统作为平台载体,说明了一套完整的渗透测试的思路、流程、步骤和结果输出等,为网络管理者提供参考。 知识点一:渗透测试的定义...
### 总结 《黑客五步曲》不仅是对黑客文化的一次全面回顾,也是对IT行业发展的深刻思考。Eric S. Raymond通过对黑客历史、价值观、成长路径以及其对社会影响的分析,为我们揭示了一个充满活力且不断进化的文化现象...
总结起来,Cobalt Strike是一个强大的内网渗透测试工具,尤其在Linux环境下,能帮助安全专业人员发现和利用潜在的安全漏洞,提高组织的网络安全防护水平。正确且负责任地使用这些工具,对于保障网络环境的安全至关...
这份资料详细介绍了为什么需要进行Linux系统的安全配置,包括在技术层面上安全的脆弱点、常见的黑客手段、攻击手法和趋势,以及如何应对这些威胁。 在介绍“为什么”(Why)时,培训资料强调了安全配置的重要性,并...
近期UNIX/Linux漏洞是指在UNIX/Linux操作系统中存在的安全漏洞,这些漏洞可能被黑客利用,危及系统的安全性。本文将对近期的一些UNIX/Linux漏洞进行总结和分析。 1. HP-UX Ignite—UX远程非授 权访问及权限提升...
- 曾经是一名年轻的黑客,在孩子出生前活跃于开源软件开发领域。 - 对非PC平台有着特殊的兴趣和发展倾向。 - **Greg Kroah-Hartman** - 自1999年起就开始为Linux内核编写驱动程序。 - 目前负责维护USB、PCI、I2...
基本信息 作者: (俄)Kris Kaspersky(克里斯.卡巴斯基) 译者: 谭明金[同译者作品] 丛书名: 安全技术大系 出版社:电子工业出版社 ISBN:9787121106279 上架时间:2010-6-12 ...21.3 总结 444
- **操作系统**:Windows、Linux或macOS。 ### 三、关键技术点解析 #### 1. GUI库的选择与安装 - **SDL**:适用于跨平台开发,提供了丰富的多媒体功能支持。 - **SFML**:同样支持跨平台,但在音频处理方面更为...
一旦发生黑客入侵、系统崩溃等安全事件,如何快速有效地进行应急响应,成为维护业务连续性和信息安全的关键。 #### 二、应急响应流程概述 **1. 准备阶段** - **建立应急响应团队**:确保团队成员具备必要的技术...