Linux系统安全

1.Linux系统发展历程

Linux发展历史

Linux系统诞生于1991年,由芬兰大学生(linus Torvalds)和后来陆续加入的众多爱好者共同开发完成。
Linux是开源软件,是源代码开放的Linux分支。具备现代一切功能完整的UNIX系统所具备的全部特征。
Linux的发行遵守GNU的通用公共许可证。

关于内核版本

主版本号.次版本号.修订次数
例:5.10.28
官网:www.kernel.org
如果次版本号为偶数,则为稳定版。

2.文件系统

在这里插入图片描述

二级目录

/bin
放置的是在单人维护模式下还能被操作的指令。在/bin底下的指令可以被root与一般账号所使用。

/boot
这个目录主要在放置开机会用到的文件,包括Linux核心文件以及开机选单与开机所需配置文件等。

/dev
在Linux系统上,任何装置与接口设备都是以文件的形态存在这个目录当中的。

/etc
系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件,各种服务的启始档等。

/home
这是系统默认的用户家目录(home directory)。

/lib
放置的是在开机时会使用的函式库,以及在/bin或/sbin底下的指令会呼叫的函式库。

/media
底下放置的是可移除的装置,包括软盘、光盘、DVD等等装置都暂时挂载于此。

/opt
给第三方安装软件放置的目录。

/root
系统管理员(root)的家目录。

/sbin
放在/sbin底下的为开机过程中所需要的,里面除了开机、修复、还原系统所需要的命令。

/srv
可以视为[service]的缩写,是一些网络服务启动之后,这些服务所需要用的数据目录。

/tmp
这是让一般使用者或者是正在执行的程序暂时放置文件的地方。

三级目录

/usr/lib
包含各应用软件的函式库、目标文件(object file),以及不被一般使用者惯用的执行档或脚本(script)。

/usr/local
系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录,这样比较便于管理。

/var/lib
程序本身执行的过程中,需要使用到的数据文件放置的目录。

/var/log
登录文件放置的目录,里面有比较重要的文件如/var/log/messages,/var/log/wtmp(记录登入者的信息)等。

/etc/init.d
所有服务的预设启动script都是放在这里的。

/etc/passwd

在这里插入图片描述

账号

在这里插入图片描述

/ect/shadow
在这里插入图片描述
Shadow文件

Shadow文件中MD5 HASH等算法

实例的密码域:jack:$y$j9T$2fQbQ20e6wjV5be.dKD7.0$LviWdcdMNsYk0c0hxO/afQIlGQ5ldth4WlrmuVJKsb6:18785:0:99999:7:::

密码域由三部分组成:$id$salt$encrypted
其中id值指的是加密算法,salt指的是随机数,encrypted指的是加密密文。

id为1时,采用md5算法加密。
id为5时,采用SHA256算法加密。
id为6时,采用SHA512算法加密。
id为2、2y、y时,采用Blowfish算法加密。

salt为盐值,是某个固定长度的随机字符串,也就是每次修改passwd之后,都是随机生成该字符串,是对密码进行hash的一个干扰值。

encrypted为散列值。

密文的得来是通过cha *crypt(const char *key, const char *salt);来计算出来的。

3.基本操作

文件与目录管理

绝对路径和相对路径

绝对路径:路径的写法一定由根目录 / 写起。
绝对路径:路径的写法不是由 / 写起,相对路径意指相对于目前工作目录的路径。

目录的基本操作

cd:变换目录
pwd:显示当前目录
mkdir:创建一个新的目录
rmdir:删除一个空的目录
ls:文件与目录的检视

基本命令

用户、组与权限管理

用户 UID /etc/passwd /etc/shadow
组 GID /etc/group /etc/gshadow
从命令行中查看权限 ls -l
创建用户 useradd
创建组 groupadd
更改文件所有权 chown
更改组所有权 chgrp
设置权限 chmod
权限赋予 sudo

用户管理

添加用户:useradd
删除用户:userdel -r
锁定用户:passwd -l
用户属性:usermod
当前用户:id

当前登录用户

执行w命令可以确定当前哪些用户已登录系统

输出信息中个列的含义:

USER字段显示当前登录系统的用户名。

TTY字段显示分配给用户会话的终端。ttyX表示在控制台登录,pts/X和ttypX表示网络连接。

FROM字段显示远程登录主机的IP地址。

LOGIN@字段显示登录用户的本地起始时间。

IDLE字段显示最近一个进程运行开始算起的时间长度。

