1.找出不必要的服务

很明显,服务器上跑的服务,并不是每个都有用的。强烈建议检查并关掉不需要的服务,从而减少风险(多跑一个服务,就可能多几个漏洞)。

查询运行在runlevel 3的服务列表:

[afei@afei ~]# /sbin/chkconfig --list |grep '3:on'
关闭指定的服务:
[afei@afei ~]# chkconfig ip6tables off

疑问:为什么查询runlevel 3的服务?
Linux系统有7个运行级别(runlevel),分别如下:
runlevel 0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动;
runlevel 1:单用户工作状态,root权限,用于系统维护,禁止远程登陆;
runlevel 2:多用户状态(没有NFS);
runlevel 3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式。这个运行级别的服务会启动httpd,系统提供web server服务,所以主要查看这个运行级别的服务;
runlevel 4:系统未使用,保留;
runlevel 5:X11控制台,登陆后进入图形GUI模式;
runlevel 6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动;

2.检查监听的网络端口

通过netstat命名能够看到所有已经打开的端口,并且可以看到是哪些程序打开的。如果发现某些是必须要的,建议关掉:

[afei@afei~]# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN 48983/java
tcp 0 0 0.0.0.0:2182 0.0.0.0:* LISTEN 49051/java
3.优化CRON任务

linux的cron可以执行一些定时任务。并且还可以通过/etc/cron.allow 和 /etc/cron.deny 控制哪些用户可以运行JOB,哪位用户禁止运行JOB。例如:

允许用户afei允许JOB,执行如下命令:
echo afei >> /etc/cron.allow
禁止所有用户访问JOB,执行如下命令:
echo ALL >>/etc/cron.deny
4.限制用户使用旧密码

linux用户的旧密码保存在文件/etc/security/opasswd中:

[root@LAPP-V1159 ~]# cat /etc/security/opasswd
afei:504:4:$1$MVAi/EpJ$iXXkV5r3Hjc8AaK2b5KyQ/,$1$AbpFPYaD$ZKj12lK6qaYUqgQnEdocd0,$1$POabjmzY$F4Cp6aTwN6RRk1KjZWm8A/,$1$LoHe5GHY$QjkLGqABANpLmlQsRB4WE.
检查是否有开启限制使用旧密码,在RHEL / CentOS / Fedora系统中,查看文件:/etc/pam.d/system-auth。在Ubuntu/Debian/Linux Mint系统中,查看文件:/etc/pam.d/common-password,需要下面两行关键内容,其中remember=4,表示不能使用最后4次密码,否则会报错:Password has been already used. Choose another.: auth sufficient pam_unix.so nullok try_first_pass
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=4
5.检查密码过期

密码的过期属性可以通过如下命令查看:

[root@root ~]# chage -l afei
Last password change : Sep 14, 2018
Password expires : Nov 13, 2018
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 60
Number of days of warning before password expires : 7
修改密码的过期属性可以执行如下命令: chage -M 60 -W 7 afei
说明:
-M 60表示密码最大有效期是60天。
-W 7 表示密码还有7天过期时给出告警提醒。
6.检查密码为空的用户

密码为空意味着只要知道用户名就能访问,这非常危险。因为用户与密码信息保存在文件/etc/shadow中,且格式如下:

admin:$6$YTSkre3DLd4SAZ$Jy9piv/gPezhLrLzMMeUleV8F5DNjP:17765:0:99:5:::
afei:$6$.vMcyE9ss96$YNk2Q5qiS/SAeGCcyEFsmspkC5dr3OXfnN:17788:0:60:7:::
后面的几个数字是密码过期等属性信息,上面已经提及。 所以,检查密码为空的用户,只需要执行如下命令即可,如果发现有这样的用户,通过root用户执行passwd username强行修改它的密码: cat /etc/shadow | awk -F: '($2==""){print $1}'
7.锁定&解锁用户

和删除用户账户不一样,这个只是限制用户登录。只需要执行如下密码即可锁定&解锁用户:

[root@root ~]# passwd -l afei
Locking password for user afei.
passwd: Success
[root@root ~]# passwd -u afei
Unlocking password for user afei.
passwd: Success

说明:

参数l表示lock,即锁定用户密码;

参数u表示unlock,即解锁用户密码;

8.关闭IPv6

现在IPv6基本上没有实际使用,所以我们可以关掉它,在文件/etc/sysconfig/network中增加如下两行内容即可:

NETWORKING_IPV6=no
IPV6INIT=no
9.复查日志

Linux服务器上很多的行为都会有记录相应的日志,简单列举一些如下,如果有一些非法操作,就能从这些日志中造成蛛丝马迹,例如非法登陆,非法定时任务等:

/var/log/message – Where whole system logs or current activity logs are available.

/var/log/auth.log – Authentication logs.

/var/log/kern.log – Kernel logs.

/var/log/cron.log – Crond logs (cron job).

/var/log/maillog – Mail server logs.

/var/log/boot.log – System boot log.

