Linux安全配置

Posted on   -=-  阅读(312)  评论(0编辑  收藏  举报

主要日志文件介绍

复制代码
内核及公共消息日志
/var/log/messages
记录Linux内核消息及各种应用程序的公共日志信息,包括启动、Io错误、网络错误、程序故障等

对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息

计划任务日志
/var/log/cron
记录crond计划任务产生的事件信息

系统引导日志
/var/log/dmesg
记录Linux系统在引导过程中的各种事件信息

邮件系统日志
 /var/log/maillog
记录进入或发出系统的电子邮件活动

用户登录日志
 /var /log/lastlog
记录每个用户最近的登录事件,二进制格式

 /var/log/secure
记录用户认证相关的安全事件信息

 /var/log/wtmp
记录每个用户登录、注销及系统启动和停机事件,二进制格式

/var/run/btmp
记录失败的、错误的登录尝试及验证事件,二进制格式
复制代码

通过脚本实现 ↑ 1 2

对 su 命令的访问受到限制。

分配给组有无权限,通过组的划分来限制su命令的使用1.

确保系统帐户未登录

复制代码
1. 使用w命令查看登录用户正在使用的进程信息

w命令用于显示已经登录系统的用户的名称,以及他们正在做的事。该命令所使用的信息来源于/var/run/utmp文件。w命令输出的信息包括:

用户名称
用户的机器名称或tty号
远程主机地址
用户登录系统的时间
空闲时间(作用不大)
附加到tty(终端)的进程所用的时间(JCPU时间)
当前进程所用时间(PCPU时间)
用户当前正在使用的命令
w命令还可以使用以下选项

-h忽略头文件信息
-u显示结果的加载时间
-s不显示JCPU, PCPU, 登录时间

[root@localhost /]# w
11:29:48 up 3:37, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 :0 07:55 3:37m 2.14s 2.14s /usr/bin/Xorg :0 -nr -verb
root pts/0 192.168.19.1 09:42 0.00s 0.38s 0.00s w
root pts/1 192.168.19.1 09:48 3:31 0.08s 0.08s -bash
[root@localhost /]# w -h
root tty1 :0 07:55 3:37m 2.14s 2.14s /usr/bin/Xorg :0 -nr -verb
root pts/0 192.168.19.1 09:42 0.00s 0.38s 0.00s w -h
root pts/1 192.168.19.1 09:48 3:35 0.08s 0.08s -bash
[root@localhost /]# w -u
11:29:56 up 3:38, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 :0 07:55 3:37m 2.14s 2.14s /usr/bin/Xorg :0 -nr -verb
root pts/0 192.168.19.1 09:42 0.00s 0.38s 0.00s w -u
root pts/1 192.168.19.1 09:48 3:39 0.08s 0.08s -bash
[root@localhost /]# w -s
11:29:59 up 3:38, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM IDLE WHAT
root tty1 :0 3:37m /usr/bin/Xorg :0 -nr -verbose -audit 4 -auth /
root pts/0 192.168.19.1 0.00s w -s
root pts/1 192.168.19.1 3:42 -bash
[root@localhost /]#

使用who命令查看(登录)用户名称及所启动的进程

who命令用于列举出当前已登录系统的用户名称。其输出为:用户名、tty号、时间日期、主机地址。

1
2
3
4
[root@localhost /]# who
root     tty1         2017-11-12 07:55 (:0)
root     pts/0        2017-11-12 09:42 (192.168.19.1)
root     pts/1        2017-11-12 09:48 (192.168.19.1)

补充:users命令,可用于打印输出登录服务器的用户名称。该命令除了有help和version选项外,再没有其他选项。如果某用户使用了多个终端,则相应的会显示多个重复的用户名。

1
2
[root@localhost /]# users
root root root

使用whoami命令查看你所使用的登录名称

whoami命令用于显示登入的用户名。

1
2
3
4
[root@localhost /]# whoami
root
[root@localhost /]# who am i
root     pts/0        2017-11-12 09:42 (192.168.19.1)

whoami命令能显示当前登入的用户名称,以及当前所使用的tty信息。该命令的输出结果包括如下内容:用户名、tty名、当前时间日期,同时还包括用户登录系统所使用的链接地址。

1
2
3
4
[root@localhost /]# who am i
root     pts/0        2017-11-12 09:42 (192.168.19.1)
[root@localhost /]# who mom likes
root     pts/0        2017-11-12 09:42 (192.168.19.1)

  

4. 随时查看系统的历史信息(曾经使用过系统的用户信息)

last命令可用于显示特定用户登录系统的历史记录。如果没有指定任何参数,则显示所有用户的历史信息。在默认情况下,这些信息(所显示的信息)将来源于/var/log/wtmp文件。该命令的输出结果包含以下几列信息:

  • 用户名称
  • tty设备号
  • 历史登录时间日期
  • 登出时间日期
  • 总工作时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost /]# last root
