博威---云架构决胜云计算

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: network

LINUX系统与安全加固专题

[复制链接]
 楼主| 发表于 2007-5-13 23:00:48 | 显示全部楼层
加固Linux服务器

众所周知,网络安全是一个非常重要的课题,而服务器是网络安全中最关键的环节。Linux被认为是一个比较安全的Internet服务器,作为一种开放源代码操作系统,一旦Linux系统中发现有安全漏洞,Internet上来自世界各地的志愿者会踊跃修补它。然而,系统管理员往往不能及时地得到信息并进行更正,这就给黑客以可乘之机。相对于这些系统本身的安全漏洞,更多的安全问题是由不当的配置造成的,可以通过适当的配置来防止。服务器上运行的服务越多,不当的配置出现的机会也就越多,出现安全问题的可能性就越大。对此,本文将介绍一些增强Linux/Unix服务器系统安全性的知识。

系统安全记录文件
操作系统内部的记录文件是检测是否有网络入侵的重要线索。如果你的系统是直接连到Internet,你发现有很多人对你的系统做Telnet/FTP登录尝试,可以运行“#more /var/log/secure | grep refused”来检查系统所受到的攻击,以便采取相应的对策,如使用SSH来替换Telnet/rlogin等。

启动和登录安全性
1.BIOS安全
设置BIOS密码且修改引导次序禁止从软盘启动系统。
2.用户口令
用户口令是Linux安全的一个基本起点,很多人使用的用户口令过于简单,这等于给侵入者敞开了大门,虽然从理论上说,只要有足够的时间和资源可以利用,就没有不能破解的用户口令。但选取得当的口令是难于破解的,较好的用户口令是那些只有他自己容易记得并理解的一串字符,并且绝对不要在任何地方写出来。
3.默认账号
应该禁止所有默认的被操作系统本身启动的并且不必要的账号,当你第一次安装系统时就应该这么做,Linux提供了很多默认账号,而账号越多,系统就越容易受到攻击。
可以用下面的命令删除账号。
# userdel用户名
或者用以下的命令删除组用户账号。
# groupdel username
4.口令文件
chattr命令给下面的文件加上不可更改属性,从而防止非授权用户获得权限。
# chattr +i /etc/passwd
# chattr +i /etc/shadow
# chattr +i /etc/group
# chattr +i /etc/gshadow
5.禁止Ctrl+Alt+Delete重新启动机器命令
修改/etc/inittab文件,将“ca::ctrlaltdel:/sbin/shutdown -t3 -r now”一行注释掉。然后重新设置/etc/rc.d/init.d/目录下所有文件的许可权限,运行如下命令:
# chmod -R 700 /etc/rc.d/init.d/*
这样便仅有root可以读、写或执行上述所有脚本文件。
6.限制su命令
如果你不想任何人能够用su作为root,可以编辑/etc/pam.d/su文件,增加如下两行:
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=isd
这时,仅isd组的用户可以用su作为root。此后,如果你希望用户admin能够用su作为root,可以运行如下命令:
# usermod -G10 admin
7.删减登录信息
默认情况下,登录提示信息包括Linux发行版、内核版本名和服务器主机名等。对于一台安全性要求较高的机器来说这样泄漏了过多的信息。可以编辑/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
然后,进行如下操作:
# rm -f /etc/issue
# rm -f /etc/issue.net
# touch /etc/issue
# touch /etc/issue.net

限制网络访问
1.NFS访问
如果你使用NFS网络文件系统服务,应该确保你的/etc/exports具有最严格的访问权限设置,也就是意味着不要使用任何通配符、不允许root写权限并且只能安装为只读文件系统。编辑文件/etc/exports并加入如下两行。
/dir/to/export host1.mydomain.com(ro,root_squash)
/dir/to/export host2.mydomain.com(ro,root_squash)
/dir/to/export 是你想输出的目录,host.mydomain.com是登录这个目录的机器名,ro意味着mount成只读系统,root_squash禁止root写入该目录。为了使改动生效,运行如下命令。
# /usr/sbin/exportfs -a
2.Inetd设置
首先要确认/etc/inetd.conf的所有者是root,且文件权限设置为600。设置完成后,可以使用“stat”命令进行检查。
# chmod 600 /etc/inetd.conf
然后,编辑/etc/inetd.conf禁止以下服务。
ftp telnet shell login exec talk ntalk imap pop-2 pop-3 finger auth
如果你安装了ssh/scp,也可以禁止掉Telnet/FTP。为了使改变生效,运行如下命令:
#killall -HUP inetd
默认情况下,多数Linux系统允许所有的请求,而用TCP_WRAPPERS增强系统安全性是举手之劳,你可以修改/etc/hosts.deny和/etc/hosts.allow来增加访问限制。例如,将/etc/hosts.deny设为“ALL: ALL”可以默认拒绝所有访问。然后在/etc/hosts.allow文件中添加允许的访问。例如,“sshd: 192.168.1.10/255.255.255.0 gate.openarch.com”表示允许IP地址192.168.1.10和主机名gate.openarch.com允许通过SSH连接。
配置完成后,可以用tcpdchk检查:
# tcpdchk
tcpchk是TCP_Wrapper配置检查工具,它检查你的tcp wrapper配置并报告所有发现的潜在/存在的问题。
3.登录终端设置
/etc/securetty文件指定了允许root登录的tty设备,由/bin/login程序读取,其格式是一个被允许的名字列表,你可以编辑/etc/securetty且注释掉如下的行。
# tty1
# tty2
# tty3
# tty4
# tty5
# tty6
这时,root仅可在tty1终端登录。
4.避免显示系统和版本信息
如果你希望远程登录用户看不到系统和版本信息,可以通过以下操作改变/etc/inetd.conf文件:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h
加-h表示telnet不显示系统信息,而仅仅显示“login:”。