/var/log/mysqld.log – MySQL database server log file.

/var/log/secure – Authentication log.

/var/log/utmp or /var/log/wtmp : Login records file.

/var/log/yum.log: Yum log files.
10.保持系统更新

总是让系统更新最新发行的补丁包,因为这些补丁包会修复一些BUG:

sudo apt-get upgrade
yum check-update
yum upgrade

强化Linux安全的10个技能的更多相关文章

  1. 高级Linux运维工程师必备技能(扫盲篇)

    高级Linux运维工程师必备技能(扫盲篇) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在了解文件系统之前,我们要学习一下磁盘存储数据的方式,大家都知道文件从内存若要持久化存储的 ...

  2. Java程序员应该掌握的10项技能

    这篇文章主要介绍了作为Java程序员应该掌握的10项技能,包括java的知识点与相关的技能,对于java的学习有不错的参考借鉴价值,需要的朋友可以参考下   1.语法:必须比较熟悉,在写代码的时候ID ...

  3. 高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化

    高性能Linux服务器 第10章    基于Linux服务器的性能分析与优化 作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.但硬件问题.软件问题.网络环境等 ...

  4. Linux网络服务10——远程访问及控制

    Linux网络服务10--远程访问及控制 一.SSH概述 1.SSH简介 SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录.远程复制等功能.SSH协议对通信双方的数 ...

  5. Linux 内核3.10.5 专场

    今天本人十分靠谱地下载了linux 内核的3.10.5版本,这个版本是最新的稳定版. 听路飞大虾(哪个路飞?就是那个戴草帽的橡胶小伙,航海很多时候都很空闲的,于是最近他也开始研读linux 内核了.) ...

  6. 强化学习读书笔记 - 10 - on-policy控制的近似方法

    强化学习读书笔记 - 10 - on-policy控制的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton an ...

  7. 作为Java程序员应该掌握的10项技能

    本文详细罗列了作为Java程序员应该掌握的10项技能.分享给大家供大家参考.具体如下: 1.语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知 ...

  8. SuSe Linux Enterprise Server 10 With Sp2 安装过程图解

    SuSe Linux Enterprise Server 10 With Sp2 安装过程图解 650) this.width=650;" style="border-right- ...

  9. Linux与Windows 10用grub引导教程

    前言 去年暑假的时候,写了一篇如何装 Linux 和 Windows 10 双系统的文章发在了简书上,我写这篇文章的原因是当初装双系统确实是折腾了许久,网上也找不到一篇详尽的教程.由于去年对于写教程还 ...

随机推荐

  1. SLAM(一)----学习资料整理

    转自:http://www.cnblogs.com/wenhust/ 书籍: 1.必读经典 Thrun S, Burgard W, Fox D. <Probabilistic robotics& ...

  2. ibatis的缓存机制

    Cache        在特定硬件基础上(同时假设系统不存在设计上的缺漏和糟糕低效的SQL 语句)Cache往往是提升系统性能的最关键因素).        相对Hibernate 等封装较为严密的 ...

  3. MongoDB C# 驱动的各种版本下载地址

    https://github.com/mongodb/mongo-csharp-driver/releases

  4. AngularJS的增删改查、state嵌套案例,不涉及服务端

    本篇实践一个案例,大致是:左边有导航菜单,右边显示列表,并可对列表项编辑或删除,也可添加新的列表项.借此,可体会到:如何组织可扩展的AngualrJS文件结构,如何点击左侧菜单项右侧显示相应内容,an ...

  5. 在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建

    通常,在同一个页面上实现增删改查,会通过弹出框实现异步的添加和修改,这很好.但有些时候,是不希望在页面上弹出框的,我们可能会想到Knockoutjs,它能以MVVM模式实现同一个页面上的增删改查,再辅 ...

  6. 线程池框架executor

    Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程解耦开发,基于生产者-消费者模式,其提交任务的线程相当于生产者,执行任务 ...

  7. 一个最简单的通过WireShark破解SSL加密网络数据包的方法

    原文地址: http://article.yeeyan.org/view/530101/444688 一般来说,我们用WireShark来抓取包进行分析是没有多大问题的.但这里有个问题是,如果你碰到的 ...

  8. 对ORM的支持 之 8.4 集成JPA ——跟我学spring3

    8.4  集成JPA JPA全称为Java持久性API(Java Persistence API),JPA是Java EE 5标准之一,是一个ORM规范,由厂商来实现该规范,目前有Hibernate. ...

  9. 【ELK】【docker】6.Elasticsearch 集群启动多节点 + 解决ES节点集群状态为yellow

    本章其实是ELK第二章的插入章节. 本章ES集群的多节点是docker启动在同一个虚拟机上 ====================================================== ...

  10. C 格式化显示时间(time.h)

    转自:http://www.cnblogs.com/xudong-bupt/p/3550157.html C/C++程序中需要程序显示当前时间,可以使用标准函数strftime. 函数原型:size_ ...