热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于freebsd系统安全配置详解

系统安全是每个管理者都必须注重的课题。有人说:「没有不安全的系统,只有懒惰的管理者。」每个系统都有可能会出现漏洞,而有安全性的漏洞产生时,发行的单位都会立即发布通告及修补的方式,而系统管理者的职责便是要随时注意是否需要更新漏洞、随时注意

系统安全是每个管理者都必须注重的课题。 有人说:「没有不安全的系统,只有懒惰的管理者。」每个系统都有可能会出现漏洞,而有安全性的漏洞产生时,发行的单位都会立即发布通告及修补的方式,而系 统管理者的职责便是要随时注意是否需要更新漏洞、随时注意系统是否有异常的讯息。

本章将针对 FreeBSD 系统安全做详细的说明,读完本章后,您将可以了解下列主题:

•基本系统管理应注重的安全项目。
•如果安全的管理账号。
•网络安全管理。
•如何进行漏洞修补。
1 概论

FreeBSD 相对而言虽然是比较安全的操作系统,但是有时候问题不是在操作系统本身,而是所安装的软件。在 FreeBSD 中常见的情形是安装非 FreeBSD 内定的软件,但该软件被收录在 ports 中,FreeBSD 也会提出警告。因此,我们必须到 FreeBSD 的网站上查看是否有系统安全的消息,网址是 http://www.freebsd.org/security/index.html 。当发现问题时,可以依照发布的文件中所提供的修正方式来进行修补。

基本上只要计算机电源打开,系统就没有安全的一天,更何况要连上网络提供服务。系统安全的范围很广,从硬设备的保全、人员管理、网络规划、到系统本身的管 理,我们并不打算说明如何制定一个安全性政策 ,也无法在这里说明所有系统安全的相关议题,我们所提及的只是笔者在 FreeBSD 使用上的建议。如果想要更多 FreeBSD Security 的信息,可以参考 FreeBSD Handbook,我们在安装 FreeBSD 时己经将 doc 安装在 /usr/share/doc 中,你可以使用 lynx 来观看 FreeBSD 的文件。例如:# lynx /usr/share/doc/en_US.ISO8859-1/books/handbook/security.html

 小提示

lynx 并非 FreeBSD 内附的软件,您必须先到 /usr/ports/www/lynx 中进行安装后才可以使用喔。
 
 

系统安全并不局限在如何防止他人入侵,对于防止系统内部问题的产生一样重要。主要的概念就是要让我们的系统能正常的提供服务,并且对于我们不想让他人取得 的信息加以保护。然而,为了系统安全往往必须限制某些功能的使用,而牺牲了便利性。身为系统管理者往往因为对于系统限制太多而受到来自使用者的抱怨,在取 舍上本来就不是件容易的事。正因为如此,一个尽责的管理者在行事上必须具有高度的抗压性及对安全性的偏执。

由于系统安全十分重要,我们在开始说明各种软件安装、服务器架设之前,先说明系统安全应注意的事项,希望读者在读完本章之后,能对系统安全更有概念。

2 系统管理

2.1 执行程序的路径

有没有注意到当我们要执行所在目录中的某一个程序时,例如,在执行所在目录中的 myscript.sh,我们必须要打 ./myscript.sh。预设的 PATH 中,并没有将所在目录 “.” 加入路径中。如果把 “.” 加入 PATH 的设定中,可能会产生安全性的问题。例如,如果使用者在 /tmp 中加入一个名为 ls 的 shell script,内容为 rm -rf /usr,而我们又将 “.” 加入路径中,当以 root 在 /tmp 中执行 ls 指令时,后果可想而知。因此,我们在执行指令时,最好能指定路径名称,如 /bin/ls,并检查在 shell 设定中是否有将 “.” 加入路径中:

# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin为了避免 /bin 及 /sbin 等重要执行档遭到修改,我们可以为这些档案设定禁止修改的 schg flag:

