1. 首页>
  2. 腾讯云代理

[经验分享] 腾讯云主机安全攻略3&续

腾讯云 2017年04月23日 浏览665

腾讯云代理 腾讯云直播申请 游戏上云

摘要:

6. 文件权限许可
6.1  /etc/fstab使用nodev方式
    在 /etc/fstab使用nodev方式nodev选项的意思是禁止用户在任何分区上挂载未授权的设备,需要挂载设备时,应该在其他地方比如/dev。但也有例外,比如在chroot的环境中,经常需要在chroot目录中创建多个设备。如果在你的机器上使用了chroot,要注意这个nodev的选项。
6.2 /etc/fstab中使用nosuid
    在/etc/fstab中使用nosuid在移动介质上,经常会有一些病毒、恶意软件,通过nosuid选项,可以阻止用户在光驱、软驱或者U盘上运行set-UID权限的程序。如果机器上有多个移动设备,也可以在/etc/fstab中相关设备的第四列设置nosuid。
6.3 禁止用户挂载可移动介质
    禁止用户挂载可移动介质SUSE默认只有root用户可以挂载移动介质,如果/etc/fstab被改成允许用户挂载,可能会让病毒进入服务器,或者数据被修改删除。把它改回nouser选项更有助于安全。
6.4 验证passwd,shadow,group文件权限
    验证passwd, shadow,group文件权限这些文件都有着默认的所有者和访问权限,都要修改/etc/shadow权限为644,并且定期检查。AIDE是一个不错的工具,可以提醒你对这些文件权限的注意。不过AIDE是Tripwire的非商业版改进,目前还是BETA版,可能不适合用于关键的生产系统上。
6.5 没有权限限制的目录应该设置粘滞位
    没有权限限制的目录应该设置粘滞位你在任何一个目录上设置粘滞位以后,就只有文件所有者能够删除目录里的文件,而不是任何有写权限的人可以删除。设置粘滞位可以防止彼此覆盖文件,无论是意外、恶意行为。但也应在设置粘滞位之前,查看一下你的应用程序文档,避免破坏用用程序的依赖。
    用这个脚本进行检查:
for PART in `awk '($3 ~"ext2|ext3|reiserfs") \
{ print $2 }' /etc/fstab`; do
find $PART -xdev -type d \
\( -perm -0002 -a ! -perm -1000 \) -print
Done
如果你的系统设置的足够安全的话,这里应该不会有任何的返回。
6.6 任何人都可写的文件
   在某个文件上,如果任何人都可以写,将可能导致对系统的修改,或者对系统上的用户造成影响。避免这种文件的出现,要在编写脚本或者程序时加以注意,因为这会导致系统的完整性受到影响。一般来说,可以消除写访问(chmod o-w ),但对于关键服务器来说,还是要咨询一下相关厂商。
   用这个脚本进行检查
for PART in `awk '($6 != "0") {print $2 }' /etc/fstab`; do
find $PART -xdev -type f \
\( -perm -0002 -a ! -perm -1000 \) -print
done
      如果你的系统设置的足够安全的话,这里应该不会有任何的返回。
6.7 未授权SUID/SGID的可执行文件
     管理员要检查在系统里,有没有未授权的set-UID。另外如果可能的话,应做Set-UID的审计,或者减少这种Set-UID程序。检查方法:for PART in `awk '($6 !="0") { print $2 }' /etc/fstab`; dofind $PART \( -perm -04000 -o -perm-02000 \) \-type f -xdev -printdone
6.8 查找无主文件
    不要让你的系统上有任何无主文件,无主文件可能是一个入侵者已经访问了你的系统,或者是不当文件包的维护安装造成的。比如删除了用户或者组,但是相关文件没有删除。另一种常见情况是软件安装时,没有正确的设置所有者。NFS挂载文件,会忽视用户ID和系统之间的映射同步,也有可能造成无主文件的产生。如果你在使用NIS或者LDAP,那可能是其他原因造成的,什么原因就需要你去仔细检查了。
       检查方法:
for PART in `awk '($6 != "0") { print $2 }'/etc/fstab`; do
  find $PART -nouser -o -nogroup -print
  done
