Sudo apt-get update && apt-get upgrade
控制台安全
禁用Ctrl+Alt+Del,修改/etc/init/control-alt-delte.conf
\1 | exec shutdown -r now "Control-Alt-Delete pressed"
|
把以上这行代码注释。
Ubuntu默认禁用root用户。如果要以root身份执行命令,可以使用sudo命令。如果一定要使用root用户,只需要重设root密码即可
\1 2 3 4 | sudo passwd
#如果要再次禁用root,只需用passwd –l将root锁定
sudo passwd -l root
|
关于sudo
通过sudo,有权限的普通用户可以执行只有root才能执行的命令。可以通过配置文件/etc/sudoers来设置。编辑/etc/sudoers文件,务必使用visudo命令,该命令可以提供安全检查。
/etc/sudoers文件,主要分为两部分:一部分定义别名,另一部分进行授权。
>别名(基本变量)规则有4种:
主机别名(Host_Alias)
用户别名(User_Alias)
Runas别名(Runas_Alias)
命令别名(Cmnd_Alias)
>用户授权规则,规格为:
用户名 主机名 = [(目的用户)] [NOPASSWD:] 命令列表
默认,/etc/sudoers中有一个admin组(Ubuntu将安装过程中创建的第一个用户加入了admin组),该组中的所有成员,都有权利执行sudo命令。如果要让某个用户具有root权限,只需要让其加入admin组即可。一般,某个用户只需要执行一两个特定命令。
举例:
1) 指定运行命令的身份
\1 2 3 4 | vfeelit ifeeline = (operater) /bin/ls , /bin/kill
#执行
sudo –u operater /bin/ls
|
上面的设置,让用vfeelit可以在ifeeline这台主机上用operator用户的身份执行/bin/ls和/bin/kill。
如果改为:
\1 | vfeelit ifeeline = (operater) /bin/ls , (root) /bin/kill
|
表示用户vfeelit可以用operator的身份执行/bin/ls,以root的身份执行/bin/kill。
2) 有密码/无密码
使用NOPASSWD、PASSWD标签,可以设置用户在sudo时是否需要输入密码:
\1 2 3 | vfeelit ifeeline = NOPASSWD: /bin/ls , /bin/kill
vfeelit ifeeline = NOPASSWD: /bin/ls , PASSWD /bin/kill
vfeelit ifeeline = NOPASSWD: ALL
|
修改/etc/pam.d/common-password设置密码策略。
Ubuntu Snort入侵检测
Snort是入侵检测系统中最佳利器之一。Snort默认把信息记录在日志文件中,不过Ubuntu提供了snort-mysql这个软件包,可以把Snort的日志记录在MySQL数据库中,手工查看分析比较麻烦,可以借助BASE这个工具(acidbase软件包),可以很直观地查看Snort的分析结果。
安装运行环境
安装LAMP,BASE需要PHP的ADOdb库文件,因此还需要安装libphp-adodb软件包。
安装snort-mysql
\1 | sudo apt-get install snort-mysql
|
安装过程需要进行几项配置。首先是HOME_NET的定义,这个是指定要监听的网络,比如填192.168.111.0/24。接下来询问要不要设置数据库,输入Yes,然后得到提示:
\1 2 | cd /usr/share/doc/snort-mysql/
zcat create_mysql.gz " mysql -u <user> -h <host> -p <databasename>
|
这是指示如何导入数据。
安装完成后,为其创建一个数据库(也可以创建对应的用户,这里直接使用root),然后导入数据:
\1 2 3 4 5 6 | mysql –uroot –p
carete database snortdb;
#把snort-mysql附带的sql文件导入该数据库
cd /usr/share/doc/snort-mysql/
zcat create_mysql.gz " mysql snortdb -u root -proot
|
最后删除/etc/snort/db-pending-config文件(新版看起来不需要删除,也不存在)
然后配置Snort,打开/etc/snort/snort.conf:
\1 2 3 4 5 | #ipvar HOME_NET any 注释
ipvar HOME_NET 192.168.1.0 /24 添加
#ipvar EXTERNAL_NET any 注释
ipvar EXTERNAL_NET !$HOME_NET 解注释
|
新版本的Snort把对数据库的配置写入到了/etc/snort/database.conf中
\1 2 | #output database: log, mysql, 注释,然后添加
output database: log, mysql, user=root password=root dbname=snortdb host=localhost
|
该设置使Snort将log信息写到指定的MySQL数据库中。
测试是否正常:
\1 2 3 4 5 6 7 | snort –c /etc/snort/snort .conf
#看到如下输出
--== Initialization Complete ==--
#启动
/etc/init .d /snort start
|
————->安装、配置BASE
1) 安装acidbase软件包(一套PHP程序,类似phpMyAdmin)
BASE是Basic Analysis and Security Engine的缩写(基本分析与安全引擎),前身是ACID.
\1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | sudo apt-get install acidbase
#####设置
The acidbase package can be configured to use one of several database types. Below, you will be
presented with the available choices.
1. mysql 2. pgsql
Database type to be used by acidbase:
Please provide a password for acidbase to register with the database server. If left blank, a
random password will be generated.
MySQL application password for acidbase:
|
安装完毕后,会自动添加一个连接文件到/etc/apache2/conf.d/下(acidbase.conf -> /etc/acidbase/apache.conf):
\1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <IfModule mod_alias.c>
Alias /acidbase "/usr/share/acidbase"
< /IfModule >
<DirectoryMatch /usr/share/acidbase/ >
Options +FollowSymLinks
AllowOverride None
order deny,allow
deny from all
allow from 127.0.0.0 /255 .0.0.0
<IfModule mod_php5.c>
php_flag magic_quotes_gpc Off
php_flag track_vars On
php_value include_path .: /usr/share/php
< /IfModule >
< /DirectoryMatch >
|
这种形式更安装配置phpMyAdmin时的模式是一样的(注意安装实际情况修改allow from的网段)。
先到达/etc/acidbase目录下把base_conf.php重命名(或者删除也可),然后访问acidbase/setup/进行安装:


选择Chinese(繁体中文 或simplified_chinese简体中文),输入ADODB路径(/usr/share/php/adodb)


接下来的第4步点击Create BASE AG在数据库中建立一些BASE要用到的表。

进入第5步骤,把配置文件拷贝下来,写入到/etc/acidbase/base_conf.php:
\1 2 3 | ##修改
#$BASE_path = dirname(__FILE__); 注释
$BASE_path = "/usr/share/acidbase" ; 添加
|
访问http:///acidbase,登录。

Ubuntu 安全检查(后门检测)
3个程序:
chkrootkit 可以扫描rootkits
rkhunter 可以扫描rootkit backdoor sniffer exploit
unhide 可以发现隐藏的进程和端口
1) chkrootkit的使用
chkrootkit是Check Rootkit的简称,可以检测到60多种常见的rootkit、蠕虫和LKM(Linux Kernel Module)等有害程序,列表:http://www.。
安装:
\1 | apt-get install chkrootkit
|
参数:
-l 显示可用的扫描对象
-d 调试
-q 安静模式
-x 专家模式
-r dir 将dir所指定的目录作为root目录
-p dir1:dir2:dirN 指定扫描过程中要使用的程序的路径
-n 不扫描挂载的NFS分区
<喎?"http://www./kf/ware/vc/" target="_blank" class="keylink">vcHJlPg0KPHA+08O3qKO6PC9wPg0KPHByZSBjbGFzcz0="brush: bash; title: ; notranslate" title="\">
#检查ps ls 和cron命令是否被感染
sudo chkrootkit ps ls cron
#如果不指定扫描对象,就会扫描所有对象
sudo chkrootkit
#加上-q选项后就进入安静模式,只有被感染的才显示
sudo chkrootkit –q
#如果使用-x选项,程序会调用/usr/bin/strings将扫描对象中所有可疑字符串打印处理
sudo chkrootkit –x su " less
chkrootkit在运行过程中,会调用系统中的awk cut egrep find head id ls netstat ps strings sed uname等命令。如果担心这些命令已经被感染,那么可以使用-p选项指定这些程序的路径。可以把这些/bin /sbin /usr/bin等目录放到一个ISO文件中(只读),然后mount这个iso文件。
然后:
\1 | sudo chkrootkit –p /cdrom/bin : /cdroom/sbin : /cdrom/usr/bin
|
最好的检查方法,则是从一台确认安全的机器上,将被入侵的机器的文件系统挂载过来,使用-r选项指定root目录:
\1 | sudo chkrotkit –r /mnt/hdisk
|
2) rkhunter的使用
rkhunter是Rootkit Hunter的简称,可以检查几十种rootkits、backdoors、LKMs、worms,使用rkhunter的—list子命令可以显示。
安装
rkhunter依赖MTA(邮件传输代理)服务器,选择postfix(看起来,如果不需要发送邮件,应该不需要安装):
\1 | apt-get install rkhunter postfix mailutils
|
安装完成后,先对其数据进行更新,相当是获取最新病毒库:
配置
rkhunter的配置文件位于/etc/rkhunter.conf,和chkrootkit相同,rkhunter也可以指定外部命令的路径。可以通过修改配置文件来指定。配置文件有一项BINDIR,可以将该项修改为挂载在iso上的路径:
\1 | BINDIR=” /cdrom/bin /cdrom/usr/bin /cderom/sbin /cdrom/usr/sbin ”
|
如果要查看rkhunter都支持哪些扫描项目:
要用rkhunter进行检查,使用-c或者—check即可
\1 2 3 4 5 6 7 8 9 | sudo rkhunter –c
##检查完毕后提示
The system checks took: 1 minute and 18 seconds
All results have been written to the log file ( /var/log/rkhunter .log)
One or more warnings have been found while checking the system.
Please check the log file ( /var/log/rkhunter .log)
|
可以通过/var/log/rkhunter.log查看扫描结果。
rkhunter在安装时创建了一个cron任务/etc/cron.daily/rkhunter,每天执行一次。
\1 2 3 4 5 6 7 8 9 10 11 12 13 | cat /etc/cron .daily /rkhunter
#!/bin/sh
RKHUNTER= /usr/bin/rkhunter
test -x $RKHUNTER "| exit 0
# source our config
. /etc/default/rkhunter
#####省略
#nice调整进程调度优先级, 然后就运行/usr/bin/rkhunter,我们可以提取这行命令出来手动运行(/usr/bin/rkhunter --cronjob --report-warnings-only –appendlog > rk.log )
/usr/bin/nice -n $NICE $RKHUNTER --cronjob --report-warnings-only --appendlog > $OUTFILE
#####省略
|
可以看到,该任务会调用rkhunter的另外一个配置文件/etc/default/rkhunter(. /etc/default/rkhunter),查看该配置文件(这个配置文件只是跟定制是否发送邮件,是否更新病毒库有关,跟rkhunter运行没有关系):
\1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | cat /etc/default/rkhunter
# Defaults for rkhunter automatic tasks
# sourced by /etc/cron.*/rkhunter and /etc/apt/apt.conf.d/90rkhunter
#
# This is a POSIX shell fragment
#
# Set this to yes to enable rkhunter daily runs 是否每天运行一次,默认为true
# (default: true)
CRON_DAILY_RUN= ""
# Set this to yes to enable rkhunter weekly database updates 每周更新数据库(病毒库),默认为true
# (default: true)
CRON_DB_UPDATE= ""
# Set this to yes to enable reports of weekly database updates 每周更新病毒库后发送报告(默认不发送)
# (default: false)
DB_UPDATE_EMAIL= "false"
# Set this to the email address where reports and run output should be sent(发送给那个地址,写上email地址)
# (default: root)
REPORT_EMAIL= "vfeelit@qq.com"
# Set this to yes to enable automatic database updates 开启自动更新,默认为false
# (default: false)
APT_AUTOGEN= "false"
# Nicenesses range from -20 (most favorable scheduling) to 19 (least favorable)
# (default: 0)
NICE= "0"
# Should daily check be run when running on battery
# powermgmt-base is required to detect if running on battery or on AC power
# (default: false)
RUN_CHECK_ON_BATTERY= "false"
|
3) unhide的使用
unhide也是一个Rootkit诊断工具,它的功能侧重于检测隐藏的进程和TCP/UDP端口。
\1 2 3 4 5 6 7 8 | sudo apt-get install unhide
##查看安装文件
dpkg -L unhide
/usr/sbin/unhide
/usr/sbin/unhide-tcp
/usr/share/ *
|
安装完成后有两个工具,unhide 和 unhide-tcp。
检测原理
unhide使用3种方法进行检查(检查进程),分别是:
>proc 将/proc中的进程和/bin/ps的结果相对比
>sys 将系统调用和/bin/ps的结果相对比
>brute 整个PIDs空间(遍历,逐个尝试)
unhide-tcp使用遍历的方法,扫描所有有效端口,找出那些正在监听的、在/bin/netstat命令中看不到的隐藏端口。
检查隐藏进程:
\1 2 3 4 5 6 7 8 | sudo unhide proc
#也可以使用sys方法来进行检测
sudo unhide sys
显示有隐藏进程,不过代表已经被入侵了。
#也可以使用brute方法进行监测
sudo unhide brute
|
监测隐藏的网络端口
数据完整性监测
Tripwire是UNIX平台上著名的文件系统完整性检查工具,它能够帮助判断系统的一些重要文件是否被入侵者修改过。工作原理是,使用数字签名对文件进行比较;对每个要监控的文件,都生成一个数字签名并存档(放在数据库中),在检查时,如果发现数字签名于存档不一致,就说明文件被改动过。
安装Tripwire
\1 2 3 | apt-get install tripwire
#安装过程弹出对话框,全部选择Yes,最后两项收入site密码和local密码
|
配置Tripwire
Tripwire的配置文件位于/etc/tripwire/目录下,主配置文件为twcfg.txt,策略文件为twpol.txt,而tw.cfg和tw.pol分别为配置文件盒策略文件被编译后的二进制文件。Tripwire在运行过程中调用的是编译后的二进制文件,所以,每次修改配置后,都必须将文件编译。
1)配置twcfg.txt
主配文件基本不需要修改,只有SMTP服务器地址已经E-mail报告级别等设置可能需要根据实际进行调整:
\1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #cat twcfg.txt
ROOT = /usr/sbin #Tripwire程序的根目录
POLFILE = /etc/tripwire/tw .pol #策略文件路径
DBFILE = /var/lib/tripwire/ $(HOSTNAME).twd #数据库文件路径
REPORTFILE = /var/lib/tripwire/report/ $(HOSTNAME)-$(DATE).twr #报告文件路径
SITEKEYFILE = /etc/tripwire/site .key #site秘钥文件的路径
LOCALKEYFILE = /etc/tripwire/ $(HOSTNAME)- local .key #local秘钥文件路径
EDITOR = /usr/bin/editor #Tripwire所调用的编辑器路径
LATEPROMPTING = false #是否延迟询问密码
LOOSEDIRECTORYCHECKING = false #是否减少目录报告
MAILNOVIOLATIONS = true #是否发送邮件报告
EMAILREPORTLEVEL =3 #邮件报告级别(0-4)
REPORTLEVEL =3 #指定twprint命令生成报告的级别
SYSLOGREPORTING = true #是否将日志写入syslog
MAILMETHOD =SMTP #指定要使用的邮件协议
SMTPHOST =localhost #指定SMTP主机地址
SMTPPORT =25 #指定SMTP主机的端口号
TEMPDIRECTORY = /tmp
|
文件修改好后,需要重新编译:
\1 2 3 4 5 | cd /etc/tripwite
sudo twadmin –m F –S site.key twcfg.txt
#完成之后可以把twcfg.txt删除,如果删除后可以重新导出:
sudo twadmin –print –cfgfile " sudo tee /etc/tripwire/twcfg .txt
|
2) 配置twpol.txt
策略文件基本不需要修改,里面定义了各种Tripwire策略,包括要监控的目录和文件等。
不过在Ubuntu的默认配置文件中,将整个/proc目录都监控了,这会导致每次做完检查时都出现一堆不必要的错误(旧进程结束,新进程开始)。所以这类可以修改一下该策略,仅监控/proc下面重要的进程。
\1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | vi /etc/tripwire/twpol .txt
#
# Critical devices
#
(
rulename = "Devices & Kernel information" ,
severity = $(SIG_HI),
)
{
/dev -> $(Device) ;
#/proc -> $(Device) ;
/proc/devices -> $(Device);
/proc/net -> $(Device);
/proc/sys -> $(Device);
/proc/cpuinfo -> $(Device);
/proc/modules -> $(Device);
/proc/mounts -> $(Device);
/proc/dma -> $(Device);
/proc/filesystems -> $(Device);
/proc/pci -> $(Device);
/proc/interrupts -> $(Device);
/proc/driver/rtc -> $(Device);
/proc/ioports -> $(Device);
/proc/scsi -> $(Device);
/proc/kcore -> $(Device);
/proc/self -> $(Device);
/proc/kmsg -> $(Device);
/proc/stat -> $(Device);
/proc/ksyms -> $(Device);
/proc/loadavg -> $(Device);
/proc/uptime -> $(Device);
/proc/locks -> $(Device);
/proc/version -> $(Device);
/proc/mdstat -> $(Device);
/proc/meminfo -> $(Device);
/proc/cmdline -> $(Device);
/proc/misc -> $(Device);
}
#修改完成,重新编译
sudo twadmin –m P –S site.key twpol.txt
#策略文件删除后可以重新导出
sudo twadmin –print-polfile " sudo tee /etc/tripwire/twpol .txt
|
测试邮件报告功能:
\1 | sudo tripwire – test –email vfeelit@qq.com
|
初始化Tripwire数据库
\1 2 3 | sudo tripwire –m i
#输入local密码
|
执行完整性监测
默认,Tripwire在安装时会创建一个cron任务,每天执行一次完整性检查,并发送邮件。也可以手工执行:
\1 | sudo tripwire –check –email-report
|
监测报告分析
Tripwire的监测结果,放在/var/lib/tripwire/report/目录下。这些不是文本文件,必须用twprint命令才能查看:
\1 | sudo twprint –m r –twrfile /var/lib/tripwire/report/ <your- file >.twr " less
|
|