防止攻击
1.阻止ping
如果没人能ping通你的系统,安全性自然增加了。为此,可以在/etc/rc.d/rc.local文件中增加如下一行:
echo 1 >/proc/sys/net/ipv4/
icmp_echo_ignore_all
2.防止IP欺骗
编辑host.conf文件并增加如下几行来防止IP欺骗攻击。
order bind,hosts
multi off
nospoof on
3.防止DoS攻击
对系统所有的用户设置资源限制可以防止DoS类型攻击。如最大进程数和内存使用数量等。例如,可以在/etc/security/limits.conf中添加如下几行:
* hard core 0
* hard rss 5000
* hard nproc 20
然后必须编辑/etc/pam.d/login文件检查下面一行是否存在。
session required /lib/security/pam_limits.so
上面的命令禁止调试文件,限制进程数为50并且限制内存使用为5MB。
经过以上的设置,你的Linux服务器已经可以对绝大多数已知的安全问题和网络攻击具有免疫能力,但一名优秀的系统管理员仍然要时刻注意网络安全动态,随时对已经暴露出的和潜在的安全漏洞进行修补。
  :em11:
 楼主| 发表于 2007-5-13 23:02:44 | 显示全部楼层
Linux安全加固(一)
Linux安全加固(一)
[table=98%]
Linux 安全加固(一)
  • 安全、漏洞发布
[table=486]
编号 语种 地址
1

中文安全、漏洞公告  国家计算机网络应急技术处理协调中心
http://www.cert.org.cn/
安络科技
http://www.cnns.net/
中联绿盟
http://www.nsfocus.net/
2
英文安全、漏洞公告CVE http://www.cve.mitre.org/
SecurityFocus BUGTRAQ
http://www.securityfocus.com/bid/
FrISRT
http://www.frsirt.com/
SecuriTeam
http://www.securiteam.com/

  • 安装最新安全补丁
编号 项目详细项
1 系统提供商提供安全补丁  RedHat
http://www.redhat.com/support/
Debian
http://www.debian.org/security/
S.u.S.E.
http://www.suse.de/security/

  • 核心参数调整
编号项目 注释
1  网络参数
echo “1”>/proc/sys/net/ipv4/icmp_echo_ignore_all
echo “0”>/proc/sys/net/ipv4/ip_forward
echo “0”>/proc/sys/net/ipv4/conf/all/accept_source_route
echo “4096”>/proc/sys/net/ipv4/tcp_max_syn_backlog
echo “1”>/proc/sys/net/ipv4/conf/all/rp_filter
echo “0”>/proc/sys/net/ipv4/conf/all/send_redirects
echo “0”>/proc/sys/net/ipv4/conf/all/accept_redirects
  参数详细说明见:
http://lartc.org/howto/lartc.kernel.obscure.html#AEN1492
2  cat <<END >>/etc/security/limits.conf
* soft core 0
* hard core 0
END
去掉core dump.节省磁盘空间







[/td][/tr][/table][/td][td=1,1,18][/td][/tr][tr][td=1,1,18][/td][td]
[/td][td=1,1,18][/td][/tr][/table]
网友评论




Linux安全加固(二)
Linux安全加固(二)
Linux安全加固(二)
  • 网络与系统服务
[table=98%]
编号 项目 注释
1  检查开放端口对应服务
lsof –i

2  关闭所有无用服务
例子:
chkconfig portmap off
3服务说明  amd:自动安装NFS(网络文件系统)守侯进程
apmd:
高级电源管理
Arpwatch
:记录日志并构建一个在LAN接口上看到的以太网地址和IP地址对数据库
Autofs
:自动安装管理进程automount,与NFS相关,依赖于NIS
Bootparamd
:引导参数服务器,为LAN上的无盘工作站提供引导所需的相关信息
crond
Linux下的计划任务
Dhcpd
:启动一个DHCP(动态IP地址分配)服务器
Gated
:网关路由守候进程,使用动态的OSPF路由选择协议
Httpd
WEB服务器
Inetd
:支持多种网络服务的核心守候程序
Innd
Usenet新闻服务器
Linuxconf
:允许使用本地WEB服务器作为用户接口来配置机器
Lpd
:打印服务器
Mars-nwe
mars-nwe文件和用于Novell的打印服务器
Mcserv
Midnight命令文件服务器
named
DNS服务器
netfs
:安装NFSSambaNetWare网络文件系统
network
:激活已配置网络接口的脚本程序
nfs
:打开NFS服务
nscd
nscd(Name Switch Cache daemon)服务器,用于NIS的一个支持服务,它高速缓存用户口令和组成成员关系
portmap
RPC portmap管理器,与inetd类似,它管理基于RPC服务的连接
postgresql
:一种SQL数据库服务器
routed
:路由守候进程,使用动态RIP路由选择协议
rstatd
:一个为LAN上的其它机器收集和提供系统信息的守候程序
ruserd
:远程用户定位服务,这是一个基于RPC的服务,它提供关于当前记录到LAN上一个机器日志中的用户信息
rwalld
:激活rpc.rwall服务进程,这是一项基于RPC的服务,允许用户给每个注册到LAN机器上的其他终端写消息
rwhod
:激活rwhod服务进程,它支持LANrwhoruptime服务
sendmail
:邮件服务器sendmail
smb
Samba文件共享/打印服务
snmpd
:本地简单网络管理候进程
squid
:激活代理服务器squid
syslog
:一个让系统引导时起动syslogklogd系统日志守候进程的脚本
xfs
X Window字型服务器,为本地和远程X服务器提供字型集
xntpd
:网络时间服务器
ypbind
:为NIS(网络信息系统)客户机激活ypbind服务进程
yppasswdd
NIS口令服务器
ypserv
NIS主服务器
gpm
:管鼠标的
identd
AUTH服务,在提供用户信息方面与finger类似
amd
运行automount精灵程序,该精灵在必要时自动安装一些 本地设备和NFS文件系统。
apmd
apmd
用来监视系统用电状态,并将相关信息通过syslogd 写入日志。也可以用来在电源不足时关机。 arpwatch
该程序主要用来维护以太网物理地址和IP地址的对应关系。
atalk
AppleTalk
精灵程序。注意不要在后台运行该程序,该程 序的数据结构必须在运行其他进程前先花一定时间初始化。
atd
运行用户用At命令调度的任务。也在系统负荷比较低时 运行批处理任务。
autofs
当您需要时自动转载文件系统,而当您不需要时自动卸载。
bootparamd
该服务允许老的Sun工作站从Linux网络启动,它和rarp 现在很少使用,基本上被bootpdhcp取代了。
crond
cron
Unix下的一个传统程序,该程序周期地运行用户 调度的任务。比起传统的Unix版本,Vixie版本添加了不 少属性,而且更安全,配置更简单。