root     pts/1        192.168.19.1     Sun Nov 12 09:48   still logged in  
root     pts/0        192.168.19.1     Sun Nov 12 09:42   still logged in  
root     pts/0        192.168.19.1     Sun Nov 12 07:56 - 09:42  (01:45)   
root     tty1         :0               Sun Nov 12 07:55   still logged in  
root     pts/1        192.168.19.1     Thu Nov  9 11:02 - 11:28  (00:26)   
root     pts/0        192.168.19.1     Thu Nov  9 10:47 - 11:28  (00:40)   
root     tty1         :0               Thu Nov  9 10:45 - 11:28  (00:42)   
root     pts/1        192.168.19.1     Thu Nov  9 09:57 - down   (00:23)   
root     pts/0        192.168.19.1     Thu Nov  9 08:55 - down   (01:24)   
root     pts/1        192.168.19.1     Thu Nov  9 07:13 - 08:55  (01:41)   
root     pts/0        192.168.19.1     Thu Nov  9 03:56 - 08:28  (04:32)   
root     pts/1        192.168.19.1     Thu Nov  9 03:04 - 03:54  (00:49)   
root     pts/0        192.168.19.1     Thu Nov  9 03:01 - 03:54  (00:52)   
root     pts/1        192.168.19.1     Thu Nov  9 02:59 - 02:59  (00:00)   
root     pts/0        192.168.19.1     Thu Nov  9 02:56 - 02:59  (00:02)   
root     tty1         :0               Thu Nov  9 02:50 - down   (07:30)   
 
wtmp begins Thu Nov  9 02:47:58 2017
复制代码

收集会话启动信息

Linux启动时内核会检测硬件,这些启动信息会很快的在屏幕上闪过(有些发行版则不会显示)。所有内核检测信息,会被记录到内存中的一个保护区段,而用dmesg这个命令则会读取该内存区段的内容。dmesg命令的用法是:dmesg | more,之所以用管道加more命令,是因为dmesg显示的内容太长了,加上more命令可以让显示界面暂停。也可以用管道符加grep命令只选取需要的内容。

常用的日志文件解析

/var/log/boot.log

该文件记录了系统在引导过程中发生的事件就是Linux系统开机自检过程显示的信息。

shell超时设置

复制代码
为了增强linux系统的安全性,我们需要在用户输入空闲一段时间后自动断开,这个操作可以由设置TMOUT值来实现。将以下字段加入到/etc/profile 中即可(对所有用户生效)。

export TMOUT=900    # 设置900秒内用户无操作就字段断开终端

readonly TMOUT     # 将值设置为readonly 防止用户更改

注意:设置了readonly 之后在当前shell下是无法取消的,需要先将/etc/profile 中设置readonly行注释起来或直接删除,logout 后重新login 。

 $ export TMOUT=900

$ readonly TMOUT

$ unset TMOUT

-bash: unset: TMOUT: cannot unset: readonly variable

方式一:设置服务器端

1、echo $TMOUT

如果显示空白,表示没有设置,等于使用默认值0, 一般情况下应该是不超时. 如果大于0,可以在如/etc/profile或者~/.bash_profile之类文件中设置它为0.

Definition: TMOUT: If set to a value greater than zero, the value is interpreted as the number of seconds to wait for input after issuing the primary prompt. Bash terminates after waiting for that number of seconds if input does not arrive

readonly TMOUT     # 将值设置为readonly 防止用户更改。记得设置完后执行source /etc/profile //立即生效

2、修改/etc/ssh/sshd_config文件,将 ClientAliveInterval 0和ClientAliveCountMax 3的注释符号去掉,将ClientAliveInterval对应的0改成60,ClientAliveInterval指定了服务器端向客户端请求消息的时间间隔, 默认是0, 不发送.而ClientAliveInterval 60表示每分钟发送一次, 然后客户端响应, 这样就保持长连接了.ClientAliveCountMax, 使用默认值3即可.ClientAliveCountMax表示服务器发出请求后客户端没有响应的次数达到一定值, 就自动断开. 正常情况下,客户端不会不响应.最后记得执行/etc/init.d/sshd restart 哦,否则刚才的修改是不会生效的。

