参考资料:The Solaris Security FAQ by Peter Baer Galvin
1) (概述--略)
2) 怎样将Solaris配置得更加强壮?
2.1) 哪些文件的许可权限需要改变?
有个叫fix-modes的软件(ftp://ftp.fwi.uva.nl/pub/solaris/fix-modes.tar.gz)可以在
Solaris 2.4和2.5上运行并改变系统文件及目录的存取权限,这样会使非ROOT的用户更难
于更改系统文件或者取得ROOT权限。
2.2) 如何对ROOT的环境加以配置?
将umask设为077或者027.
查看你的环境中路径设置情况,不要有./
2.3) 我该更改哪些启动文件?
通常情况下,你要检查所有在/etc/rc2.d和/etc/rc3.d以S开头的文件,所有并非必要的设备
或者服务都可以重命名(不要再以S开头),然后你可以重新启动,从/var/adm/messages中来
观察自启动的情况,并且从ps -elf的输出中加以检查。
2.4) 如何将ROOT的远程登陆取消?
在/etc/default/login里加上 "CONSOLE"行,在/etc/ftpusers里加上root。
2.5) 如何取消rlogin/rsh服务?
移去/etc/hosts.equiv和/.rhosts以及各home目录下的.rhosts,并且在/etc/inetd.conf中
把r系列服务都杀掉,然后找出inetd的进程号,重启它。
2.6) 哪些帐号是不必须的?
移去或者锁定那些不是必须的帐号,比如sys\uucp\nuucp\listen等等,简单的办法是在
/etc/shadow的password域中放上NP字符。
2.7) 怎样保护我的设备?
在文件/etc/logindevperm中包含了对系统设备的许可权限配置信息,应该检视里面的各项
设定并且手动赋予你所想要的许可权限。
对于抽取式的BSM设备需要设定只有single user允许进入。
2.8) 我应该将/etc的存取权限改为什么才安全?
用chmod -R g-w /etc命令来移去组用户对/etc的写权限。
2.9) Solaris机器充当路由器?
默认情况下,如果Solaris机器有超过一块的网卡的话,它将会在不同网卡间转发数据包,这一行为可
以在/etc/init.d/inetinit中得到控制。要在Solaris 2.4或者更低版本机器下关闭它,可以将
ndd -set /dev/ip ip_forwarding 0添加于/etc/init.d/inetinit的未尾。在Solaris 2.5
中,只要touch /etc/notrouter.
2.10) 如何取消automounter?
Automounter是由/etc/auto_*这些配置文件控制的,要取消它,只要简单地移去这些文件,
并且/或者将/etc/rc2.d/S74autofs改名。
2.11) 如何取消NFS服务?
NFS的共享输出是由/etc/dfs/dfstab文件管理的.可以删除它。要将NFS服务器的守护进程关闭
则可以重命名/etc/rc3.d/S15nfs.server。要防止一台机器成为NFS客户机,可以重命名文件
/etc/rc2.d/S73nfs.client——当重命名这些自启动文件时,要注意不要将文件的首字母设为
“S”。
2.12) 对cron任务我该注意些什么?
你得查看所有的cron任务——在/var/spool/cron/crontabs文件中你可以找到它们。还必须在
/etc/default/cron里设置了"CRONLOG=yes" 来记录corn的动作。
2.13) 使用动态路由有什么风险吗?
使用动态路由守护进程的机器用in.routed及in.rdisc来维护路由,这可能会大大增加路由协议的复杂程
度,而且路由更新会消耗相当大比便的可用带宽,因此在可能的情况下,还是建议你使用静态路由。
2.14) 何时及如何运用静态ARP?
ARP是联系IP地址和以太网的协议(地址转换协议) 。默认地,Solaris机器动态地确定ARP地址,arp命令
可以用来静态地设定ARP表并且刷新它,如果你的系统里仅有少量无需更改的机器,那么这是一个很好的工具。
为了防止ARP欺骗,最好将受托机器的硬件地址作为永久条目保存在ARP的高速缓存中。
2.15) 运行rpcbind是不安全的吗?
rpcbind是允许rpc请求和rpc服务之间相互连接的程序,但标准的rpc是不安全的:(,它使用的是"AUTH_UNIX"
验证, 也就是说它依靠的是远程系统的IP地址和远程用户的UID来验证。一般的系统可能需要某些rpc存在,但
对各种服务器如Web servers, ftp servers, mail servers, etc)最好将rpc服务关闭,你也可以通过
一些安全工具来确定rpc服务是否会影响到你系统的安全性。可以通过将/etc/rc2.d/S71RPC改名来禁止rpc。
2.16) /etc/utmp的权限应该如何设定?
# chmod 644 /etc/utmp
2.17) 哪些程序可以去掉SUID位?
许多setgid和setuid程序都只是由root运行的,或者是由某些特定用户或组运行,那就可以将其setuid位
移去,下面是一个Solaris 2.6上setuid程序的列表,你应该根据自己的情况进行增减。
# find / -perm -4000 -print
/usr/lib/lp/bin/netpr
/usr/lib/fs/ufs/quota
/usr/lib/fs/ufs/ufsdump
/usr/lib/fs/ufs/ufsrestore
/usr/lib/fs/vxfs/vxdump
/usr/lib/fs/vxfs/vxquota
/usr/lib/fs/vxfs/vxrestore
/usr/lib/exrecover
/usr/lib/pt_chmod
/usr/lib/sendmail
/usr/lib/utmp_update
/usr/lib/acct/accton
/usr/lib/uucp/remote.unknown
/usr/lib/uucp/uucico
/usr/lib/uucp/uusched
/usr/lib/uucp/uuxqt
/usr/lib/sendmail.orig
/usr/openwin/lib/mkcookie
/usr/openwin/bin/xlock
/usr/openwin/bin/ff.core
/usr/openwin/bin/kcms_configure
/usr/openwin/bin/kcms_calibrate
/usr/openwin/bin/sys-suspend
/usr/dt/bin/dtaction
/usr/dt/bin/dtappgather
/usr/dt/bin/sdtcm_convert
/usr/dt/bin/dtprintinfo
/usr/dt/bin/dtsession
/usr/bin/at
/usr/bin/atq
/usr/bin/atrm
/usr/bin/crontab
/usr/bin/eject
/usr/bin/fdformat
/usr/bin/login
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/ps
/usr/bin/rcp
/usr/bin/rdist
/usr/bin/rlogin
/usr/bin/rsh
/usr/bin/su
/usr/bin/tip
/usr/bin/uptime
/usr/bin/w
/usr/bin/yppasswd
/usr/bin/admintool
/usr/bin/ct
/usr/bin/cu
/usr/bin/uucp
/usr/bin/uuglist
/usr/bin/uuname
/usr/bin/uustat
/usr/bin/uux
/usr/bin/chkey
/usr/bin/nispasswd
/usr/bin/cancel
/usr/bin/lp
/usr/bin/lpset
/usr/bin/lpstat
/usr/bin/volcheck
/usr/bin/volrmmount
/usr/bin/pppconn
/usr/bin/pppdisc
/usr/bin/ppptool
/usr/sbin/allocate
/usr/sbin/mkdevalloc
/usr/sbin/mkdevmaps
/usr/sbin/ping
/usr/sbin/sacadm
/usr/sbin/whodo
/usr/sbin/deallocate
/usr/sbin/list_devices
/usr/sbin/m64config
/usr/sbin/lpmove
/usr/sbin/pmconfig
/usr/sbin/static/rcp
/usr/sbin/vxprint
/usr/sbin/vxmkcdev
/usr/ucb/ps
/usr/vmsys/bin/chkperm
/etc/lp/alerts/printer
而且还应该建立一个setuid/setgid程序的列表,日后可以对比是否有新的setuid程序出现--这可能是
入侵者光临过的征兆。
2.18) 哪些系统工具我可以去掉它?
所有的网络工具你都应该检查并且确定它在你的系统环境里是否是必需的,如果答案为否的话,就
干掉它,下面这些工具有些可以在开始文件中找到它,有些则上在/etc/inetd.conf中被启动的,注
释掉那些不必要的服务,并且kill -HUP inetd守护进程——类似的东西有:
tftp systat rexd ypupdated netstat
rstatd rusersd sprayd walld exec
comsat rquotad name uucp
最好把常规的inetd.conf替换掉——改成只开telnet和ftp服务——如果你真的需要它们的话(建议再
用防火墙建立阻塞)。
2.19) 我应该运行in.fingerd吗?
in.fingerd在过去有一些安全问题,如果你想提供finger工具,用nobody来运行它。
2.20) 如何让syslog有更大作用?
默认情况下,syslog仅提供最精简的记录,你可以通过编辑/etc/syslog.conf文件来让syslog记
录更多的信息,然后你需要重启syslog以使它读取配置文件。
你还可以通过
touch /var/adm/loginlog
chmod 600 /var/adm/loginlog
chgrp sys /var/adm/loginlog
来建立login的记录。
2.21) 对EEPROM如何做才能更安全?
将EEPROM设于安全的模式:通过设定对"ok setenv security-mode=command"的密码保护来实现。
当然这并不能真正地防止入侵,如果某人可以物理接触某控制台的话,它就能打开机器并替换掉EEPROM,
更改hostid........
2.22) 我的机器是处于“混杂模式”下吗?
在Solaris下,你只能通过安装某些工具来判断是否机器是处于混杂模式下,可以参见第三部分。只有当你
运行诸如snoop或者某些网络监听软件时机器才会处在混杂模式下,如果你并没有监听整个网络,那极大的可
能性就是黑客已经侵入到你的系统中并且开始以监听来接收数据了。
2.23) 如果我必须运行NFS,如何使它更安全?
在/etc/dfs/dfstab中的所有文件将被所有人共享,默认情况下,NFS客户会以"-o rw"或者"-o ro"选项
共享。
必须使用"nosuid"参数来使setuid程序失效。
不要通过rpcbind来运行nfs mount。而是用更安全的rpcbind替代程序或者安装SUN最新的rpcbind补丁。
在可能的情况下,尽量使用secure-RPC。否则的话,你运行的是"AUTH_UNIX"认证,它仅仅依靠客户的IP地
址来进行验证,很容易有IP欺骗的情况发生。
在可能的情况下,不要使用NFS,因为它的信息传递是通过明文的(甚至你用了"AUTH_DES"或者"AUTH_KERB"来
进行认证)所以传输的任何文件对嗅探来说是及危险的。
有程序可以猜度ROOT所mountr的文件名柄,并且获得NFS server上的文件。
2.24) 如何让sendmail更安全?
sendmail总是不断地有新漏洞被发现,怎样才能使它更安全呢?
使用最新版本的Berkeley sendmail (see section 3)
使用smrsh (section 3)
从/etc/aliases里删除decode
将/etc/aliases的权限设为644
可以考虑使用代理防火墙来过滤SMTP中不必要的命令。
2.25) NIS是安全的吗,如何使其更强壮?
NIS从来就不是一个安全的服务,如果配置得当的话NIS+会更好些,就象暴力破解密码一样,NIS域名
如果被猜出来,就会给入侵者提供相当丰富的信息,要关闭这个漏洞,可以将信任主机的地址放在
/var/yp/securenets中。并且考虑使用NIS+或者secure RPC。
2.26) 匿名FTP要怎样才会安全可靠?
Solaris 2.5 ftpd(1M)包含了一个很好的FTP配置说明
cp /etc/nsswitch.conf ~ftp/etc
确保包含~ftp的文件系统在被安装是没有用nosuid选项
在~ftp下任何文件的属主都不是"ftp"
更详细的信息参见它的配置说明及FAQ
2.27) 如何将X配置得更安全?
使用SUN-DES-1选项来调用Secure RPC来通过X鉴别,可以使用xhost +user@host来通过访问请求。
2.28) 如何打开SUN-DES-1的鉴别机制?
set DisplayManager*authorize: true
set DisplayManager._0.authName: SUN-DES-1
rm ~/.Xauthority
增加对localhost的许可权限:通过xauth local/unix:0 SUN-DES-1 unix.local@nisdomain
xauth local:0 SUN-DES-1 unix.local@nisdomain
Start X via xinit -- -auth ~/.Xauthority
把你自己加入,并移去其他所有人:xhost +user@ +unix.local@nisdomain -local -localhost
赋予用户foo进入主机"node"的权限:
允许foo进入node: xhost +foo@
建立适当的foo的xauthority: xauth add node:0 SUN-DES-1 unix.node@nisdomain
foo现在就能连上"node"了: xload -display node:0
2.29) 我需要安装哪些补丁?
用showrev -p命令来察看补丁在系统里的安装情况,在你想保护的主机以及大众都可以访问的主机
上,你应该到SUN公司的主页上去查找相关的补丁包来安装,并且应该常常查看最新的补丁发布情况。
2.30) 如何防止在堆栈中执行代码?
入侵者常常使用的一种利用系统漏洞的方式是堆栈溢出,他们在堆栈里巧妙地插入一段代码,利用
它们的溢出来执行,以获得对系统的某种权限。
要让你的系统在堆栈缓冲溢出攻击中更不易受侵害,你可以在/etc/system里加上如下语句:
set noexec_user_stack=1
set noexec_user_stack_log =1
第一句可以防止在堆栈中执行插入的代码,第二句则是在入侵者想运行exploit的时候会做记录:)
3) 应该增加或者替代哪些程序?
3.1) inetd
xinetd:
ftp://qiclab.scn.rain.com/pub/security/xinetd*
或 ftp://ftp.dlut.edu.cn/pub/unix/sun-source/xinetd-2.1.tar.Z(不知是否为最新版本).
3.2) ifstatus
ifstatus可以确定你的网卡是否工作于混杂模式(有人进行网络监听?)
url:
ftp://coast.cs.purdue.edu/pub/tools/unix/ifstatus/
3.3) xntp
xntp是有个更安全的网络时间协议(Network Time Protocol).
URL:
ftp://ftp.udel.edu/pub/ntp/xntp3-5.93.tar.gz (1907KB)
3.4) sendmail
用Berkeley Sendmail(http://www.sendmail.org/)替