# chflags schg /bin/*
# chflags scgh /sbin/*当然,设定了 schg 之后,我们要将 Kernel Security Level 调高到 1 以上,这样连 root 都不可以移除 flags。不过设了 schg 之后,我们可能不能执行一些指令,如 make world 等。

2.2 降低安装软件的风险

我们可以在网络上找到许多免费的软件,这些软件固然可以让我们在系统的使用上更加便利,但却难保它们不会对系统安全造成任何危害。有的软件可能存在某些漏 洞,即使在我们安装前尚无任何安全性的问题,日后还是有可能会被人发现软件的缺陷。因此,我们应该尽可能不要安装一些杂七杂八的软件,而安装之后,一发现 有安全性问题也要随时更新。 基本上,要下载软件时,最好到该软件的官方网站下载,以确保安全。

并非所有软件都是正确无误的,请不要直接在重要的服务器上安装一套新的软件,最好先在较不重要的计算机上测试,没问题后再安装。另外,在安装软件 时,应注意软件取得来源是否可靠。如果软件提供 MD5 或 PGP 的检查,最好下载后先检查,再解压缩。而安装软件时,最好取得软件的原始码来编译 (或使用 port 安装),我们可以浏览程序代码,以了解其架构。阅读 Makefile 的内容,了解软件将安装的确认位置,先确保程序不会在不该出现的地方产生。

2.3 kernel Security Level

FreeBSD 中有所谓的 Security Level,它掌控了系统核心的行为运作。只有超级使用者可以使用指令提高 Secruity Level,但不能降低它。如果要降低它必须在 rc.conf 中设定,并重开机。以下为各 Secruity Level 的意义:

•-1:永远不安全模式。这是默认值,如果设为 -1,它将永远以 level 0 的模式执行。
•0:不安全模式。使用者或 root 可以使用 chflags 来移除「不可更动 ( immutable)」及 「只能附加 (append-only)」的 flags。所有的装置只能依其权限来存取。
•1:安全模式。不可以移除「不可更动 ( immutable)」及 「只能附加 (append-only)」的 flags。不可以手动加载或移除 LKM,使用, /dev/mem, and /dev/kmem 只能为只读,且不能 newfs 已挂上的档案系统。
•2:高度安全模式。除了和安全模式同样的限制外,不管硬盘是否挂上,都不可以 newfs。另外,kernel time 的改变限制在一秒内,如果超过,会记录 “Time adjustment clamped to +1 second”。
•3:网络安全模式。除了和安全模式同样的限制外,还有 IP 封包过滤的规则 (参考 ipfw 及 ipfirewall),而且不可以调整 dummynet 的设定。
我们可以使用 sysctl 来显示或设定 Security Level:

# sysctl kern.securelevel如果要将 Security Level 设为 1:

# sysctl -w kernel.securelevel=1当我们将 Security Level 设为 1 以上时,我们会发现没有办法安装新的 kernel (因为不能移除 schg flag),也没有办法使用 big5con 、X Window 等软件。如果我们的 FreeBSD 只作为服务器,而不使用 big5con 或 X Window 的话,可以将 Security Level 的值调高一点。

如果要在开机时设定 Security Level,可以在 /etc/rc.conf 中以下面二行来设定:

kern_securelevel_enable=YES # 是否启动 Security Level

kern_securelevel=1 # level 从 -1 到 3

2.4 检视系统记录

在 /var/log 中,记录了许多系统的信息,我们应该要时常检视它们。这些档案如下表:

档案 用途
adduser 使用 adduser 的记录。
cron 定时排程的记录。
maillog 邮件记录。
messages 系统讯息记录。
security 安全性记录,如防火墙。

除了系统的记录外,如果有提供其它服务,会有更多的 log 数据。

如果我们有其它程序为留下 log 文件,最好在 /etc/newsyslog.conf 中设定定时备份压缩,以免档案过大。另外,这些备份的 log 档在 newsyslog.conf 中设定权限 (mode) 时,最好设为 600,以避免其它使用者可以读取。

FreeBSD 预设每天定时执行一些分析的工作,并将结果寄给 root,建议你最好每天阅读它们。我们可以在 /etc/mail/aliases 的开头中加入下面这一行:

root: me@my.domain.com

将 me@my.domain 改成你的 email,设定完后,请执行 newaliases 来让设定生效。如此一来,所有寄给 root 的信件,都会自动转给所设定的信箱。root 每天会收到 “daily run output” 及 “security check output” 这二封信,这是依照我们在 /etc/defaults/periodic.conf 中所设定的定时执行工作输出的结果。在 daily 执行的任务中,预设并没有设定定期清除 /tmp,原则上,在开机时系统会清理 /tmp。如果我们不常重开机,可以在 periodic.conf 中设定每天清理 /tmp。

2.5 数据的保全

UNIX 系统的安全防护中,第一道防线是计算机实体的安全防护,防止不相干的人接触计算机及周边设施。如果很不幸的,外人可接近系统时,第二道防线是系统密码保 护,我们将在下一章说明账号的防护。然而,如果密码泄露或被破解,还有第三道防线,就是在 UNIX 系统中的使用者权限及档案权限控制。如果某一个使用者账号遭到入侵,我们能限制其活动范围及资源的存取。而第四道防线就是将重要的数据加以编码保护,即使 数据被使用者窃取,至少还多一道防护措施。而最后一首防线就是数据备份了,我们平时应该有完善的备份计划,一旦系统发生错误或是被摧毁,至少还可以复原。

我们先来谈谈数据编码加密的方法,我们可以使用 crypt 这个指令来为我们的档案加密。例如,有一个档名为 myfile.txt 的档案,我们使用的金钥 (key)是 mykey 这个字符串,加密后的文件名为 myfile.cyp,可以使用下列指 令:

# crypt mykey myfile.cyp加密后,就可以将 myfile.txt 删除。如果日后要解密,只要执行下列指令:

# crypt mykey myfile.outcrypt 是一个历史悠久的编码软件,实际上并非十分安全,不过我们可以多加密几次,让档案加密后再加密,只要记得所使用的 key 就好了:

# crypt mykey1 myfile.cyp如果要解密,只要再反过来即可:

# crypt mykey3 myfile.out除了 crypt 外,我们也可以使用其它比较好的编码程序,例如 pgp。pgp 并非 FreeBSD 内附的软件,但我们可以使用 ports 来安装它:

# cd /usr/ports/security/pgp
# make install安装完 pgp 之后,我们必须先产生 key pair。请执行 pgpk -g:

首先请在自己的家目录中建立一个存放 pgp 金钥的目录。
$ mkdir ~/.pgp
$ pgp -kg
Pretty Good Privacy(tm) 2.6.3ia - Public-key encryption for the masses.
(c) 1990-96 Philip Zimmermann, Phil\'s Pretty Good Software. 1996-03-04
International version - not for use in the USA. Does not use RSAREF.
Current time: 2004/04/27 18:05 GMT

Pick your RSA key size:
1) 512 bits- Low commercial grade, fast but less secure
2) 768 bits- High commercial grade, medium speed, good security
3) 1024 bits- Military grade, slow, highest security
Choose 1, 2, or 3, or enter desired number of bits: 3 (输入金钥的长度)

Generating an RSA key with a 1024-bit modulus.

You need a user ID for your public key. The desired form for this
user ID is your name, followed by your E-mail address enclosed in
, if you have an E-mail address.
For example: John Q. Smith <12345.6789@compuserve.com>
Enter a user ID for your public key: (输入使用者名称)
John Chung

You need a pass phrase to protect your RSA secret key.
Your pass phrase can be any sentence or phrase and may have many
words, spaces, punctuation, or any other printable characters.

Enter pass phrase: (输入密码)
Enter same pass phrase again: (再输入一次密码,以确认无误)
Note that key generation is a lengthy process.

We need to generate 944 random bits. This is done by measuring the
time intervals between your keystrokes. Please enter some random text
on your keyboard until you hear the beep:
(随机在键盘上输入一些字,直到数字为零)
0 * -Enough, thank you.

推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
author-avatar
光头之祖_617
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有