热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Linux安全:步步设防(1)

文章标题:Linux安全:步步设防(1)。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  作者:丁玮
  
  正如没有牢不可破的盾一样,没有任何的系统是绝对安全的。同样在安全领域中,也没有谁可以说自己是高手。系统的安全是靠很多前辈的汗水和智慧来换取的。系统的安全涉及方方面面。无论是银行还是电话系统,无论是MS Windows还是大众认为保险的Unix系统,无一例外都有安全问题。安全唯一的重点是系统有多少人在使用。系统的使用者越多,安全问题就越关键,其安全漏洞发现的速度也就需要越快。另外,系统的可伸缩性越好,支持的应用服务越多,安全问题也就越多。在MS Windows系统下会用鼠标的人参考网上的资料就可以设置系统的安全或者破坏系统。安全设置是一把双刃剑,一边是可以撕破不设防的系统、毁掉数据,一边是阻挡非法的入侵、保护数据。这个边界就是Nuker和Hacker的区别。
  
  Linux是开放源码的系统,安全可以从代码级加强,但是对于刚接触Linux系统的人来讲,这就太复杂了。企业要想把Linux作为桌面操作系统来使用,设置就一定和服务器不同。服务器可能是使用在Internet上,不论是其防火墙、代理服务器还是其他应用,安全设置着重在关键应用上,而桌面的应用重点就不一样了。
  
  针对市面上常见的Mandrake、Red Hat、SuSE、Debian,安全设置的方式不尽相同,但是方法是一致的。基于中国市场用户很多的Red Hat为例,下面将以200~300人规模的公司使用Red Hat Linux为桌面操作系统为环境,一步步地设置系统安全,其中也会提及周边资源的配置。
  
  
  硬件的安全
  
  
  机箱需要上锁。任何系统一旦在物理上有所接触,安全性至少降低一半。因为任何人都可以把硬盘卸下来,到其它的系统上读取数据,破坏安全防护。因此桌面机和服务器一样,要尽可能的避免物理接触。
  
  
  BIOS的安全
  
  
  虽然有很多种工具可以读取BIOS的密码,并且也有很多的BIOS有通用密码,但是设置BIOS的密码保护是必要的步骤。使用的密码尽量符合8位以上,数字、符号和字母的大小写组合,并且不要和任何系统密码相同。如果担心被窃取后导致全部机器降低安全性,可以考虑加入个性化密码位。比如:用该机器的人的姓名缩写或机器的唯一编号组合前面的密码,就可以成为较为好记忆,且满足复杂性和唯一性要求的密码。
  
  
  启动设置
  
  
  一旦系统安装完毕,除了硬盘启动外,软盘、光盘、甚至是USB闪存的启动都可能带来安全的问题。因此需要禁止BIOS中除硬盘以外的任何设备的启动。
  
  
  系统分区
  
  
  目前的硬盘都可以满足Linux对容量的要求。以20~40GB硬盘为例,不需要额外的分区方法,使用Red Hat的自动分区可以满足要求。具体分区方法为40MB的启动分区(/boot),2倍于内存的交换分区(swap),剩余为根分区(/)。不将/home目录和/var目录分出来的原因是:因为是单用户使用,系统分区过多会增加管理复杂度,比如/var分区满导致系统异常。简单分区可以满足用户使用。
  
  
  安装
  
  
  请避免完全安装,即Everything选项。前面提到过系统提供的服务越多,漏洞越多,安全越差。安装尽可能使用非交互式安装,比如制作安装软盘、通过NFS或安装脚本。用户直接参与的越少,可管理性越强。主机命名使用统一规则,比如公司的E-mail地址和分机编号,这样便于排错和定位。IP地址也尽量使用静态地址或使用MAC地址绑定的DHCP,这样任何的异常都可以很快排除符合要求的机器。注意使用ext3文件系统,可以减少因为掉电导致的硬盘丢失数据而无法启动。
  
  
  账号和中心控制
  
  
  进行账号和中心控制使用NIS也许是不错,但也是增加管理复杂度的选择。如果使用环境是单一用户登录,文件由服务器共享,那么不使用NIS而使用单一用户本机登录也是一个好选择。当然,现在不仅仅是NIS一种中心账号管理方式可以选择。本机的账号需要使用用户的公司E-mail地址为登录名,当然还要有管理员的账号,但是不要将本地账号加入本地管理员组。有多个本机root权限账号本身就是危险的行为。
  
  
  启动加载程序
  
  
  启动加载程序尽量使用GRUB而不使用LILO。原因是:虽然它们都可以加入启动口令,但是LILO在配置文件中是使用明文口令,而GRUB是使用md5算法加密的。加密码保护后可以防止使用被定制的内核来启动系统,并且在没有其他操作系统的情况下,将启动等待时间设为0。LILO的配置在/etc/lilo.conf文件中,GRUB的配置文件在/boot/grub/grub.conf中:
  
  /etc/lilo.conf
  image=/boot/2.4.18-vmlinuz
  label=Linux
  read-only
  # 口令为明文
  password=Clear-TextPassword
  # 加入保护
  restricted
  /boot/grub/grub.conf
  # 修改启动时间为0,即直接启动
  timeout 0
  # 可以使用grub-md5-crypt来生--md5后的加密口令
  password --md5 $1$LS8eV/$mdN1bcyLrIZGXfM7CkBvU1
  
  
  
  使用sudo
  
  用户有时会使用一些需要root权限的命令,这时需要使用sudo。sudo是一种以限制在配置文件中的命令为基础,在有限时间内给用户使用并且记录到日志中的工具。其配置在/etc/sudoers文件中。当用户使用sudo时,需要输入自己的口令以验证使用者身份,随后的一段时间内可以使用定义好的命令,当使用配置文件中没有的命令时,将会有报警的记录。
  
  /etc/sudoers
  sudo [-bhHpV] [-s ] [-u <用户>] [指令] 或sudo [-klv]
  -b 在后台执行命令
  -h 显示帮助
  -H 将HOME环境变量设为新身份的HOME环境变量
  -k 结束密码的有效期,即下次将需要输入密码
  -l 列出当前用户可以使用的命令
  -p 改变询问密码的提示符号
  -s 执行指定的shell
  -u <用户> 以指定的用户为新身份,不使用时默认为root
  -v 延长密码有效期5分钟
  -V 显示版本信息
  
  
  
  
  限制su用户个数
  
  
  前面提到本机的新建用户没有root权限,因此需要使用su切换用户,Linux可以增加对切换到root用户的限制。使用PAM (Pluggable Authentication Modules)可以禁止除在wheel组以外的任何人su成root,修改/etc/pam.d/su文件,除去屏蔽标识#。使用/usr/sbin/usermod G10 bjecadm将bjecadm这个账号加入gid为10的组,就是wheel组。
  
  /etc/pam.d/su
  # 使用密码验证
  auth sufficient /lib/security/pam_wheel.so debug
  # 限制wheel组用户才可以切换到root
  auth required /lib/security/pam_wheel.so use_uid
  
  
  
  
  加强登录安全
  
  
  通过修改/etc/login.defs文件可以增加对登录错误延迟、记录日志、登录密码长度限制、过期限制等设置。
  
  /etc/login.defs
  #登录密码有效期90天
  PASS_MAX_DAYS 90
  #登录密码最短修改时间,增加可以防止非法用户短期更改多次
  PASS_MIN_DAYS 0
  #登录密码最小长度8位
  PASS_MIN_LEN 8
  #登录密码过期提前7天提示修改
  PASS_WARN_AGE 7
  #登录错误时等待时间10秒
  FAIL_DELAY 10
  #登录错误记录到日志
  FAILLOG_ENAB yes
  #当限定超级用户管理日志时使用
  SYSLOG_SU_ENAB yes
  #当限定超级用户组管理日志时使用
  SYSLOG_SG_ENAB yes
  #当使用md5为密码的加密方法时使用
  MD5_CRYPT_ENAB yes
  
  
  
  
  限制root登录的终端窗口
  
  
  修改/etc/securetty文件,用来防止通过登录穷举法突破安全防线。一旦root不能直接登录,只能通过su来切换用户,并且受到pam.d的限制,即将通过该方式的突破几率降低。
  
  /etc/securetty
  vc/1
  vc/2
  vc/3
  vc/4
  vc/5
  vc/6
  vc/7
  vc/8
  vc/9
  vc/10
  vc/11
  #屏蔽终端窗口的root登录,并可以限制同时打开终端的个数。
  #tty1
  #tty2
  #tty7
  #tty8
  #tty9
  
  
  
  另外,还应该限制终端窗口中的历史记录。修改/etc/profile文件,必要时需更改用户目录下的profile文件。
  
  /etc/profile
  #限制键入命令的历史记录在20条内,这是类似doskey的功能
  HISTSIZE = 20
  #限制记录键入命令历史的文件大小
  HISTFILESIZE = 20
  #设定终端窗口无任何操作时600秒后退出,该设置不适用于所有窗口
  TMOUT =600
  
  
  
  
  备份重要的文件
  
  
  很多木马、蠕虫和后门都会用替换重要文件的办法隐藏自己,将最重要和常用的命令备份是好习惯。准备一套只读介质,光盘或者优盘,甚至放到网上下载都可以。总之是在必要时使用原始的命令而不是系统中可能被感染的命令。需要注意备份的如下:
  
  /bin/su
  /bin/ps
  /bin/rpm
  /usr/bin/top
  /sbin/ifconfig
  /bin/mount
  
  