hcpd
该精灵提供了对动态主机控制协议(Dynamic Host Control Protocol)的访问支持。
gated
gated
通过一个数据库提供了网络路由功能支持。它支持 各种路由协议,包括RIP版本12DCN HELLO协议、 OSPF版本2以及EGP版本24
gpm
gpm
为文本模式下的Linux程序如mc(Midnight Commander)提供了鼠标的支持。它也支持控制台下鼠标 的拷贝,粘贴操作以及弹出式菜单。
httpd
http
是著名的www服务器,可用来提供HTML文件以 CGI动态内容服务。
inetd
因特网操作服务程序。监控网络对各种它管理的服务的需 求,并在必要的时候启动相应的服务程序。通常,inetd 管理的程序有telnetftprshrlogin 关闭inetd也就 关闭了这些由它管理的服务。
innd
inn
是最流行的用户组新闻服务器。它允许您建立起本地 新闻服务器。配置有一定的难度,可以先阅读/usr/doc/ inn*文档获得帮助。
keytable
该程序的功能是转载您在/etc/sysconfig/keyboards里说 明的键盘映射表,该表可以通过kbdconfig工具进行选 择。您应该使该程序处于激活状 态。
ldap
LDAP
代表Lightweight Directory Access Protocol 实现了目录访问协议的行业标准。
linuxconf
linuxconf
Linux下的一个有效的系统配置工具,该服 务允许远程运行。
lpd
lpd
是系统打印守护程序,负责将lpr等程序提交给打印 作业。
mcserv
Midnight Commander
服务进程允许远程机器上的用户 通过Midnight Commander文件管理器操作本机文件。服 务进程用PAM来验证用户,需要给出 户名/口令以通过验证。
mysql
一个快速高效可靠的轻型SQL数据库引擎。
named
域名服务器,将Internet主机名解析为点分的IP地址。 netfs 负责装载/卸载NFSSambaNCP(Netware)文件系统。
network
激活/关闭启动时的各个网络接口。
nfs
NFS
是一个流行的基于TCP/IP网络的文件共享协议。该 服务提供了NFS文件共享服务,具体的配置在/etc/ exports文件里。
nscd
该服务负责密码和组的查询,并且缓冲查询结果。如果您 的系统有比较慢的服务(NISNIS+),则应该启动该 服务。
pcmcia
pcmcia
主要用于支持笔记本电脑。
portmap
portmap
用来支持RPC连接,RPC被用于NFS以及NIS 等服务。
postgresql
PostgreSQL
关系数据库引擎。
proftpd
proftpd
Unix下的一个配置灵活的ftp守护程序。
radvd
路由广播程序。
random
保存和恢复系统的高质量随机数生成器,这些随机数是系 统一些随机行为提供的。
routed
该守护程序支持RIP协议的自动IP路由表维护。RIP主要 使用在小型网络上,大一点的网络就需要复杂一点的协议。
rstatd
Rstat
协议允许网络上的用户获得同一网络上各机器的性能 参数。
rusersd
该服务使网络用户可以定位同一网络上的其他用户。
rwalld
Rwall
协议允许远程用户向在同一系统中活跃着的终端发送 消息,类似wall的本地行为。
rwhod
允许远程用户获得运行rwho精灵的机器上所有已登录用户 的列表,与finger类似。
sendmail
大名鼎鼎的邮件服务器。
smb
启动和关闭smbdnmbd精灵程序以提供SMB网络服务。
snmpd
简单网络管理协议(SNMP)的守护精灵。
syslog
syslog
是操作系统提供的一种机制,守护程序通常使用这 种机制将各种信息写到各个系统日志文件。通常应该启动 该服务。
xfs
X
的字体服务器。
ypbind
NIS/YP
的客户端守护程序。如果您需要使用NIS/YP 器,请启动这项服务,否则,关闭这项服务。
yppasswd
NIS用户能够修改密码。运行在NIS域的服务器上。客 户端程序同样也叫yppasswd
ypserv
标准NIS/YP网络协议的一个实现。允许主机名,用户名
和其他信息分布于网络各端。运行在NIS服务器上,客户
端不需要。
4  防火墙过滤策略
例子:
iptables –F
iptables –P INPUT DROP
iptables –I INPUT –s xxx.xxx.xxx.xxx/32 –p tcp –dport xx –j ACCEPT
默认INPUT链设置为DROP,只同意指定IP或服务流入INPUT





