25 个 Linux 服务器安全小贴士 已翻译 100%

oschina 投递于 2013/06/26 15:53 (共 17 段, 翻译完成于 06-26)
阅读 12087
收藏 530
36
加载中

大家都认为 Linux 默认是安全的,我大体是认可的 (这是个有争议的话题)。Linux默认确实有内置的安全模型。你需要打开它并且对其进行定制,这样才能得到更安全的系统。Linux更难管理,不过相应也更灵活,有更多的配置选项。

对于系统管理员,让产品的系统更安全,免于骇客和黑客的攻击,一直是一项挑战。这是我们关于“如何让Linux系统更安全” 或者 “加固Linux系统“之类话题的第一篇文章。本文将介绍 25个有用的技巧和窍门 ,帮助你让Linux系统更加安全。希望下面的这些技巧和窍门可以帮助你加强你的系统的安全。

zicode
zicode
翻译于 2013/06/26 16:48
4

1. 物理系统的安全性

配置BIOS,禁用从CD/DVD、外部设备、软驱启动。下一步,启用BIOS密码,同时启用GRUB的密码保护,这样可以限制对系统的物理访问。

  1. 通过设置GRUB密码来保护Linux服务器

2. 磁盘分区

使用不同的分区很重要,对于可能得灾难,这可以保证更高的数据安全性。通过划分不同的分区,数据可以进行分组并隔离开来。当意外发生时,只有出问题的分区的数据才会被破坏,其他分区的数据可以保留下来。你最好有以下的分区,并且第三方程序最好安装在单独的文件系统/opt下。

/
/boot
/usr
/var
/home
/tmp
/opt
zicode
zicode
翻译于 2013/06/26 16:59
4

3. 最小包安装,最少漏洞

你真的需要安装所有的服务么?建议不要安装无用的包,避免由这些包带来的漏洞。这将最小化风险,因为一个服务的漏洞可能会危害到其他的服务。找到并去除或者停止不用的服务,把系统漏洞减少到最小。使用‘chkconfig‘命令列出运行级别3的运行所有服务。

# /sbin/chkconfig --list |grep '3:on'

当你发现一个不需要的服务在运行时,使用下面的命令停止这个服务。

# chkconfig serviceName off

使用RPM包管理器,例如YUM或者apt-get 工具来列出所有安装的包,并且利用下的命令来卸载他们。

# yum -y remove package-name
# sudo apt-get remove package-name
  1. 5 chkconfig Command Examples
  2. 20 Practical Examples of RPM Commands
  3. 20 Linux YUM Commands for Linux Package Management
  4. 25 APT-GET and APT-CACHE Commands to Manage Package Management

桔子
桔子
翻译于 2013/06/26 17:57
1

4. 检查网络监听端口

在网络命令 ‘netstat‘ 的帮助下,你将能够看到所有开启的端口,以及相关的程序。使用我上面提到的 ‘chkconfig‘ 命令关闭系统中不想要的网络服务。

# netstat -tulpn
  1. Linux 网络管理中的 20 条 Netstat 命令

5. 使用 SSH(Secure Shell)

Telnetrlogin 协议只能用于纯文本,不能使用加密的格式,这或将导致安全漏洞的产生。SSH 是一种在客户端与服务器端通讯时使用加密技术的安全协议。

除非必要,永远都不要直接登录 root 账户。使用 “sudo” 执行命令。sudo 由 /etc/sudoers 文件制定,同时也可以使用 “visudo” 工具编辑,它将通过 VI 编辑器打开配置文件。

同时,建议将默认的 SSH 22 端口号改为其他更高的端口号。打开主要的 SSH 配置文件并做如下修改,以限制用户访问。

# vi /etc/ssh/sshd_config
关闭 root 用户登录
PermitRootLogin no
特定用户通过
AllowUsers username
使用第二版 SSH 协议
Protocol 2
  1. SSH 服务器安全维护五条最佳实践

K6F
K6F
翻译于 2013/06/26 18:00
1

6. 保证系统是最新的

得一直保证系统包含了最新版本的补丁、安全修复和可用内核。

# yum updates
# yum check-update

7. 锁定 Cron任务

Cron有它自己内建的特性,这特性允许定义哪些人能哪些人不能跑任务。这是通过两个文件/etc/cron.allow 和 /etc/cron.deny 控制的。要锁定在用Cron的用户时可以简单的将其名字写到corn.deny里,而要允许用户跑cron时将其名字加到cron.allow即可。如果你要禁止所有用户使用corn,那么可以将“ALL”作为一行加到cron.deny里。

# echo ALL >>/etc/cron.deny
  1. 11 个linux Cron调度实例


echoyou
echoyou
翻译于 2013/06/26 17:22
1

8.  禁止USB探测

很多情况下我们想去限制用户使用USB,来保障系统安全和数据的泄露。建立一个文件‘/etc/modprobe.d/no-usb‘并且利用下面的命令来禁止探测USB存储。

install usb-storage /bin/true

9.打开SELinux