推荐阅读
  • 主流操作系统简介
    主流操作系统简介子墨居士操作系统理论定义为管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合。操作系统是计算机系统的关键组成部分࿰ ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 如何查看电脑系统版本_腾讯云服务器系统版本怎么看?Windows和Centos版本怎么选?...
    腾讯云服务器系统版本怎么看?想要知道自己的腾讯云服务器系统版本是哪个,可以登录云服务器后台管理系统查看,或者使用命令行查询,如果不会操作& ... [详细]
  • 如何监控 Linux 服务器状态?,分享
    Linux服务器我们天天打交道,特别是Linux工程师更是如此。为了保证服务器的安全与性能,我们经常需要监控服务器的一些状态,以保证工作能顺利开展。本文介绍的几个命令,不仅仅适用于 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Kali Linux 简介
    KaliLinux是世界渗透测试行业公认的优秀的网络安全审计工具集合,它可以通过对设备的探测来审计其安全性,而且功能完备,几乎包含了目前所 ... [详细]
  • 阿里云服务器iis设置方法与上千种Linux桌面版本相比,Linux服务器只有可怜的十几种。但想要选对适合你的企业需要的仍然不是件容易的事情,选Linux服务器首先要 ... [详细]
  • 下载地址http:www.kbengine.org这货不错安装在Linux上安装(CentosDebianUbuntuetc.)服务端,请在终端输入:pythonkbenginek ... [详细]
author-avatar
拍友2502916683
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有