[/td][/tr][/table]
 楼主| 发表于 2007-5-13 23:04:25 | 显示全部楼层
Linux安全加固(三)
Linux安全加固(三)
Linux安全加固(三)
  • 账号与环境变量

[table=98%]
编号项目 注释
  
清除系统帐号
#!/bin/sh
for user in uucp operator
do
userdel $user
done
for user in bin daemon adm lp shutdown halt mail dnscache dnslog ftp games gdm gopher halt htdig ident mail mailnull named news nobody nscd postfix postgres netdump qmaild qmaill qmailp qmailq qmailr qmails rpc rpcuser squid sympa sync xfs sshd mysql pcap smmsp pegasus
do
usermod -L -s /dev/null $user
done
  
检查shadow中空口令帐号
awk -F: '($2 == "") { print $1 }' /etc/shadow
  
检查系统内具有root权限的帐号
awk -F: '($3 == 0) { print $1 }' /etc/passwd
  
用户目录/home 许可权限是否为755或更严格的限制
#!/bin/sh
for dir in `ls`
do chmod -R 755 /home/$dir done
  
为用户设置合适的缺省umask:
#!/bin/sh
cd /etc
for file in profile csh.login csh.cshrc bashrc
do
if [ `grep -c umask $file` -eq 0 ];
then
echo "umask 022" >> $file
fi
chown root:root $file
chmod 444 $file
done

  • 其他
编号 项目注释
1  
禁止普通用户mount文件系统
cd /etc/security
egrep -v '(floppy|cdrom)' console.perms \
> console.perms.new
mv console.perms.new console.perms
grep -v supermount /etc/fstab > /etc/fstab.new
mv /etc/fstab.new /etc/fstab
chown root:root console.perms /etc/fstab
chmod 0600 console.perms
chmod 0644 /etc/fstab
2 passwd, shadow, group文件设置正确的许可权限
3  
查找未认证的SUID/SGID可程序:
for part in \
`awk '($3 == "ext2" || $3 == “ext3”) \
{ print $2 }' /etc/fstab`
do
find $part \( -perm -04000 -o -perm -02000 \) \
-type f -xdev -print
done
4  
passwd shadow group gshadow 加不可更改属性
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/pgshadow
5
资源限制

