- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章为大家详细介绍25个Linux 服务器安全小技巧由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
大家都认为Linux 默认是安全的,我大体是认可的(这是个有争议的话题)。Linux默认确实有内置的安全模型。你需要打开它并且对其进行定制,这样才能得到更安全的系统。Linux更难管理,不过相应也更灵活,有更多的配置选项.
对于系统管理员而言,让产品的系统更安全,免于骇客和黑客的攻击,一直是一项挑战。本文将介绍25个有用的技巧和窍门 ,帮助你让Linux系统更加安全。希望下面的这些技巧和窍门可以帮助你加强你的系统的安全.
1. 物理系统的安全性 。
配置BIOS,禁用从CD/DVD、外部设备、软驱启动。下一步,启用BIOS密码,同时启用GRUB的密码保护,这样可以限制对系统的物理访问.
2. 磁盘分区 。
使用不同的分区很重要,对于可能得灾难,这可以保证更高的数据安全性。通过划分不同的分区,数据可以进行分组并隔离开来。当意外发生时,只有出问题 的分区的数据才会被破坏,其他分区的数据可以保留下来。你最好有以下的分区,并且第三方程序最好安装在单独的文件系统/opt下.
/ 。
/boot 。
/usr 。
/var 。
/home 。
/tmp 。
/opt 。
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 。
4. 检查网络监听端口 。
在网络命令‘netstat’的帮助下,你将能够看到所有开启的端口,以及相关的程序。使用我上面提到的‘chkconfig’命令关闭系统中不想要的网络服务.
# netstat -tulpn 。
5. 使用 SSH(Secure Shell) 。
Telnet 和 rlogin 协议只能用于纯文本,不能使用加密的格式,这或将导致安全漏洞的产生。SSH 是一种在客户端与服务器端通讯时使用加密技术的安全协议.
除非必要,永远都不要直接登录 root 账户。使用 “sudo” 执行命令。sudo 由 /etc/sudoers 文件制定,同时也可以使用 “visudo”工具编辑,它将通过 VI 编辑器打开配置文件.
同时,建议将默认的 SSH 22 端口号改为其他更高的端口号。打开主要的 SSH 配置文件并做如下修改,以限制用户访问.
# vi /etc/ssh/sshd_config 。
关闭 root 用户登录 。
PermitRootLogin no 。
特定用户通过 。
AllowUsers username 。
使用第二版 SSH 协议 。
Protocol 2 。
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 。
8. 禁止USB探测 。
很多情况下我们想去限制用户使用USB,来保障系统安全和数据的泄露。建立一个文件‘/etc/modprobe.d/no-usb’并且利用下面的命令来禁止探测USB存储.
install usb-storage /bin/true 。
9.打开SELinux 。
SELinux(安全增强linux)是linux内核提供的一个强制的访问控制安全机制。禁用SELinux意味着系统丢掉了安全机制。要去除SELinux之前仔细考虑下,如果你的系统需要发布到网络,并且要在公网访问,你就要更加注意一下.
SELinux 提供了三个基本的操作模式,他们是:
强制执行:这是默认是模式,用来启用和强制执行SELinux安全措略.
许可模式:这种模式下SELinux不会强制执行安全措略,只有警告和日志记录。这种模式在SELinux相关问题的故障排除时候非常有用.
关闭模式:SELinux被关闭.
你可以使用命令行‘system-config-selinux’, ‘getenforce’ 或 ‘sestatus’来浏览当前的SEliux的状态.
# sestatus 。
如果是关闭模式,通过下面的命令开启SELinux 。
# setenforce enforcing 。
你也可以通过配置文件‘/etc/selinux/config’来进行SELinux的开关操作.
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 。
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. 。
13. 如何检查用户密码过期?
在 Linux 中,用户的密码以加密的形式保存在‘/etc/shadow’文件中。要检查用户的密码是否过期,你需要使用‘chage’命令。它将显示密码的最后修改日期及密码期限的细节信息。这些细节就是系统决定用户是否必须修改其密码的依据.
要查看任一存在用户的老化信息,如 过期日 和 时长,使用如下命令.
#chage -l username 。
要修改任一用户的密码老化,使用如下命令.
#chage -M 60 username 。
#chage -M 60 -m 7 -W 7 userName 。
参数 。
-M 设置天数最大数字 。
-m 设定天数最小数字 。
-W 设定想要的天数 。
14. 手动锁定或解锁用户账号 。
锁定和解锁功能是非常有用的,你可以锁定一个账号一周或一个月,而不是将这个账号从系统中剔除。可以用下面这个命令锁定一个特定用户.
# passwd -l accountName 。
提示:这个被锁定的用户仅对root用户仍然可见。这个锁定是通过将加密过的密码替换成(!)来实现的。如果有个想用这个账号来进入系统,他会得到类似下面这个错误的提示.
# su - accountName 。
This account is currently not available. 。
解锁一个被锁定的账号时,用下面这个命令。这命令会将被替换成(!)的密码改回来.
# passwd -u accountName 。
15. 增强密码 。
有相当数量的用户使用很弱智的密码,他们的密码都可以通过字典攻击或者暴力攻击攻破。‘pam_cracklib’模块存于在PAM 中,它可以强制用户设置复杂的密码。通过编辑器打开下面的文件.
# vi /etc/pam.d/system-auth 。
在文件中增加一行,使用认证参数(lcredit, ucredit, dcredit 或者 ocredit 对应小写字母、大写字母,数字和其他字符) 。
/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1 。
16. 启用Iptable(防火墙) 。
高度推荐启用linux防火墙来禁止非法程序访问。使用iptable的规则来过滤入站、出站和转发的包。我们可以针对来源和目的地址进行特定udp/tcp端口的准许和拒绝访问.
17. 禁止Ctrl+Alt+Delete重启 。
在大多数的linux发行版中,按下‘CTRL-ALT-DELETE’将会让你的系统重启。只说生产服务器上这是不是一个很好的做法,这可能导致误操作.
这个配置是在‘/etc/inittab’文件,如果你打开这个文件,你可以看到下面类似的段落。默认的行已经被注释掉了。我们必须注释掉他。这个特定按键会让系统重启.
# Trap CTRL-ALT-DELETE 。
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now 。
18. 检查空密码帐号 。
任何空密码的账户意味这可以让Web上任何无授权的用户访问,这是linux服务器的一个安全威胁。所以,确定所有的用户拥有一个复杂的密码并且 。
不存在特权用户。空密码帐号是安全风险,可以被轻易的攻克。可以利用下面的命令来检查是否有空密码账户存在.
# cat /etc/shadow | awk -F: '($2==""){print $1}' 。
19. 登录前显示SSH提示 。
在ssh认证时候,使用一个法律和安全警示是很好的建议.
20. 监视用户行为 。
如果你有很多的用户,去收集每一个用户的行为和和他们的进程消耗的信息非常重要。可以随后和一些性能优化和安全问题处理时进行用户分析.
但是如果监视和搜集用户行为信息呢 ?
有两个很有用的工具‘psacct’和‘acct’可以用来监视系统中用户的行为和进程。这些工具在系统后台执行并且不断记录系统中每一个用户的行为和各个服务比如 Apache、MySQL、SSH、FTP等的资源消耗.
21. 定期查看日志 。
将日志移动到专用的日志服务器里,这可避免入侵者轻易的改动本地日志。下面是常见linux的默认日志文件及其用处:
/var/log/message – 记录系统日志或当前活动日志.
/var/log/auth.log – 身份认证日志.
/var/log/kern.log – 内核日志.
/var/log/cron.log – Crond 日志 (cron 任务). 。
/var/log/maillog – 邮件服务器日志.
/var/log/boot.log – 系统启动日志.
/var/log/mysqld.log – MySQL数据库服务器日志.
/var/log/secure – 认证日志.
/var/log/utmp or /var/log/wtmp :登录日志.
/var/log/yum.log: Yum 日志.
22. 重要文件备份 。
在生产环境里,为了灾难恢复,有必要将重要文件备份并保存在安全的远程磁带保险库、远程站点或异地硬盘.
23. NIC 绑定 。
有两种类型的NIC绑定模式,需要在绑定接口用得到.
mode=0 – 循环赛模式 。
mode=1 – 激活和备份模式 。
NIC绑定可以帮助我们避免单点失败。在NIC绑定中,我们把两个或者更多的网卡绑定到一起,提供一个虚拟的接口,这个接口设置ip地址,并且和其他服务器会话。这样在一个NIC卡down掉或者由于其他原因不能使用的时候,我们的网络将能保持可用.
24. 保持 /boot 只读 。
linux内核和他的相关的文件都保存在/boot目下,默认情况下是可以读写的。把它设为了只读可以减少一些由于非法修改重要boot文件而导致的风险.
# vi /etc/fstab 。
在文件最后增加下面的行,并且保存 。
LABEL=/boot /boot ext2 defaults,ro 1 2 。
如果你今后需要升级内核的话,你需要修回到读写模式.
25.不鸟ICMP和Broadcast请求 。
在/etc/sysctl.conf中添加下面几行,屏蔽掉ping和broadcast请求.
Ignore ICMP request
net.ipv4.icmp_echo_ignore_all = 1 。
Ignore Broadcast request
net.ipv4.icmp_echo_ignore_broadcasts = 1 。
运行下面这一行加载修改或更新:
#sysctl -p 。
最后此篇关于为大家详细介绍25个Linux 服务器安全小技巧的文章就讲到这里了,如果你想了解更多关于为大家详细介绍25个Linux 服务器安全小技巧的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
谁能解释一下 Server.MapPath(".")、Server.MapPath("~")、Server.MapPath(@"之间的区别\") 和 Server.MapPath("/")? 最佳答案
我不知道,为什么我们要使用 Server.UrlEncode() & Server.UrlDecode()?!在 QueryString 中我们看到 URL 中的任何内容,那么为什么我们要对它们进行编
我已经通过 WHM 在我的一个域上安装了 ssl 证书。网站正在使用 https://xyz.com . 但是它不适用于 https://www.xyz.com .我已经检查了证书,它也适用于 www
我已经使用 WMI 检测操作系统上是否存在防病毒软件,itz 正常工作并通过使用命名空间向我显示防病毒信息,例如 win xp 和 window7 上的名称和实例 ID:\root\SecurityC
我们有 hive 0.10 版本,我们想知道是否应该使用 Hive Server 1 或 Hive Server2。另一个问题是连接到在端口 10000 上运行的 Hive 服务器,使用 3rd 方工
我想在 C++ 中使用 Windows Server API 设置一个 HTTPS 服务器,我使用了示例代码,它在 HTTP 上工作正常,但我就是不能让它在 HTTPS 上工作。 (我不想要客户端 S
我写了一个非常基本的类来发送电子邮件。我用 smtp 服务器对其进行了测试,它工作正常,但是当我尝试使用我公司的交换服务器时,它给出了这个异常: SMTP 服务器需要安全连接或客户端未通过身份验证。服
我的应用程序包含一个“网关”DataSnap REST 服务器,它是所有客户端的第一个访问点。根据客户端在请求中传递的用户名(基本身份验证),请求需要重定向到另一个 DataSnap 服务器。我的问题
我有一个 Tomcat 服务器和一个 Glassfish4 服务器。我的 Servlet 在 Tomcat 服务器上启动得很好,但在 Glassfish4 服务器上给我一个“HTTP Status 4
我在 vmware 上创建了一个 ubuntu 服务器。我用它作为文件服务器。如果我通过托管虚拟机的计算机进行连接,则可以访问它。我无法从同一网络上的其他计算机执行此操作。提前致谢! 最佳答案 首先确
如何重启 Rails 服务器?我从 开始 rails server -d 所以服务器是分离的 我知道的唯一方法就是去做ps 辅助 | grep rails 并 kill -9关于过程#但是像这样杀死进
我实际上正在尝试找到编写一个简单的 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的服务器。我只关心XMPP的核心功能(状态、消息传递、群组消息传递)。目前还在学习 XMPP 协议(proto
我实际上正在尝试找到编写简单 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的方法。我只关心 XMPP 的核心功能(统计、消息、组消息)。目前也在学习 XMPP 协议(protocol),所以
我们正在尝试从 Java JAX-RS 适配器访问 SOAP 1.1 Web 服务。 我们正在使用从 WSDL 生成的 SOAP 客户端。 但是当解码 SOAP 故障时,我们得到以下异常: ... C
目前,我和许多其他人正在多个平台(Windows、OS X 和可能的 Linux)上使用 Python HTTP 服务器。我们正在使用 Python HTTP 服务器来测试 JavaScript 游戏
我有一个连续运行的服务器程序(C#/.NET 2.0 on Linux with mono),我想从 PHP 脚本连接到它以在网站上显示状态信息。 目的是创建一个(某种)实时浏览器游戏(无 Flash
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
我们刚刚将测试 Web 服务器从 Server 2008 升级到 Server 2012 R2。我们有一个部署我们网站的批处理脚本。当它将站点推送到服务器时,它现在失败了。奇怪的是,我可以使用相同的发
建议一些加载SpagoBI服务器的方法,我尝试了所有方法来解析spagobi服务器。在 Catalina 中,错误是 - * SEVERE: Unable to process Jar entry [
当我们点击应用程序服务器(apache tomcat)时,它会创建一个线程来处理我们的请求并与 tomcat 连接,建立连接,tomcat 创建另一个线程来处理请求并将其传递给连接,连接线程将其传递给
我是一名优秀的程序员,十分优秀!