JCPU字段显示在该控制台或网络连接的全部进程所用的时间。

PCPU字段显示WHAT栏中当前进程所使用的处理器时间。

WHAT字段显示用户正在运行的进程。

在这里插入图片描述

端口开放情况

netstat -pan 查看当前开放的端口。
在这里插入图片描述
lsof -i 显示进程和端口对应关系。

在这里插入图片描述

进程信息

使用命令ps -aux查看进程。
在这里插入图片描述

服务信息

使用chkconfig --list查看服务启动信息。
各服务的启动脚本存放在/etc/init.d/和/etc/xinetd.d目录下。

4.常规安全配置

重要目录和文件权限

操作目的
合理配置重要目录和文件的权限,增强安全性。

检查方法
使用命令 “ls -l” 查看目录和文件的权限设置情况。

加固方法
对于重要目录,建议执行如下类似操作:

# chmod -R 750 /etc/rc.d/init.d/*

这样只有root可以读、写和执行这个目录下的脚本。

umask值

操作目的
设置默认的umask值,增强安全性。

检查方法
使用命令"umask"查看默认的umask值是否为027。

加固方法
使用命令 “vi /etc/profile” 修改配置文件,添加行"umask 027" , 即新的创建文件属主读写执行权限,同组用户读和执行权限,其他用户无权限,使用命令"umask 027" 应用设置。

Bash历史命令

操作目的
设置Bash保留历史命令的条数。

检查方法
使用命令 "cat /etc/profile|grep HISTSIZE=""cat /etc/profile|grep HISTFILESIZE=" 查看保留历史命令的条数。

加固方法
使用命令 "vi /etc/profile" 修改配置文件,修改HISTSIZE=5和HISTFILESIZE=5即保留最新执行的5条命令。

登录超时

操作目的
设置系统登录后,连接超时时间,增强安全性。

检查方法
使用命令 “cat /etc/profile |grep TMOUT” 查看TMOUT是否被设置。

加固方法
使用命令 “vi /etc/profile” 修改配置文件,添加 “TMOUT=” 行开头的注释,设置为 “TMOUT=180” ,即超时时间为3分钟。

root路径

操作目的
检查系统root用户环境变量path设置中是否包含"."。

检查方法
root用户环境变量path中不应包含当前目录"."
以root身份执行如下命令:

# echo $PATH #会有如下路径:
/usr/loacl/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:

加固方法
使用命令 "vi /etc/profile" ,修改echo $PATH后面的路径。

5.账户安全

禁用无用账号

操作目的
减少系统无用账号,降低风险。

检查方法
使用命令 "cat /etc/passwd" 查看口令文件,与系统管理员确认不必要的账号。

FTP等服务的账号,如果不需要登录系统,shell应该在/sbin/nologin目录下。

加固方法
使用命令 "passwd -l <用户名>" 锁定不必要的账号。

账号策略

操作目的
防止口令暴力破解,降低风险。

检查方法
使用命令 "cat /etc/pam.d/system-auth"查看配置文件。

加固方法
设置连续输错10次密码,账号锁定5分钟,使用命令 "vi /etc/pam.d/system-auth"修改配置文件,添加auth required pam_tally.so onerr=fail deny=10 unlock_time=300

检查特殊账号

操作目的
查看空口令和root权限的账号。