对你的系统上所有的用户设置资源限制可以防止DoS类型攻击(denial of service attacks
如最大进程数,内存数量等。例如,对所有用户的限制象下面这样:
编辑/etc/security/limits.conf
* hard core 0
* hard rss 5000
* hard nproc 20
你也必须编辑/etc/pam.d/login文件加/检查这一行的存在
session required /lib/security/pam_limits.so
上面的命令禁止core filescore 0,限制进程数为“nproc 50“,且限制内存使用
5Mrss 5000
6  
禁止 Control-Alt-Delete 重启动机器命令
vi /etc/inittab
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
改成
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
init q 重新挂起
7
重新设置/etc/rc.d/init.d/目录下所有文件的许可权限
chmod -R 700 /etc/rc.d/init.d/*
仅仅root可以读,写,执行上述所有script file.
8
去掉issue版本说明
echo “echo “”> /etc/issue”>> /etc/rc.d/rc.local
暴露过的系统信息
9  
防止单用户登陆
vi /etc/inittab
插入~~:S:wait:/sbin/sulogin
接触到了硬件其实没安全可言





[/td][/tr][/table]
 楼主| 发表于 2007-5-13 23:15:21 | 显示全部楼层
linux安全加固笔记
上一篇 / 下一篇  2005-02-23 18:58:18 / 个人分类:其他

查看( 8 ) / 评论( 0 ) / 评分( 0 / 0 )
/etc/login.defs PASS_MIN_LEN
/etc/security/console.apps/

disabling.sh
# !/bin/sh
cd /etc/pam.d
for i in * ; do
sed '/[^#].*pam_console.so/s/^/#/' < $i > foo && mv foo $i
done

/etc/hosts.deny ALL:ALL@ALL,PARANOID
/etc/hosts.allow
sshd: 208.164.186.1 gate.openarch.com
加上PARANOID参数后,如果要使用telnet或ftp服务,需要在/etc/hosts文件中加入允许访问的客户端的计算机的名字和ip地址,否则要进行dns反查,可能要等上好几分钟的时间。
tcpdchk

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

使得telnet不显示任何提示信息
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h

禁止ip原路由,如果安装ipchains防火墙,就没有必要了,防火墙脚本中含有这个信息
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 > $f
done

echo 1 > /proc/sys/net/ipv4/tcp_syncookies

chattr +i /etc/services
chattr +i /etc/inetd.con
[root@deep]# chattr +i /etc/passwd
[root@deep]# chattr +i /etc/shadow
[root@deep]# chattr +i /etc/group
[root@deep]# chattr +i /etc/gshadow

/etc/pam.d/login
#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so nullok use_authtok md5 shadow
session required /lib/security/pam_pwdb.so
session required /lib/security/pam_limits.so
#session optional /lib/security/pam_console.so

nosuid nodev /etc/fstab
/dev/sda11 /tmp ext2 nosuid,nodev,noexec 1 2
/dev/sda6 /home ext2 nosuid,nodev 1 2

[root@deep]# chmod 700 /bin/rpm

/etc/lilo.conf
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=00 #"change this line to 00.
Default=linux
restricted #"add this line.
password=<password> #"add this line and put your password.
image=/boot/vmlinuz-2.2.12-20
label=linux
initrd=/boot/initrd-2.2.12-10.img
root=/dev/sda6
read-only

[root@deep]# chmod 600 /etc/lilo.conf (will be no longer world readable).
[root@deep]# /sbin/lilo -v (to update the lilo.conf file).
[root@deep]# chattr +i /etc/lilo.conf
[root@deep]# chattr -i /etc/lilo.conf


[root@deep]# chmod -R 700 /etc/rc.d/init.d/*


[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls –lg &leftsign;&rightsign;
\;
*-rwsr-xr-x 1 root root 35168 Sep 22 23:35 /usr/bin/chage
*-rwsr-xr-x 1 root root 36756 Sep 22 23:35 /usr/bin/gpasswd
*-r-xr-sr-x 1 root tty 6788 Sep 6 18:17 /usr/bin/wall
-rwsr-xr-x 1 root root 33152 Aug 16 16:35 /usr/bin/at
-rwxr-sr-x 1 root man 34656 Sep 13 20:26 /usr/bin/man
-r-s--x--x 1 root root 22312 Sep 25 11:52 /usr/bin/passwd
-rws--x--x 2 root root 518140 Aug 30 23:12 /usr/bin/suidperl
-rws--x--x 2 root root 518140 Aug 30 23:12 /usr/bin/sperl5.00503
-rwxr-sr-x 1 root slocate 24744 Sep 20 10:29 /usr/bin/slocate
*-rws--x--x 1 root root 14024 Sep 9 01:01 /usr/bin/chfn
*-rws--x--x 1 root root 13768 Sep 9 01:01 /usr/bin/chsh
*-rws--x--x 1 root root 5576 Sep 9 01:01 /usr/bin/newgrp
*-rwxr-sr-x 1 root tty 8328 Sep 9 01:01 /usr/bin/write
-rwsr-xr-x 1 root root 21816 Sep 10 16:03 /usr/bin/crontab
*-rwsr-xr-x 1 root root 5896 Nov 23 21:59 /usr/sbin/usernetctl
*-rwsr-xr-x 1 root bin 16488 Jul 2 10:21 /usr/sbin/traceroute
-rwxr-sr-x 1 root utmp 6096 Sep 13 20:11 /usr/sbin/utempter
-rwsr-xr-x 1 root root 14124 Aug 17 22:31 /bin/su
*-rwsr-xr-x 1 root root 53620 Sep 13 20:26 /bin/mount
*-rwsr-xr-x 1 root root 26700 Sep 13 20:26 /bin/umount
*-rwsr-xr-x 1 root root 18228 Sep 10 16:04 /bin/ping
*-rwxr-sr-x 1 root root 3860 Nov 23 21:59 /sbin/netreport
-r-sr-xr-x 1 root root 26309 Oct 11 20:48 /sbin/pwdb_chkpwd

[root@deep]# chmod a-s /usr/bin/chage
[root@deep]# chmod a-s /usr/bin/gpasswd
[root@deep]# chmod a-s /usr/bin/wall
[root@deep]# chmod a-s /usr/bin/chfn
[root@deep]# chmod a-s /usr/bin/chsh
[root@deep]# chmod a-s /usr/bin/newgrp
[root@deep]# chmod a-s /usr/bin/write
[root@deep]# chmod a-s /usr/sbin/usernetctl
[root@deep]# chmod a-s /usr/sbin/traceroute
[root@deep]# chmod a-s /bin/mount
[root@deep]# chmod a-s /bin/umount
[root@deep]# chmod a-s /bin/ping
[root@deep]# chmod a-s /sbin/netreport

查找系统中所有人都有写权限的文件
[root@deep]# find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg &leftsign;&rightsign; \;
[root@deep]# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg &leftsign;&rightsign; \;

查找系统中没有主人的文件
[root@deep]# find / -nouser -o -nogroup

查找.rhosts文件,放在crontab中
#!/bin/sh
/usr/bin/find /home -name .rhosts &line; (cat <<EOF
This is an automated report of possible existent “.rhosts” files on the server
deep.openarch.com, generated by the find utility command.
New detected “.rhosts” files under the “/home” directory include:
EOF
cat
) &line; /bin/mail -s "Content of .rhosts file audit report" root

<θθθ>201|
 楼主| 发表于 2007-5-13 23:18:47 | 显示全部楼层
linux安全攻略
http://www.xici.net 作者:大鹰 (2001-05-10 20:52:11)

前言
呵呵,这篇文章的目的在于让读者对linux的安全配置有个大概的了解,呵呵,因为我也看过一些关于这方面的文章,说的太空了,呵呵
其实我觉得linux机器要做一般的安全配置的话,分分钟就搞定了,嘿嘿
1,安装
安装的时候,大家都轻车熟路了,呵呵,首先,隔离网络进行系统安装,当然选择custom方式,安装你需要的软件包。
硬盘分区:如果用root分区纪录数据,如log文件和email,就可能因为拒绝服务产生大量日志或垃圾邮件。导致系统崩溃。所以建议为/var开
辟单独的分区,用来存放日志和邮件,以避免root分区被溢出啦,那就惨喽。最好为特殊的应用程序单独开一个分区,特别是可以产生大量日
志的程序,还有建议为/home单独分一个区,这样他们就不能填满/分区了,以下是我硬盘上的分区情况:
/   root
/var  log
/hacking  嘻嘻,我的一些黑软
swap   不多说了
/home
当系统安装完重新启动后,最好打上相应系统的安全补丁,请大家养成良好的习惯,记住,你不是在自己家里装98,你装的是一个linux服务器
,呵呵。对于redhat系统而言可以在:http://www.redhat.com/corp/support/errata/找到补丁。
在redhat6.1以后的版本带有一个工具up2date,它能够测定哪些rpm包需要升级,然后自动从redhat的站点下载并完成安装。
2,关闭服务
呵呵,有句话说的好,要想你的系统绝对安全,就是掐断网线,呵呵,当然我们的机器要对外提供服务,那是不现实的,所以关闭不必要的服
务是必要的,因为有些服务会为您的系统带来麻烦。
默认的linux就是一个强大的系统,运行了很多的服务。但,有许多服务是不需要的,很容易引起安全风险。第一个文件是/etc/inetd.conf,
它制定了/usr/sbin/inetd将要监听的服务,你可能只需要其中的两个:telnet和ftp,其他的许多如popd,imapd和rsh都是有可能引发安全问题
的。用下面的命令显示没有被注释掉的服务:
suneagle# grep -v "#" /etc/inetd.conf
ftp   stream  tcp   nowait root   /usr/sbin/tcpd in.ftpd -l -a
telnet stream tcp   nowait  root  /usr/sbin/tcpd in.telnetd
shell  stream tcp   nowait root  /usr/sbin/tcpd  in.rshd
login  stream tcp   nowait root  /usr/sbin/tcpd  in.rlogind
talk  dgram  udp   wait   nobody.tty   /usr/sbin/tcpd  in.talkd
ntalk  dgram  udp   wait  nobody.tty    /usr/sbin/tcpd in.ntalkd
pop-3  stream tcp   nowait root  /usr/sbin/tcpd ipop3d
imap  stream tcp   nowait root  /usr/sbin/tcpd imapd
finger stream tcp   nowait  nobody /usr/sbin/tcpd in.fingerd
linuxconf stream tcp wait root /bin/linuxconf linuxconf --http
exec  stream tcp   nowait root  /bin/sh sh -i
哈哈,大家看最后一行,不就被绑了个rootshell么?呵呵,有什么后果?呵呵看看,在远程的一台win2000机器上用如下命令:
E:\cmd>nc 192.0.0.88 512
bash# id
id
uid=0(root) gid=0(root) groups=0(root)
bash#
知道了吧?嘿嘿,大家注意哦*^_^*
我有写过一篇关于用这个文件绑后门的文章,呵呵,攻击性很强,这个命令可以帮你查出有没有后门,呵呵。
下个要启动的是.rc脚本,它们决定了init进程要启动哪些服务。redhat系统下,这些脚本在/etc/rc.d/rc3.d(如果你的系统以x为默认启动的
话,就是/etc/rc.d/rc5.d)。要在启动时禁止某个服务,只需要把大写的S替换为小写的s,同时,redhat也提供一个工具来帮助你关闭服务,
输入/usr/sbin/setup,然后选择"system services",就可以定制系统启动时跑哪些服务。另外一个选择是chkconfig命令,很多linux版本的系
统都自带这个工具。脚本名字中的数字是启动的顺序,以大写的K开头的是杀死进程用的。
以下是一些主要的服务:
S05apmd   笔记本需要
S10xntpd   网络时间协议
S11portmap  运行rpc服务必需
S15sound   声卡相关
S15netfs   nfs客户端
S20rstatd    避免运行r服务,远程用户可以从中获取很多信息
S20rusersd
S20rwhod
S20rwalld
S20bootparamd 无盘工作站
S25squid   代理服务
S34yppasswdd NIS服务器,此服务漏洞很多
S35ypserv   NIS服务器,此服务漏洞很多
S35dhcpd   dhcp服务
S40atd     和cron很相似的定时运行程序的服务
S45pcmcia   pcmcia卡,笔记本
S50snmpd    SNMP,远程用户能从中获得许多系统信息
S55named   DNS服务
S55routed   RIP,没有必要就别运行它
S60lpd    打印服务
S60mars-nwe  Netware的文件和打印服务
S60nfs     NFS服务器,漏洞极多
S72amd     automount,mount远程用的
S75gated    另外一种路由服务,例如OSPF
S80sendmail 邮件服务,如关闭,仍然可以发信,只是不能收信和作中继
S85httpd   web服务器
S87ypbind   NIS客户端
S90xfs    X font服务器
S95innd    News服务器
Slinuxconf   这个都熟悉吧,呵呵,通过浏览器远程管理系统用的
用这个命令察看在关闭启动脚本之前有多少服务在运行:
suneagle# ps -eaf|wc -l
54
我的系统有54种服务在运行呢,呵呵
当你关闭一些服务以后,重新运行以上命令看看少了多少服务。运行的服务越少,系统自然越安全了,嘿嘿。用下面命令察看哪些服务在运行

suneagle# netstat -na --ip
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address      Foreign Address     State
tcp    0   136 192.0.0.88:23      192.0.0.5:1236      ESTABLISHED
tcp     0   0 192.0.0.88:23      192.0.0.8:1113      ESTABLISHED
tcp     0   0 192.0.0.88:139      192.0.0.8:1112      ESTABLISHED
tcp     0   0 192.0.0.88:1024     61.153.17.24:23     ESTABLISHED
tcp     0   0 192.0.0.88:23      192.0.0.8:1084      ESTABLISHED
tcp     0   0 0.0.0.0:139       0.0.0.0:*        LISTEN
tcp     0   0 0.0.0.0:80        0.0.0.0:*        LISTEN
tcp     0   0 0.0.0.0:25        0.0.0.0:*        LISTEN
tcp     0   0 0.0.0.0:515       0.0.0.0:*        LISTEN
tcp     0   0 0.0.0.0:512       0.0.0.0:*        LISTEN
tcp     0   0 0.0.0.0:98        0.0.0.0:*        LISTEN
tcp     0   0 0.0.0.0:79        0.0.0.0:*        LISTEN
tcp     0   0 0.0.0.0:143       0.0.0.0:*        LISTEN
tcp     0   0 0.0.0.0:110       0.0.0.0:*        LISTEN
tcp     0   0 0.0.0.0:513       0.0.0.0:*        LISTEN
tcp     0   0 0.0.0.0:514       0.0.0.0:*        LISTEN
tcp     0   0 0.0.0.0:23        0.0.0.0:*        LISTEN
tcp     0   0 0.0.0.0:21        0.0.0.0:*        LISTEN
tcp     0   0 0.0.0.0:113       0.0.0.0:*        LISTEN
tcp     0   0 0.0.0.0:111       0.0.0.0:*        LISTEN
udp     0   0 127.0.0.1:1024      0.0.0.0:*
udp     0   0 192.0.0.88:138      0.0.0.0:*
udp     0   0 192.0.0.88:137      0.0.0.0:*
udp     0   0 0.0.0.0:138       0.0.0.0:*
udp     0   0 0.0.0.0:137       0.0.0.0:*
udp     0   0 0.0.0.0:518       0.0.0.0:*
udp     0   0 0.0.0.0:517       0.0.0.0:*
udp     0   0 0.0.0.0:111       0.0.0.0:*
raw     0   0 0.0.0.0:1        0.0.0.0:*        7
raw     0   0 0.0.0.0:6        0.0.0.0:*        7
呵呵,我这个系统由于测试用,所以故意开了不少危险端口,呵呵,大家别学我哦,该关的就关啦,哈哈。
3,日志纪录和增强
关闭一些不必要的服务以后,日志也是需要我们关心的一块,配置好的unix系统日志非常强大,甚至可以做出陷阱,关于日志,我可以写长篇
大论,这里就不很详细讲述日志的原理了,感兴趣的朋友可以参考相关资料或阅读我的另一篇文章《solaris系统日志原理》。
好!所有的日志都在/var/log下(仅对linux系统而言),默认情况下linux的日志就很强大了,除了ftp。但我们可以通过修改/etc/ftpaccess
或者/etc/inetd.conf,来保证每一个ftp连接日志都能够纪录下来。下面是一个修改inetd.conf的例子:
ftp  stream  tcp  nowait  root  /usr/sbin/tcpd  in.ftpd -l -L -i -o
-l 每一个ftp连接都写到syslog
-L 纪录用户的每一个命令
-i 文件received,纪录到xferlog
-o 文件transmitted,记录到xferlog
账号的安全问题
删除/etc/passwd&/etc/shadow中的一些系统账号,如mail,news等等。尽量关闭匿名ftp服务,删掉ftp用户。
/etc/ftpusers文件,包含了不能使用ftp的用户列表,root应该在其中。
修改/etc/securetty,去除终端ttyp0-ttyp9,使root只能从console或者使用ssh登陆。/etc/issue,不要让次文件透露系统信息。同时要修改
/etc/rc.d/rc/local。
SUID程序是非常危险的,这些程序被普通用户以euid=0(即root)的身份执行,只能有少量程序被设置为SUID。用一下命令列出系统的SUID二
进制程序:
suneagle# find / -perm -4000 -print
用chmod -s去掉一些不需要程序的suid位。
4,连接服务器
作为系统管理员,需要经常对系统进行关系和上传文件,这些通过通信过程必须要保证是安全的。我介绍两个方法:ssh和tcp wrappers。
其实我比较偏向于用ssh,它把你和防火墙之间的通信全部进行了加密,而tcp wrappers没有做到加密一点,呵呵虽然现在先进的sniffer技术
也可以嗅探到ssh的数据包,但它依然还是最安全的。建议用ssh完全取代telnet/ftp,它能够确保数据在网络中的安全传输。ssh和tcpwrapper
都有它们自己的日志纪录,并设有访问控制策略,大家如果要深入了解ssh的话,可以参考想关书籍。
tcpwrappers尽管没有对数据进行加密,但它有日志系统并且可以控制哪些人可以访问你的系统,它在inetd中包装了其他的二进制文件,如
telnet,ftp,finger等等。系统用tcpwrapper进行inetd监听连接,记录了所有请求并且与访问控制列表作比较,如果允许连接,tcpwrapper将
调用实际的服务器进程来连接,如in.telnetd服务,如果拒绝,连接将断开。对linux用户比较幸运的是tcpwrapper已经被默认安装了,我们所
要做的就是编辑/etc/hosts.allow和/etc/hosts.deny两个文件,注意以下事项:
1,尽量使用ip
2,首先通过/etc/hosts.deny禁止来自任何地方对所有服务的访问:ALL:ALL
然后在/etc/hosts.allow中添加要授权的机器及服务。冒号左边为服务,冒号右边为授权机器。
5,加固系统
一上的措施足以应付一般的网络攻击,但你的系统不是100%安全的,从来就没有绝对安全的系统,不是么?嘿嘿。我们来进一步加固系统!
编辑/etc/groups,增加wheel组(其实我很喜欢freebsd的地方,就是默认freebsd这些工作做的很好)。这个组包含了一些用户,可以执行
/bin/su等强大的命令。对其他用户执行这些命令的控制,可以改善系统的安全。如下命令:
suneagle# /bin/chgrp wheel /bin/su
suneagle# /bin/chmod 4750 /bin/su
然后锁定一些文件:.rhosts,.netrc,/etc/hosts.equiv。r命令可以通过这些文件远程连入你的系统。先touch这些文件,然后chmod至0。
suneagle# /bin/touch /root/.rhosts /root/.netrc /etc/hosts.equiv;/bin/chmod 0 /root/.rhosts /root/.netrc /etc/hosts.equiv
linux还有一个众所周知的命令:chattr,呵呵+i操作,即使是root,也在-i之前改不了它们,先在你的系统的/etc/shadow,/etc/inetd.conf
等文件来个chattr +i可以避免一下exploit给你添后门什么的,呵呵。
bash的问题
对于bash用户来讲,有个.bash_history文件,可以记录你的所用的命令,谁也不希望其他人包括root知道自己敲了哪些命令吧?我有两种方法
来解决这个问题
1,在自己的.bash_profile文件中加入一行:
HISTFILESIZE=0
记住不要把HISTSIZE置零,那样就无法使用上下健来调用历史命令了。
2,删除自己目录下的.bash_history,然后建立一个连接:
suneagle$ ln -s /dev/null $HOME/.bash_history
这样,大家理解吧?历史命令都掉到黑洞洞里啦~~~~~
最后,保证物理安全,建立在/etc/lilo.conf中设置密码来控制linux的启动,呵呵,虽然也是可以被破解的,嘿嘿,因为它是明文存放,破解
方法吗,知者知之,不知者就不知啦,嘿嘿。
ok,写了这么多,大概把安全性讲了一下,但里面每个知识点又可以单独写文章,呵呵,学无止尽啊。
 楼主| 发表于 2007-5-13 23:19:17 | 显示全部楼层
如何加固Linux服务器
作者:Linux时代 来源inux时代 (2007-02-01 15:23:39)


  众所周知,网络安全是一个非常重要的课题,而服务器是网络安全中最关键的环节。Linux被认为是一个比较安全的Internet服务器,作为一种开放源代码操作系统,一旦Linux系统中发现有安全漏洞,Internet上来自世界各地的志愿者会踊跃修补它。然而,系统管理员往往不能及时地得到信息并进行更正,这就给黑客以可乘之机。然而,相对于这些系统本身的安全漏洞,更多的安全问题是由不当的配置造成的,可以通过适当的配置来防止。服务器上运行的服务越多,不当的配置出现的机会也就越多,出现安全问题的可能性就越大。对此,本文将介绍一些增强 Linux/Unix服务器系统安全性的知识。

  系统安全记录文件

  操作系统内部的记录文件是检测是否有网络入侵的重要线索。如果你的系统是直接连到Internet,你发现有很多人对你的系统做Telnet/FTP 登录尝试,可以运行“#more /var/log/secure grep refused”来检查系统所受到的攻击,以便采取相应的对策,如使用 SSH来替换Telnet/rlogin等。

  启动和登录安全性

  1. BIOS安全

  设置BIOS密码且修改引导次序禁止从软盘启动系统。

  2.用户口令

  用户口令是Linux安全的一个基本起点,很多人使用的用户口令过于简单,这等于给侵入者敞开了大门,虽然从理论上说,只要有足够的时间和资源可以利用,就没有不能破解的用户口令。但选取得当的口令是难于破解的,较好的用户口令是那些只有他自己容易记得并理解的一串字符,并且绝对不要在任何地方写出来。

  3.默认账号

  应该禁止所有默认的被操作系统本身启动的并且不必要的账号,当你第一次安装系统时就应该这么做,Linux提供了很多默认账号,而账号越多,系统就越容易受到攻击。

   

  可以用下面的命令删除账号。

  # userdel用户名

  或者用以下的命令删除组用户账号。

  # groupdel username

  4.口令文件

  chattr命令给下面的文件加上不可更改属性,从而防止非授权用户获得权限。

  # chattr +i /etc/passwd

  # chattr +i /etc/shadow

  # chattr +i /etc/group

  # chattr +i /etc/gshadow

  5.禁止Ctrl+Alt+Delete重新启动机器命令

  修改/etc/inittab文件,将“ca::ctrlaltdel:/sbin/shutdown -t3 -r now”一行注释掉。然后重新设置/etc/rc.d/init.d/目录下所有文件的许可权限,运行如下命令:

  # chmod -R 700 /etc/rc.d/init.d/*

  这样便仅有root可以读、写或执行上述所有脚本文件。

  6.限制su命令

  如果你不想任何人能够用su作为root,可以编辑/etc/pam.d/su文件,增加如下两行:

  auth sufficient /lib/security/pam_rootok.so debug

  auth required /lib/security/pam_wheel.so group=isd

  这时,仅isd组的用户可以用su作为root。此后,如果你希望用户admin能够用su作为root,可以运行如下命令:

  # usermod -G10 admin

  7.删减登录信息

  默认情况下,登录提示信息包括Linux发行版、内核版本名和服务器主机名等。对于一台安全性要求较高的机器来说这样泄漏了过多的信息。可以编辑/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 "">>/etc/issue

  # echo "Kernel 100 100uname -r) on 100 100uname -m)">>/etc/issue

  # cp -f /etc/issue /etc/issue.net

  # echo>>/etc/issue

  然后,进行如下操作:

  # rm -f /etc/issue

  # rm -f /etc/issue.net

  # touch /etc/issue

  # touch /etc/issue.net

  限制网络访问

  1.NFS访问

  如果你使用NFS网络文件系统服务,应该确保你的/etc/exports具有最严格的访问权限设置,也就是意味着不要使用任何通配符、不允许root写权限并且只能安装为只读文件系统。编辑文件/etc/exports并加入如下两行。

  /dir/to/export host1.mydomain.com(ro,root_squash)

  /dir/to/export host2.mydomain.com(ro,root_squash)

  /dir/to/export是你想输出的目录,host.mydomain.com是登录这个目录的机器名,ro意味着mount成只读系统,root_squash禁止root写入该目录。为了使改动生效,运行如下命令。

  # /usr/sbin/exportfs -a

  2.Inetd设置

  首先要确认/etc/inetd.conf的所有者是root,且文件权限设置为600。设置完成后,可以使用“stat”命令进行检查。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|boway Inc. ( 冀ICP备10011147号 )

GMT+8, 2024-4-23 22:42 , Processed in 0.125669 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表