7. 系统的管理、授权、认证
7.1 PAM配置文件里移除.rhosts支持
  .rhosts定义了哪些计算机和用户可以不用提供口令就在本地计算机上执行远程命令,很容易被攻击者利用。使用.rhosts是对用户访问控制规则的破坏,尽量关闭。如果有特殊原因,必须要使用,那就需要一些预防措施。永远不要在.rhosts里使用+通配符。.rhosts必须指定特定的可信任用户名,比如trustedhost DB1,而不是trustedhost。这种在配置HA的时候常见。要避免信任关系之外的主机,而且防火墙或者其他安全设备应该阻止外部的rlogin/rsh/rcp访问。最后,还要确保.rhost文件只有所有者可读。例如文件权限600。
7.2 /etc/ftpusers
    /etc/ftpusers的列表里定义了哪些用户不允许使用系统的FTP,一般来说,应该只有普通用户可以使用FTP,而不是system这种类型的账户。当然,root用户永远都不应该使用FTP方式直接传输文件。SUSE提供了一个netcfg的包,预填充了不该使用FTP的账户。
7.3 防止X Servertcp6000上监听
      X Server在TCP6000上监听,接受来自其他客户端的请求。但是,XServer使用了一个相对不安全的身份验证协议,攻击者可以未授权访问到本地X Server上。使用"-nolisten tcp" 方式可以取消X Server在TCP6000上默认监听。
7.4 限制用户使用at/cron
cron.allow、 at.allow定义了谁可以使用crontab、at命令在预定的时间运行作业。在很多系统上,只有系统管理员有这种能力。即使某个用户不在cron.allow里面,用户仍然可以运行cron作业。cron.allow控制的是:crontab命令调度的权限、修改cron作业的权限。注意:不要修改/etc/at.deny和/etc/cron.deny文件,除非你的确了解他们,这两个文件里都有合理的默认内容。如果对at和cron必须加以控制,创建/etc/at.allow和/etc/cron.allow文件,增加适当的用户。
7.5 限制crontab文件的权限
     系统的crontab文件只能由cron守护进程(运行超级用户权限)和crontab命令(set-UID为root)访问。允许未授权的用户读取修改crontab,可以让用户获得权限提升。
7.6 配置xinetd的访问控制
可使用简单的基于IP的访问控制,限制对xinted的非法连接。现在比较流行的工具是PortSentry,可以用于监视那些试图访问未使用端口的行为。然后再使用系统防火墙SuSEfirewall2来控制。
7.8 限制root登录到系统控制台
root直接登录到系统控制台是不允许的,除非特别情况。在其他时候,管理员应该通过无特权的账户并使用授权机制,比如su、sudo来获取额外的特权。这些机制至少提供了审计的线索。/etc/securtty让你可以规定root可从哪个tty登录。/etc/securtty列出来的都是可以登录的,注释、不存在的都是不允许root登录的。
7.8 设置LILO/GRUB密码
    大多数的Linux系统,默认在引导时,有装载提示,这让攻击者破坏正常的引导变得很容易。对他设置密码,这样在试图修改LILO或GRUB的时候,就需要验证,当然,密码要够强壮。
      方法
      A、如果你有/etc/lilo.conf 文件在/etc/lilo.conf前面添加:password=
      以root执行命令:chown root:root/etc/lilo.confchmod 600 /etc/lilo.conf
      B、如果是/etc/grub.conf文件在/etc/grub.conf取消password 的注释。以root执行命令:
       chown root:root /etc/grub.confchmod 600/etc/grub.conf
7.9 对单用户模式验证
     在一些Linux上你可以在LILO模式下键入linuxsingle进入单用户模式,或者在GRUB的引导编辑菜单。这就带来风险,进入系统的认证应该始终需要root级别的访问,防止攻击者物理访问系统。SUSE默认禁止这种进入方式,但是作为检查来说,还是需要检查一下。如果被改动的话,要搞清楚原因并恢复。8和9这两个项目都为了解决物理/启动的安全问题,也可以考虑设置只从主硬盘启动,或者设置BIOS密码。
7.10 限制NFS客户端请求特权端口
设置:NFS服务器忽略来自客户端的低于1024的源端口访问,这不会妨碍到正常的NFS 操作,但可以阻止一些使用工具软件攻击的人。其配置文件在/etc/exports里。
      如果通过NFS把文件共享出来,那么一定要配置”/etc/exports”文件,使得访问限制尽可能的严格.这就是说,不要使用通配符,不允许对根目录有写权限,而且尽可能的只给读权限.在/etc/exports文件加入:
/dir/to/export host1.mydomain.com(ro,root_squash)
/dir/to/export host2.mydomain.com(ro,root_squash)
建议最配置/etc/exports文件
7.11 syslog的消息接收
     你的服务器是日志服务器吗?需要从网络上、其他主机上接收日志吗?如果是肯定的,启用日志系统的远程消息接受。默认情况下的系统日志的守护进程是syslogd,不在udp514上监听来自其他系统的日志消息(Solaris相反,默认是接受的。)成立一个独立的日志服务器来记录一个或多个日志,是比较推荐的安全做法。但是,如果你不是日志服务器的话,就不应该打开udp514的监听,因为这些信息的传递没有任何认证机制。攻击者也可以利用此端口发起DDOS攻击,或者不停的发送日志消息填满你的日志系统,这样以后的攻击就不会被记录到了。在syslog-ng.conf.in里,把下面这行加上#注释掉#udp(ip("0.0.0.0") port(514))
8. 用户账户和环境
8.1 锁定系统账户
     有很多账户是系统账户,不会被人使用,锁定这些账户有助于减少攻击者的利用。这些账户不应该有shell。如果没有守护进程/服务使用的话,甚至可以将账户删除。比较简单的做法是直接停用,停用的做法是锁定password,设置一个无效的shell(比如/bin/false)。SUSE里使用/bin/false而不是/dev/null和/bin/nologin。
8.2 删除不必要账户
使用awk -F: '($2 == "") { print $1 }' /etc/shadow查找空密码账户。空密码账户是指任何人都可以登录,而不用提供密码。所有的账户都应该有健壮的密码,或者使用锁定密码的字符串:NP、*LOCKED*。
  删除不必要的用户和组用户
  删除的用户,如adm,lp,sync,shutdown,halt,news,uucp,operator,games,gopher等
  删除的组,如adm,lp,news,uucp,games,dip,pppusers,popusers,slipusers等
  可以设置不可更改位
  chattr +i /etc/passwd
  chattr +i /etc/shadow
  chattr +i /etc/group
  chattr +i /etc/gshadow
8.3 设置账户过期和密码参数
     强制用户定期改变密码,设置所有活跃账户(除了系统账户)强制更改密码,例如:每90天(-M 90),下次允许更改密码之前最少的天数7天 (-m 7),用户在密码过期前28天收到警告(-W 28)。一旦密码过期,账户将被锁定7天(-I 7)。最后,密码最小长度为6。这只是一些建议,你需要根据你的实际情况在/etc/login.defs进行调整。
  修改/etc/login.def文件
  PASS_MAX_DAYS   120 
设置密码过期日期à
  
设置密码最少更改日期àPASS_MIN_DAYS   0   
  PASS_MIN_LEN    10   
设置密码最小长度à
  PASS_WARN_AGE  
设置过期提前警告天数à 7  
  
确保/etc/shadow为root只读
  确保/etc/passwd为root读写
8.4 确认在passwd,shadow,group里没有‘+
    使用命令grep ^+: /etc/passwd /etc/shadow /etc/group检查。+用于NIS的数据映射配置,在passwd,shadow,group文件里存在+号,将会为攻击者提供一个提权的途径,应该把它们都删掉。
8.5 确认除了root外,没有UID0的账户
    检查方法:awk -F: '($3 == 0) { print $1 }'/etc/passwd任何UID为0的账户都拥有系统的超级用户权限,唯一的超级用户应该是root,而且还应该通过非特权账户su来获得权限。
8.6 用户主目录应为750权限或者更多的限制
    用户主目录如果有任何人可写的目录,可以导致别人窃取、修改数据,或者获得其他用户的权限。对其他组成员,取消读、执行权限。不过在全局对用户主目录的权限进行修改,可能会造成服务中断。
8.7 删除User.netrc文件
   find / -name .netrc.netrc是ftp命令的初始化文件,能够给Ftp带来一定的方便。但文件可能包含未加密的密码。在上出他们之前,要考虑.netrc文件的作用,因为可能会影响应用。但是一个良好设计的应用,不应该使用.netrc。
8.8 设置默认的用户umask
   将umask设置为077,这样由用户创建的文件和目录不会被系统上任何其他人可读。如果需要改变权限可通过chmod命令。可将uamsk命令插入到shell配置文件中来实现,例如.profile, .cshrc, etc.等。027可让同组人员可读,而022的umask值可让系统上每个用户都可读。但是,过于严格的umask会导致软件的安装问题,比如umask设置为700,那么他的应用程序或者守护进程就无法读取文件。所以一般umask的设置不能过于严格,或者在文件安装之后再控制umask。