想参考更多,请输入man sshd_config了解更多信息

方式二:设置CRT参数(反空闲和屏幕日志记录功能)

1、反空闲

使用SecureCRT远程登录,经常会出现断掉的情况,一般采用top,或者ping某个ip的方式保证ssh连接处于激活状态,其实SecureCRT有一个选项可以设置每隔多少秒自动发送一个信息到服务器端,告诉服务器端客户端还在连接中。服务器的超时时间要大于CRT设置的反空闲时间,不然CRT还没反超时自动连接就被自动断开,那就没啥意义了。具体配置为:

选项------会话选项-----终端-----反空闲,可以设置发送字符串为\n、null或其他信息过去,每10秒发送一次,这样就可以达到每10秒发送一个回车,保证ssh连接处于激活状态。

2、屏幕日志记录功能

屏幕日志记录,可以记录自己执行过的所有命令和输出,便于以后追踪查找问题。

具体配置为:

选项-----全局选项-----默认会话-----编辑默认设置,弹出会话选项框,选择日志文件,可以配置日志文件名、选项、自定义日志数据,具体格式见日志文件名和自定义日志数据替换部分。
复制代码

配置了密码创建要求。

复制代码
对于linux可能大家都很少知道有密码策略这回事吧,好多人都认为linux安全机制已经很强大了,而且大多数linux采用可插拔密码认证来加强密码的安全策略,下面就来说说linux的密码策略,linux密码策略要比windows密码策略要强大许多

linux密码策略有以下设置:

密码的最大有效期

密码最长使用时间

密码最小长度

密码失效前提前多少天进行提醒

密码大小写以及数字、特殊字符等限制

新旧密码不能相同

新旧密码长度不能相同

账号锁定时间

账号自动解锁时间

密码策略配置文件路径:

在centos/redhat等系统中路径:/etc/pam.d/system-auth

ubuntu等系统中路径:/etc/pam.d/common-password

文件内容如下:(版本不同,内容有一些差别)

# /etc/pam.d/common-password - password-related modules common to all services

# This file is included from other service-specific PAM config files,

# and should contain a list of modules that define the services to be

# used to change user passwords.  The default is pam_unix.

# Explanation of pam_unix options:

# The "sha512" option enables salted SHA512 passwords.  Without this option,

# the default is Unix crypt.  Prior releases used the option "md5".

# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in

# login.defs.

# See the pam_unix manpage for other options.

# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.

# To take advantage of this, it is recommended that you configure any

# local modules either before or after the default block, and use

# pam-auth-update to manage selection of other modules.  See

# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)

password        [success=1 default=ignore]      pam_unix.so obscure sha512

# here's the fallback if no module succeeds

password        requisite                       pam_deny.so

# prime the stack with a positive return value if there isn't one already;

# this avoids us returning an error just because nothing sets a success code

# since the modules above will each just jump around

password        required                        pam_permit.so

# and here are more per-package modules (the "Additional" block)

# end of pam-auth-update config

密码过期时间以及有效期等配置文件:/etc/login.defs,文件部分内容:

PASS_MAX_DAYS:一个密码可使用的最大天数。

PASS_MIN_DAYS:两次密码修改之间最小的间隔天数。

PASS_MIN_LEN:密码最小长度。

PASS_WARN_AGE:密码过期前给出警告的天数

下面为大家举例说明linux用户密码策略:

设置密码最大使用时间(PASS_MAX_DAYS)

这个用来限制密码最大可以使用的天数。时间到了会强制进行密码锁定。如果忘记修改,那么就无法登录系统。需要使用管理员账户进行解锁后才能继续使用。这个可以在 /etc/login.defs 文件中的PASS_MAX_DAYS参数设置。在企业中一般把这个值设置为30天,也就是一个月修改一次密码。

root@test:/etc#  vim login.defs

PASS_MAX_DAYS  30         //单位为天数

设置密码最小天数(PASS_MIN_DAYS)

这个是限制多长时间无法进行密码修改。当值为15时,表示15天内无法修改密码,也就是两次密码修改中间最少隔15天,这个可以在 /etc/login.defs 文件中PASS_MIN_DAYS参数设置。企业中一般不对此项进行控制,这个根据自己需求进行修改,我这里设置10天。

root@test:/etc#  vim login.defs

PASS_MIN_DAYS    10            //单位为天数

设置密码过期前警告(PASS_WARN_AGE)