检查方法
使用命令 “awk -F:’($2==”")’ /etc/shadow" 查看空口令账号。
使用命令 “awk -F:’($3==0)’ /etc/passwd” 查看UID为零的账号。

加固方法
使用命令 “passwd <用户名>” 为空口令账号设定密码。
UID为零的账号应该只有root,设置UID方法:
usermod -u UID <用户名>

口令周期策略

操作目的
加强口令复杂度等,降低被猜解的可能性。

检查方法
使用命令 “cat /etc/login.defs|grep PASS” 和 “cat /etc/pam.d/system-auth” 查看密码策略设置。

加固方法
使用命令 “vi /etc/login.defs” 修改配置文件。
PASS_MAX_DAYS 90 #新建用户的密码最长使用天数
PASS_MIN_DAYS 0 #新建用户的密码最短使用天数
PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数
使用chage命令修改用户设置,例如:
chage -m 0 -M -E 2000-01-01 -W7 <用户名>
表示:将此用户的密码最长使用天数设为30,最短使用天数设为0,账号2000年1月1日过期,过期前7天里警告用户。

口令复杂度策略

操作目的
加强口令的复杂度等,降低被猜解的可能性。

检查方法
使用命令 “cat /etc/pam.d/system-auth |grep pam_cracklib.so” 查看密码复杂度策略设置。

加固方法
建议在/etc/pam.d/system-auth 文件中配置:
password require pam_cracklib.so difok=3 minlen=8 unredit=-1 lcredit=-1 dcredit=-1
至少8位,包含以为大写字母,一位小写字母和一位数字。

限制root远程登录

操作目的
限制root远程Telnet登录。

检查方法
使用命令 “cat /etc/securetty |grep CONSOLE” 查看是否禁止root远程登录。

加固方法
vi编辑/etc/securetty文件,配置:CONCOLE = /dev/tty01

限制用户su

操作目的
检查是否使用PAM认证模块禁止wheel组之外的用户su为root。

检查方法
使用命令 “cat /etc/pam.d/su |grep pam_wheel.so” 查看配置文件,确认是否有相关限制。

加固方法
编辑su文件(vi /etc/pam.d/su),在开头添加下面两行:

auth sufficient pam_rootok.so
auth required pam_wheel.so group=wheel

这表明只有wheel组的成员可以使用su命令成为root用户。
也可以将用户添加到wheel组,以使它可以使用su命令成为root用户,命令如下:

usermod -G wheel username

检查Grub/Lilo密码

操作目的
查看系统引导管理器是否设置密码。

检查方法
使用命令 “cat /etc/grub.conf |grep password” 查看grub是否设置密码。

使用命令 “cat /etc/lilo.conf |grep passwd” 查看lilo是否设置密码。

加固方法
vi 编辑/etc/grub.conf
splashimage这个参数下一行添加:password 密码。
如果需要md5加密,可以添加一行:password --md5 密码。

vi编辑/etc/lilo.conf
password=密码

SNMP团体字

操作目的
如果打开了SNMP协议,snmp团体字设置不能使用默认的团体字。

检查方法
查看配置文件 cat /etc/snmp/snmpd.conf

加固方法
vi编辑 /etc/snmp/snmpd.conf文件,应禁止使用public、private默认团体字,使用用户自定义的团体字,例如将以下设置中的public替换为用户自定义的团体字:

com2sec notConfigUser default public

弱口令审计

操作目的
检查系统弱口令

检查方法

john /etc/shadow --single
join /etc/shadow --wordlist=pass.dic

加固方法
使用"passwd 用户名" 命令为用户设置复杂密码。

6.服务进程

系统守护进程(服务)

服务就是运行在网络服务器上监听用户请求的进程。
服务是通过端口号来区分的。
在UNIX/Linux系统中,服务是一般通过inetd进程或启动脚本来启动。
通过inetd来启动的服务可以通过在/etc/inetd.conf文件进行注释来禁用。
通过启动脚本启动的服务可以通过改变脚本名称的方式禁用。

常见的服务及其对应的端口

ftp: 21
ssh: 22
telnet: 23
smtp: 25
ssl: 443
http(www): 80
pop3: 110

检查SSH服务

操作目的
对SSH服务进行安全检查。

检查方法
使用命令 “cat /etc/ssh/sshd_config” 查看配置文件。

加固方法
使用命令 “vi /etc/ssh/sshd_config” 编辑配置文件。
(1)不允许root直接登录
将"PermitRootLogin" 的值设为no
(2)修改SSH使用的协议版本
将"Protocol"的版本改为2
(3)修改允许密码错误次数(默认6次)
将"MaxAuthTries"的值设为3

TCP Wrapper

操作目的
使用TCP Wrapper对libwrap库支持的程序做访问限制。

检查方法
使用命令 “cat /etc/hosts.allow” 和 “cat /etc/hosts.deny” 查看配置。

加固方法
使用命令 “vi /etc/host.allow” 和"vi /etc/hosts.deny" 修改配置。
vi /etc/hosts.allow
编辑模式下,添加: sshd:IP地址
vi /etc/hosts.deny
编辑模式下,添加: sshd:ALL
(该配置仅允许特定IP地址访问SSH)

NFS共享

操作目的
查看NFS共享。

检查方法
使用命令"exportfs" 查看NFS输出的共享目录。

加固方法
使用命令 “vi /etc/exports” 编辑配置文件,删除不必要的共享。

Syslogd认证相关记录

操作目的
查看所有日志记录。

检查方法

cat /etc/rsylog.conf |grep authpriv

查看是否有authpriv.* /var/log/secure

加固方法
添加相关日志的记录:
将authpriv设备的任何级别的信息记录到/var/log/secure文件中。

Syslogd日志设置

操作目的
查看所有日志记录。

检查方法
使用命令 “cat /etc/rsyslog.conf” 查看rsyslogd的配置。
系统日志 (默认)在/var/log/messages
cron日志 (默认)在/var/log/cron
安全日志 (默认)在/var/log/secure

加固方法
添加相关日志的记录

限制Ctrl+Alt+Del命令

操作目的
防止误使用Ctrl+Alt+Del重启系统。

检查方法
使用命令"cat /etc/ininttab |grep ctrlaltdel" 查看输入行知否被注释。

加固方法
先vi编辑/etc/inittab配置文件,在行开头用#注释掉。

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

再使用命令 “init q” 应用设置

服务/进程安全

关闭不必要的服务:
1.使用命令 "who -r"查看当前init级别。
2.使用命令 "chkconfig --list <服务器名>"查看所有服务的状态。
3.使用命令 "chkconfig --level <init级别> <服务名> on|off|reset"设置服务在哪个init级别下开机是否启动。

7.网络配置安全

检查网络参数

操作目的
Linux中提供了sysctl命令,可调整网络参数。

检查方法
使用命令 “sysctl -a” 查看当前网络参数。

加固方法
使用命令"vi /etc/sysctl.conf" 修改配置文件,有选择的添加以下内容:

net.ipv4.icmp_echo_ignore_broadcasts = 1	#忽略ICMP广播
net.ipv4.icmp_echo_ignore_all = 1			#忽略ICMP echo请求
net.ipv4.ip_default_ttl = 128				#修改TTL为128

使用命令"sysctl -p" 使更改生效

自定义规则

iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。
命令输入顺序

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

参数选项
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-L:显示规则链中已有的条目;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-O<网络接口>:指定数据包要离开本机所使用的网络接口。

规则链名包括:
INPUT链:处理输入数据包。
OUTPUT链:处理输出数据包。
PORWARD链:处理转发数据包。

动作包括:
accept:接收数据包。
DROP:丢弃数据包。
REDIRECT:重定向、映射、透明代理。

限制进入连接

iptables -A INPUT -i eth0 -s 192.168.100.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -M state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -j DROP 

限制外发连接

 iptables -A OUTPUT -o eth0 -p tcp --syn -j DROP
 iptables -A OUTPUT -o eth0 -p udp -j DROP

iptables -list查看规则

8.日志审计安全

日志审计

配置rsyslog.conf,启用安全事件日志记录。
编辑/etc/rsyslog.conf
配置:*.err;kern.debug;daemon.notice /var/adm/messages
其中/var/adm/messages为日志文件。

la /var/log

在这里插入图片描述

系统日志分析

message日志:
messages日志位置为/var/log/messages。
messages中记录有运行信息和认证信息,对于追查恶意用户的登录行为有很大帮助。

cron日志:
cron日志位置为/var/log/cron。
记录crontab守护进程crond所派生的子进程的动作,前面加上用户、登录时间和PID,以及派生出的进程的动作。

secure日志:
ssh登录日志会存储于/var/log/secure中,若日志中出现大量的登录错误信息,则可能意味着远程主机在尝试破解ssh登录口令。

last日志:
last命令用于查看最近用户登录情况,last命令读取wtmp内容。
lastlog命令,用于查看系统内所有账户最后一次登录信息,该命令读取/var/log/lastlog内容。

9.安全工具

分析工具

在这里插入图片描述
grep命令的使用

查找一句话木马(<?php eval($_post[cmd]);?>)

假设网站的目录为/app/website/,我们需要查看目录下是否有一句话木马文件:

方法1:

grep -i -r eval\(\$_post /app/website/*

其中-i表示不区分大小写,-r表示递归操作。

方法2:

find /app/website/ -type f|xargs grep eval\(\$_post

xargs 将find搜索出的文件名称变成grep后面需要的参数。

弱口令审计工具

john

john /etc/shadow --single
john /etc/shadow --wordlist=pass.dic

Hydra

hydra -l login -P /tmp/passlist 192.168.100.10 ftp

login为要破解的用户名,passlist为密码字典库。

hydra -l login -P passfile 192.168.100.10 smb

login为要破解的登录名,passfile为密码字典库。

后门程序检测工具

chkrootkit
用于UNIX/Linux的本地rootkit检查工具。
检测命令:./chkrootkit -q -r /

Rootkit Hunter
检测命令:rkhunter -check

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

j0ker_k

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值