8.9关闭核心转储
    这个问题需要问一下你的软件开发商们,他们是否需要调试程序,或者需要看到debug的信息?如果答案是否定的,则可以关闭。核心转储会大量消耗磁盘空间,并且核心转储会包含敏感数据。开发人员需要用这个功能来帮助调试。/etc/security下的limits.con文件是用来控制核心转储的开关。
8.10限制root账户su
   su命令允许你成为系统上的其他用户,常常被用来作为root执行命令。如果不希望某些用户可以su到root,在/etc/pam.d/su下加入:
       auth required pam_wheel.so
     这行命令的意思是,只允许wheel组的用户,可以su为root。其他用户在su root的时候,会收到一条消息,说该密码是不正确的。通过限制使用root账户,即使用户知道root密码,也无法成为root用户,除非它能够物理上控制这个服务器,或者他被添加到wheel组。这样就增加了一个安全保护层,防止未经授权的访问。
9. 杀毒
    在有些系统上,比如邮件服务器、文件服务器,主要是给windows用户使用的,应该有杀毒软件来保护。linux平台下的杀毒软件有:
Sophos http://www.sophos.com/ 商业软件
NAI Virus Scan                商业软件
McAfee http://www.mcafee.com/ 商业软件
ClamAV http://www.clamav.net/ 开源软件
f-prot Antivirus              商业软件
f-prot Antivirushttp://www.f-prot.com 商业软件
Trend Micro                      商业软件
Computer Associates InoculateIThttp://www.cai.com/商业软件
10. 其它安全配置
10.1 对于危险文件创建符号链接
   /root/.rhosts, /root/.shosts, /etc/hosts.equiv等文件的访问控制很薄弱,我们在第七章里已经讨论过了,攻击者会经常针对这些漏洞进行攻击,把他们链接到/dev/null,意味着任何数据都会被简单的抛弃。
       可以使用这个脚本:
for FILE in/root/.rhosts /root/.shosts /etc/hosts.equiv \
/etc/shosts.equiv;do
rm -f $FILEln -s/dev/null $FILE
done
10.2 打开TCP SYN Cookie的保护
   SYN攻击是一种拒绝服务攻击,目的在于消耗系统资源。这个攻击是由于TCP连接握手协议的漏洞,对方发送SYN信息,然后不再回应。这样的攻击就使得系统与数百或者上千的连接保持半开状态。是一个非常简单的攻击方法。
10.3 LILO/GRUB安全
给LILO和GRUB加上一个i的属性,这样他既不能删除也不能修改,可以有效地防止配置文件发生任何变化(不管是意外或者其他原因)。如果想要修改,必须用chattr -i命令。chattr +i /etc/lilo.conf
chattr +i /boot/grub/menu.lst
10.4 配置sudo
     sudo的是一个文件包,它允许管理员授权给用户做一些特权,这些特权超出了用户的权限,比如重启web服务。我们举个例子,因为你的web服务有bug或者不断的出现故障,那你可能需要不断地修改web的配置文件来让找出问题原因。这时候如果你要用su - root的话就会非常繁琐,因为你只是在改完配置文件之后,重启一下web服务而已。这时候sudo就派上用场了,它允许管理员授权给该用户权利来重启web服务。sudo安装之后,使用visudo来配置而不是vi配置文件,因为visudo有错误检查功能。
10.5 删除所有的编译器和汇编程序
在安全上,C编译器会构成对系统可信的威胁。编译器应该安装在开发系统的机器上,而不是一个生产应用系统上。这里只是提醒注意检查。检查这些:gcc、gcc3、gcc3-c++、 gcc3-g77、gcc3-java、gcc3-objc、gcc-c++、gcc-chill、gcc-g77、gcc-java、gcc-objc、bin86、dev86、nasm。
  可以收回系统编译器的权限或删除
  如: chmod 700/usr/bin/gcc
10.5 删除finger程序
  删除finger程序,具体方法如下Finger是UNIX系统中用于查询用户情况的实用程序
  #rpm –e finger



腾讯云服务商邀请关注:

http://partners.qcloud.com/invitation/99377079157835da208bd0

关注服务商的链接,提供下您关注的QQ,我们这边审核下即可快速回复您的工单问题与技术支持! 感谢您的信任与支持!

auto_1452.png

腾讯云技术交流群


ps:本站信息来源于 bbs.qcloud.com

相关文章

在线客服
淘宝购买
腾讯云直播申请 title=
+成为腾讯云VIP客户 腾讯云直播申请 客服电话

15818558013

0755-33940501-803

0755-33940501-808