这个用来提醒用户该进行密码修改了,也就是在密码即将过期的时候,会给用户一个警告提示,在未到最大密码使用时间,会每天进行提醒,这可以提醒用户在密码过期前修改他们的密码,否则我们就需要联系管理员来解锁密码。这个可以在 /etc/login.defs 文件中PASS_WARN_AGE参数设置。 这个企业中一般设置为3天,我这里就设置为3天

root@test:/etc#  vim login.defs

PASS_WARN_AGE     3           //单位为天数

避免重复使用旧密码

这个用来防止更改密码时设置为旧密码,寻找同时包含“password”和"pam_unix.so"的行,然后再这行后面加上“remember=天数”。这将防止N个最近使用过的密码被用来设置为新密码,这个配置文件是在 /ect/pam.d/common-password 文件中(主要,centos/redhat需要修改:/etc/pam.d/system-auth文件),这个在企业中一般设置为5,我这里就设置5

ubuntu:

root@test/etc# vim pam.d/common-password

password        [success=1 default=ignore]      pam_unix.so obscure sha512   remember=5

centos/redhat:

root@test/etc# vim  pam.d/common-password

password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

设置密码复杂度

这个用来控制密码的复杂程度的,应安全性要求,企业里面要求大小写、特殊字符、数字等最受三个进行组合并且长度最少为8。寻找同时包含“password”和“pam_cracklib.so”的一行,并在后面加上“ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1”。这将迫使你在密码中至少包括一个大写字母、两个小写字母、一个数字和一个符号。

ubuntu:

root@test/etc# vim pam.d/common-password

password        requisite     pam_cracklib.so retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1

centos/redhat:

root@test/etc# vim pam.d/system-auth

password        requisite     pam_cracklib.so retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1
复制代码

 收集登录和注销事件

/var/log/wtmp
记录每个用户登录、注销及系统启动和停机事件,二进制格式

SSH 相关设置

复制代码
>SSH MaxAuthTries 设置
MaxAuthTries
1 这里表示只允许输错一回密码.

>SSH 协议设置

>SSH LoginGraceTime 设置
LoginGraceTime表示认证的时限,我们可以调整认证的时间限制
>SSH IgnoreRhosts

>配置 SSH 空闲超时间隔

复制代码

 禁止普通用户使用su命令

# vim  /etc/pam.d/su.. ..auth           required        pam_wheel.so use_uid  //去掉此行开头的#号

提高Linux服务器主机的SSH防爆破能力

++ 比如,禁止直接以root用户SSH登录

++ 可允许zhsan用户SSH登录,然后再通过su -切换为root(或者授予sudo权限)

# vim  /etc/ssh/sshd_configPermitRootLogin  no# systemctl  restart  sshd

了解用户通过sudo做过哪些操作

# visudo.. ..Defaults  logfile=/var/log/sudo //添加此行,要求记录sudo操作到指定文件
# less  /var/log/sudo //当用户使用sudo操作后,可以查看此文件新增的内容.. ..

提高LAMP网站的防护能力

复制代码
1>降低Web数据库的安全风险

    ++ 网络防护:防火墙(安全组规则)、流量限制

    ++ 服务防护:不提供网络监听/只面向本机、提供网络监听/面向内网个别Web主机或管理机

    ++ 用户授权:严格限制用户访问权限(不要轻易给root,不要轻易给all)、来源地址(不要轻易面向所有主机)

    ++ Web接入:严格控制Web接入的账号设置(包括账号设置文件的访问权限)

    比如:/var/www/html/bbs/config/config_global.php 记录了前台Web系统如何访问数据库

    比如:/var/www/html/bbs/config/config_ucenter.php 记录了后台Web系统如何访问数据库

    ++数据库代码的优化:…… 

2>Web服务的安全加固

    ++ Web服务配置优化(隐藏版本信息、伪装版本信息-修改源代码重编译、拒绝自动索引、拒绝使用连接文件、……)

    ++ PHP解析环境配置(关闭系统调用函数、关闭文件上传、图片支持、文件压缩、……)

    ++ 网络防火墙、系统防火墙、SELinux、SSH远程访问控制、su/sudo的使用和跟踪

    ++ Web程序代码的优化(SQL注入的输入验证)

    ++ WAF防火墙、……

    !!!! 默认情况下,各种云服务器的防护墙、SELinux都是关闭的

    !!!! 云服务商会提供安全防护产品(基础主机防护、云备份、WAF防火墙、DDoS高防、负载均衡、CDN、……)
复制代码
编辑推荐:
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
阅读排行:
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
点击右上角即可分享
微信分享提示

目录导航