SELinux(安全增强linux)是linux内核提供的一个强制的访问控制安全机制。禁用SELinux意味着系统丢掉了安全机制。要去除SELinux之前仔细考虑下,如果你的系统需要发布到网络,并且要在公网访问,你就要更加注意一下。

SELinux 提供了三个基本的操作模式,他们是:

  1. 强制执行:这是默认是模式,用来启用和强制执行SELinux安全措略。
  2. 许可模式:这种模式下SELinux不会强制执行安全措略,只有警告和日志记录。这种模式在SELinux相关问题的故障排除时候非常有用。
  3. 关闭模式:SELinux被关闭。

你可以使用命令行‘system-config-selinux‘, ‘getenforce‘ or ‘sestatus‘来浏览当前的SEliux的状态。

# sestatus

如果是关闭模式,通过下面的命令开启SELinux

# setenforce enforcing

 你也可以通过配置文件‘/etc/selinux/config‘来进行SELinux的开关操作。

桔子
桔子
翻译于 2013/06/26 18:29
1

10. 移除KDE或GNOME桌面

没必要在专用的LAMP服务器上运行X Window桌面比如KDE和GNOME。可以移掉或关闭它们,以提高系统安全性和性能。打开/etc/inittab然后将run level改成3就可以关闭这些桌面。如果你将它彻底的从系统中移走,可以用下面这个命令:

# yum groupremove "X Window System"

11. 关闭IPv6

如果不用IPv6协议,那就应该关闭掉它,因为大部分的应用和策略都不会用到IPv6,而且当前它不是服务器必需的。可以在网络配置文件中加入如下几行来关掉它。

# vi /etc/sysconfig/network
NETWORKING_IPV6=no
IPV6INIT=no

echoyou
echoyou
翻译于 2013/06/26 17:39
2

12. 限制用户使用旧密码

如果你不希望用户继续使用老密码,这一条很有用。老的密码文件位于 /etc/security/opasswd。你可以使用 PAM 模块实现。

RHEL / CentOS / Fedora 中打开 ‘/etc/pam.d/system-auth‘ 文件。

# vi /etc/pam.d/system-auth

Ubuntu/Debian/Linux Mint 中打开 ‘/etc/pam.d/common-password‘ 文件。

# vi /etc/pam.d/common-password

在 ‘auth‘ 块中添加下面一行。

auth        sufficient    pam_unix.so likeauth nullok

在 ‘password‘ 块添加下面一行,禁止用户重新使用其过去最后用过的 5个密码。

password   sufficient    pam_unix.so nullok use_authtok md5 shadow remember=5

服务器只记录最后的 5 个密码。如果你试图使用曾用的最后 5个老密码中的任意一个,你将看到如下的错误提示。

Password has been already used. Choose another.
K6F
K6F
翻译于 2013/06/26 18:07
3

13. 如何检查用户密码过期?

在 Linux 中,用户的密码以加密的形式保存在 ‘/etc/shadow‘ 文件中。要检查用户的密码是否过期,你需要使用 ‘chage‘ 命令。它将显示密码的最后修改日期及密码期限的细节信息。这些细节就是系统决定用户是否必须修改其密码的依据。

要查看任一存在用户的老化信息,如 过期日时长,使用如下命令。

#chage -l username

要修改任一用户的密码老化,使用如下命令。

#chage -M 60 username
#chage -M 60 -m 7 -W 7 userName
参数
  1. -M 设置天数最大数字
  2. -m 设定天数最小数字
  3. -W 设定想要的天数
K6F
K6F
翻译于 2013/06/26 18:14
3

14. 手动锁定或解锁用户账号

锁定和解锁功能是非常有用的,你可以锁定一个账号一周或一个月,而不是将这个账号从系统中剔除。可以用下面这个命令锁定一个特定用户。

# passwd -l accountName

提示:这个被锁定的用户仅对root用户仍然可见。这个锁定是通过将加密过的密码替换成(!)来实现的。如果有个想用这个账号来进入系统,他会得到类似下面这个错误的提示。

# su - accountName
This account is currently not available.

解锁一个被锁定的账号时,用下面这个命令。这命令会将被替换成(!)的密码改回来。

# passwd -u accountName

echoyou
echoyou
翻译于 2013/06/26 17:29
2
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(33)

前台满300减30
前台满300减30
顶!!收着了
michealzh
michealzh
支持
袁碣
Mark
王子
王子
为什么禁用USB呢?
王子
王子
需要根据情况而定吧
KenSun
KenSun
这儿貌似总是分不清网管和运维的区别。。。
LongRaindy
LongRaindy
我觉得这篇是彻底的烂文
pqiankui
pqiankui
从tecmint上翻译过来的,很不错。楼主E文水平高,技术不错。
月影又无痕
月影又无痕
楼主只知道转载, 却不知道理解,有些观点实在是很恶心的

1. 给BIOS加密码,远程机房启动死翘翘吧
2. selinux应该禁止, 太多的问题就是因selinux引起。
3. 分那么多分区,实在很蛋疼知道吧, 分三个区即可, 根, 数据, 交换
junsun
junsun
mark
返回顶部
顶部