文章目录
前言
本文主要从账户安全控制、系统引导和登录控制的角度,学习Linux系统安全优化的点点滴滴,还将学习基于Linux环境的弱口令检测、网络扫描等安全工具的构建和使用,帮助管理员查找安全隐患,及时采取有针对性的防护措施。
一、账户安全控制
账户安全基本措施
系统账户清理
将非登录用户的Shell设为/sbin/nologin
锁定长期不使用的账号
删除无用的账号
锁定账户文件passwd、shadow
passwd————passwd -l(锁定) -u(解锁)-S(查看用户状态)
usermod————usermod -L(锁定) -U(解锁) -S(修改登录权限)
userdel -r 用户名 #删除无用账户
将用户liu的Shell设为/sbin/nologin
如果服务器中的用户账户已经固定,不再进行更改,还可以采用锁定账户配置文件的方式,使用chattr命令,来锁定,解锁文件,使用lsattr命令查看文件锁定情况。
chattr +i + 目标文件 #锁定文件
chattr -i + 目标文件 #解锁文件
lsattr + 目标文件 #查看文件锁定状态
+i #锁定————了解passwd和shadow的作用
##passwd锁定后无法创建用户
##shadow锁定后无法修改密码
锁定/etc/passwd和/etc/shadow文件,
此时无法添加,删除账户,也无法更改密码、登录shell、宿主目录等属性信息。
解锁这两个文件
再尝试新建用户liux
解锁文件就可以重新创建用户。
密码安全控制
设置密码有效期
要求用户下次登录时修改密码
可以通过chage -M +指定天数+目标用户
也可以通过vi /etc/login.defs进去登录文本文件查询修改
PASS_MAX_DAYS [数字] 设置密码有效期
PASS_MIN_DAYS [数字] 表示自上次修改密码以来,最少隔多少天用户才能再次修改密码,默认值0
PASS_MIN_LEN [数字] 密码最小长度,对于root无效
PASS_WARN_AGE [数字] 指定在密码到期前多少天,系统就开始提醒用户密码即将到期,默认为7天
拓展
通过pam模块来防止暴力破解ssh
vim /etc/pam.d/ssh
在第一行下面添加一行:
auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=1200
效果:尝试登录失败次数超过三次,普通用户600秒解锁,root用户1200秒解锁
命令历史限制,终端自动注销
减少记录的命令条数
注销时自动清空命令历史
bash配置文件读取
/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行, 并从/etc/profile.d目录的配置文件中搜集shell的设置
/etc /bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取
~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,然后执行用户的.bashrc文件,交互式登录shell调用此文件
~/.bashrc: 该文件包含专用于你的bash,shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。这里可以设置别名。若删除此文件, 提示符会变成 -bash-3.2$,可以复制/etc/skel/.bashrc到自己的家目录下。交互式非登录shell调用此文件
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件,另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系
注意:~/.bash_profile 是交互式、login 方式进入 bash 运行的;~/.bashrc 是交互式non-login 方式进入 bash 运行的。
通常二者设置大致相同,所以通常前者会调用后者
关于环境变量的读取顺序
用户登录——>加载~/.bash_profile——>bash_profile中配置了首先是使~/.bashrc生效
.bash_profile 文件中的命令将在该用户每次登录时被执行
.bashrc 文件中的命令会在每次加载 /bin/bash(Shell解释器)
.bash_logout 在退出shell时被读取
/etc/profile 中配置影响全局
~/.bashrc 是生效于用户的
vi /etc/profile #进入配置用户环境信息的文档
HISTSIZE=1000 #history存放1000条命令
source /etc/profile #重新加载用户环境信息的文档
vi .bash_logout #用户登出系统配置文件
##删除历史指令方法如下
history c 临时清除
clear
vim .bash_history 查看历史命令记录
ehco " " > .bash_history #清空记录
终端自动注销
闲置600秒后自动注销
vi /etc/profile #适用于新用户登录
export TMOUT=600
exprot TMOUT=600 #适用于当前用户
注意,当正在执行的程序代码编译、修改系统配置等耗时较长的操作时,应避免设置TMOUT变量。
二、系统引导和登录控制
限制su命令用户
默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户(如root)的登录密码,这样带来了安全风险,为了加强su命令的使用控制,可以借助于pam_wheel 认证模块,只允许极个别用户使用su命令进行切换。
实验
将授权使用su命令的用户添加到wheel组,修改/etc/pam.d/su 认证配置以启用 pam_wheel认证。
在/etc/pam.d/su文件里设置禁止用户使用su命令
vi /etc/pam.d/su
2 # auth sufficient pam_rootok.os
6 # auth required pam_wheel.so use_uid
①以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
②两行都注释也是允许所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码,如果第一行不注释,则root使用su切换普通用户就不需要输入密码
③如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令
④如果注释第一行,开启第二行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令。
auth sufficient pam_wheel.so trust use_uid
这条使得wheel组成员su到root不用输密码
auth required pam_wheel.so use_uid
这条使得非wheel组成员无法切换到root
使用su命令切换用户命令会记录到安全日志/var/log/secure文件中,可以根据需要查看。
sudo命令-提升执行权限
sudo机制介绍:
通过su命令可以非常方便的切换为另一个用户,但是前提条件是必须知道目标用户的登录密码,例如,若要从liu用户切换到root用户,必须知道root用户的密码,对于生产环境中的Linux服务器,每多一个人知道特权密码,都会增加安全风险。
etc/sudoers文件的默认权限为440,需要专门的visudo工具进行编辑,虽然也可以使用vi进行编辑,但保存必须执行":w!"来强制操作,否则系统将提示为只读文件,而拒绝保存,配置文件/etc/sudoers中,授权记录的基本配置格式是
user MACHINE=COMMANDS
用户(user):直接授权指定的用户名,或采用"%组名"的形式(授权一个组的所有用户)
主机(MACHINE):使用此配置文件的主机名称,此部分主要是方便在多个主机间共用同一份sudoers文件,一般设为localhost或者实际的主机名即可。
命令(COMMANDS):允许授权的用户提供sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。
sudo [参数选项] 命令
-l 列出用户在主机上可用的和被禁止的命令,一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的
-v 验证用户的时间戳,如果用户运行sudo后,输入用户的密码后,短时间内可以不用输入口令来直接进行sudo操作,用-v可以跟踪最新的时间戳
-u 指定以某个用户执行特定操作
-k 删除时间戳,下一个sudo命令要求用户提供密码
先查看命令路径
此时用liux用户是不能使用ifconfig命令的
进入visudo修改
完成后测试liux用户是否可以使用ifconfig命令,发现可以了
启动sudo操作日志
visudo
Defaults logfile = “/var/log/sudq”
sudo日志记录以备管理员查看,应在/etc/sudoers文件中增加"Defaults logfile"设置,如果已经 启动sudo日志,则可以从/var/log/sudo文件中看到用户的sudo操作记录。
注:启用日志:Defaults logfile=/var/log/sudo
另外一个方法是/var/log/secure日志可以查看到sudo操作用户步骤
sudo输入命令第一个默认5分钟
终端登录安全控制
限制root用户只在安全终端登录
禁止普通用户登录,当服务器正在进行备份或者调试等维护工作时,可能不希望再有新用户登录系统,这时候只需要简单的建立一个/etc/nologin文件即可,login程序会检测/etc/nologin文件是否存在,如果存在,则拒绝普通用户登录系统
touch /etc/nologin #除了root以外的用户不能登录
此方法实际上是利用了shutdown延迟关机的限制机制,只建议在服务器维护期间临时使用,当手动删除/etc/nologin文件或者重新启动主机后,即可恢复正常。
指定终端id进行登录
虚拟机内 远程不可用
虚拟控制台的选择可以通过按下Ctrl+Alt建和功能键Fn(n=1~6)来实现(tty1-tty6)tty1图像界面 tty2-6字符界面
注:tty4
root就不能登录
网络端口扫描nmap
nmap是一种攻击方式,nmap可以扫描主机名、ip地址、网络地址等。
比较常见的几种扫描方式
-sS,TCP SYN扫描(半开扫描):只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接,否则认为目标端口并为开放。
-sT,TCP连接扫描:这是完整的TCP扫描方式,用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。
-sF,TCP FIN扫描:开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而忽略了其他形式的TCP攻击包,这种类型的扫描可间接检测防火墙的健壮性。
-sU,UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。
-sP,ICMP扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。
-P0,跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping同而放弃扫描。
实验
nmap -sT 127.0.0.1 #扫描常用的TCP端口
nmap -sU 127.0.0.1 #扫描常用的UDP端口
netstat命令
查看当前操作系统的网络连接状态、路由表、接口统计等信息,它是了解网络状态及排除网络服务故障的有效工具
-n 以数字的形成显示相关的主机地址,端口等信息。
-r 显示路由表信息
-a 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)
-l 显示处于监听(Listening)状态的网络连接及端口信息。
-t 查看TCP相关的信息
-u 查看UDP相关的信息
-p 显示与网络连接相关的进程号,进程 名称信息(该选项需要root权限)
Proto 显示连接使用的协议
RefCnt 表示连接到本套接口上的进程数量
Types 显示套接口的类型
State 显示套接口当前的状态
Path 表示连接到套接口的其他进程使用的路径名