Linux(10)系统安全管理办法

系统安全管理办法

前言

系统安全是指在系统生命周期内应用系统安全工程和系统安全管理方法,辨识系统中的隐患,并采取有效的控制措施使其危险性最小,从而使系统在规定的性能、时间和成本范围内达到最佳的安全程度。系统安全是人们为解决复杂系统的安全性问题而开发、研究出来的安全理论、方法体系,是系统工程与安全工程结合的完美体现。系统安全的基本原则就是在一个新系统的构思阶段就必须考虑其安全性的问题,制定并执行安全工作规划(系统安全活动),属于事前分析和预先的防护,与传统的事后分析并积累事故经验的思路截然不同。系统安全活动贯穿于生命整个系统生命周期,直到系统报废为止。

无论是在windows系统还是Linux系统中,安全性都是一个非常重要的话题,那么我们如何来对Linux系统中进行简单的安全性管理呢?主要分为以下四个方面:

一、账号安全控制

二、PAM认证

三、终端登录安全控制

四、端口扫描

一、账号安全控制

你可以使用安全策略配置用户帐户控制在组织中的工作方式。 可以使用本地安全策略管理单元对它们进行本地配置,或通过组策略为域、OU 或特定组对它们进行配置。

基本措施有:

1.系统账号清理

2.密码安全控制

3.历史命令限制

4.终端自动注销

1.系统账号清理

①将非登录用户的shell设为/sbin/nologin
usermod -s /sbin/nologin
②锁定长期不使用的账号

查找出被禁用的账号

grep “/sbin/nologin$” /etc/passwd

锁定账号

usermod -L 用户名  锁定账号
passwd -S 用户名  查看账号状态
passwd -l 用户名  锁定用户账户

解锁账号

usermod -U 用户名  解锁账号
passwd -u  解锁账号
passwd和usermod锁定账号的区别

​ passwd锁定的是账号,而usermod锁定的是账号密码,两者锁定方式都是在用户密码前加!,区别是passwd加两个!,而usermod只加一个!。

检验

创建test账户,分别用passwd和usermod锁定他查看/etc/shadow文件密码情况。

[root@localhost bin]# useradd test
[root@localhost bin]# echo "123" > passwd --stdin test
[root@localhost bin]# tail -n 1 /etc/shadow
test:$6$QaKsirHa$70dRTjW1RlDCCKag4FyP7/Vq6.2R/v1ZzquHwpKFTUSZq6wMA0xs3/tC8uMNIGWVvr3Y/OSUKhTJrYF.tDNeS.:19143:0:99999:7:::  

目前看到test用户密码前面没有!

[root@localhost bin]# passwd -l test
锁定用户 test 的密码 。
passwd: 操作成功
[root@localhost bin]# tail -n 1 /etc/shadow
test:!!$6$QaKsirHa$70dRTjW1RlDCCKag4FyP7/Vq6.2R/v1ZzquHwpKFTUSZq6wMA0xs3/tC8uMNIGWVvr3Y/OSUKhTJrYF.tDNeS.:19143:0:99999:7:::

用passwd锁定后,密码前出现两个!

rootolocalhost usermod -L test
rootolocalhost~tail -n 1 /etc/shadow
test:$6$zYTVSgHP$fW1 TpbZdDA6NDKtoIwva4jnpLdMij6Hxwk1 YJ.4WjU.RCBx/oMGy4FCVCNaMHLsp8c55z//.42xVdxboKxXmK1 19143:0:99999:7:

用usermod锁定后,密码前只出现一个!

③删除无用的账号

​ userdel -r 用户名

④锁定账号文件passwd、shadow

如果服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方 法。使用 chattr 命令,分别结合“+i”“-i”选项来锁定、解锁文件,使用 lsattr 命令可以查看文 件锁定情况

​ chattr命令——当服务器中用户账号固定,则锁定账号配置文件

chattr +i /etc/passwd /etc/shadow  锁定文件
lsattr /etc/passwd /etc/shadow  查看锁定的状态
chattr -i /etc/passwd /etc/shadow  解锁文件

锁定文件后可以查看文件权限。

[root@localhost etc]# lsattr /etc/shadow
----i----------- /etc/shadow     #权限i表示文件只读

2.密码安全控制

①配置文件/etc/login.defs

适合于新用户

[root@localhost ~]# vi /etc/login.defs
PASS_MAX_DAYS   99999   #设置密码有效期,默认99999
PASS_MIN_DAYS   0       #表示自上次修改密码,最少隔多少天后用户才能再次修改密码,默认值是0
PASS_MIN_LEN    5       #密码最小长度,对于root无效(目前已被PAM取代,该选项不生效)
PASS_WARN_AGE   7       #指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为7天
②chage 命令用于设置密码时限

修改账号和密码的有效期限:chage [选项] 用户

-m 密码可更改最小天数

-M 密码保持有限的最大天数

-w 用户密码到期前,提前收到警告信息的天数

-E 账号到期的日期

-d 上一次更改的日期

-i 停滞时期,密码过期后还能使用的时期

-l 列出当前的设置

3.命令历史限制

我们在一个服务器上进行操作的所有记录都是可以通过history来看到的。如下图:

所以,如果命令历史记录中有敏感内容就比较容易泄露,所以我们可以通过一些方法来限制命令历史记录的显示。

①修改配置文件

命令历史记录配置文件路径:/etc/profile——系统为每个用户设置环境变量信息的文件(全局),此文件的修改会影响到所有用户。

可修改此文件中命令历史显示的条数:

[root@localhost etc]# vim /etc/profile
 …………
 45 HOSTNAME=`/usr/bin/hostname 2>/dev/null`
 46 HISTSIZE=1000
…………

在第46行中显示,默认的命令历史记录显示1000条,我们可以修改这项数据。

修改完之后需要重新加载环境变量:

[root@localhost etc]# source /etc/profile

修改完后如图:

或,修改~/.bash_history文件——当前用户命令历史记录文件(当前用户)。

[root@localhost ~]# echo "" > ~/.bash_hostory

覆盖掉~/.bash_hostory里的命令历史记录。

②history命令

history -c  #临时清除命令历史记录,但是重启之后又有了

③其他办法

如果需要每个用户登出时都清除输入的命令历史记录,可以在/etc/skel/.bash_logout文件中添加下面这行rm -f $HOME/.bash_history 。这样,当用户每次注销时,.bash_history文件都会被删除.

4.终端自动注销

闲置若干秒后自动注销

修改/etc/profile——依然是在环境变量(全局)文件中修改,适用于新登录用户。

[root@localhost ~]# vim /etc/profile

显示如图:

在末行插入以下内容

export TMOUT=600  #设置当前用户闲置600秒后自动登出

需要注意的是,当正在执行程序代码编译、修改系统配置等耗时较长的操作时,应避免设置 TMOUT 变量。必要时可以执行“unset TMOUT”命令取消 TMOUT 变量设置。

bash配置文件读取简单描述

关于环境变量的读取顺序:

用户登录 ->> 加载~/.bash_profile --> bash_profile中配置了首先是使~/.bashrc生效

~/.bash_profile”文件中的命令将在该用户每次登录时被执行

~/.bashrc”文件中的命令会在每次都加载“/bin/bash(Shell解释器)

~/.bash_logout 在正常退出shell时被读取,其中有需要加载的内容

简述:

/etc/profile: 系统为每个用户设置环境变量信息的文件(全局),此文件的修改会影响到所有用户。因为是系统配置文件,只能让root修改。

/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。主要保存一些个性化设置,如命令别名、路径等。

总结:

~/.bash*开头的bash文件属于当前用户的配置,只对当前登录的用户生效。

/etc/bash*的bash文件是全局文件只有root用户才有修改权限,而且修改后影响所有用户。

bash就是平时写命令的窗口,是个命令解释器。

二、PAM认证

Linux-PAM,是linux可插拔认证模块,就像软件性质的U盘,鼠标,键盘。是一套可定制、 可动态加载的共享库,使本地系统管理员可以随意选择程序的认证方式。

PAM的作用就是管理系统“默认”程序/服务的权限程序。

1.限制su命令用户

默认情况下,任何用户都允许使用 su 命令,从而有机会反复尝试其他用户(如 root) 的登录密码,这样带来了安全风险。为了加强 su 命令的使用控制,可以借助于 pam_wheel 认证模块,只允许极个别用户使用 su 命令进行切换。实现过程如下:将授权使用 su 命令 的用户添加到 wheel (特权)组,修改/etc/pam.d/su 认证配置以启用 pam_wheel 认证。

第一步——设置su权限

新系统中默认所有用户都有su的权限,所以要先禁止其他用户使用su。在/etc/pam.d/su——路径文件中设置禁止使用su命令。

[root@localhost ~]# vim /etc/pam.d/su

显示如下图:

其中第二行和第六行是主要控制su权限的:

a)2,#6——上图是默认状态(即开启第一行,用#注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。

b)#2,#6——两行都用#注释掉则所有用户都能使用su命令,但root使用su切换到其他普通用户需要输入密码(pam_rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码)

c)2,6——如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令

d)#2,6——如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。

第4条关闭表示:使得wheel成员su到root不用输密码,

第6条打开表示:使得非wheel成员无法切换到root

从左向右:

第一列代表PAM认证模块类型

auth: 对用户身份进行识别,如提示输入密码,判断是否为root。

account: 对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。

password: 使用用户信息来更新数据,如修改用户密码。

session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。

第二列代表PAM控制标记

required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。

requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。

sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。

optional: 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型)

include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。

第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。

同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。

第四列代表PAM模块的参数,这个需要根据所使用的模块来添加。传递给模块的参数。参数可以有多个,之间用空格分隔开

第二步——添加wheel组成员
[root@localhost ~]# gpasswd -a 用户名 wheel  #添加授权用户

启用 pam_wheel 认证以后,未加入到 wheel 组内的其他用户将无法使用 su 命令,尝试进行切换时将提示“拒绝权限”,从而将切换用户的权限控制在最小范围内。

2.sudo机制提权

通过su命令可以非常方便地切换为另一个用户,但前提条件是必须知道目标用户的登录密码。

例如,若要从zhangsan 用户切换为 root 用户,必须知道 root 用户的密码。对于生产环境中的Linux 服务器,每多一个人知道特权密码,其安全风险也就增加一分。 有没有一种折中的办法,既可以让普通用户拥有一部分管理权限,又不需要将 root 用户的密码告诉他呢?答案是肯定的,使用 sudo命令就可以提升执行权限。不过,需要由管理员预先进行授权,指定允许哪些用户以超级用户(或其他普通用户)的身份来执行哪些命令。

etc/sudoers文件的默认权限为440,需使用专门的 visudo 工具进行编辑。虽然也可以用 vi 进行编辑,但保存时必须执行“:w!”命令来强制操作,否则 系统将提示为只读文件而拒绝保存。 配置文件/etc/sudoers 中,授权记录的基本配置格式如下所示。

[root@localhost ~]#visudo
插入模式编辑
user MACHINE=COMMANDS  #用户 登录的主机=(可变换的身份)可执行的命令
或 %group MACHINE=COMMANDS #用户组
例1:lisi localhost=/usr/bin/ifdown #允许李四用户临时可以关闭网卡
例2:lisi ALL(表示所有主机都行)=NOPASSWD: /user/sbin/useradd;PASSWD: /user/sbin/usermod
表示李四用户用useradd命令不需要密码,usermod需要。

sudo命令选项

-l :列出用户在主机上可用的和被禁止的命令;一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的

-v:验证用户的时间戳;如果用户运行sudo 后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo 操作。用-v 可以跟踪最新的时间戳,默认是5分钟。

-u:指定以某个用户执行特定操作,例:

可以看到,tt用户用sudo提权到root用户可以创建1.txt,并且文件的属主和属组都是root,但是不用sudo就不能在/mnt目录下创建文件。

-k:删除时间戳,下一个sudo 命令要求用求提供密码

sudo的过程:

3.通过pam 模块来防止暴力破解ssh

[root@benet ~]# vim /etc/pam.d/sshd

在第一行下面添加一行:

auth    required    pam_tally2.so    deny=3    unlock_time=600 even_deny_root root_unlock_time=1200

说明:尝试登陆失败超过3次,普通用户600秒解锁,root用户1200秒解锁

deny 指定最大几次认证错误,如果超出此错误,将执行后面的策略。如锁定N秒,如果后面没有其他策略指定时,默认永远锁定,除非手动解锁

lock_time 锁定多长时间,按秒为单位

unlock_time 指定认证被锁后,多长时间自动解锁用户

even_deny_root root用户在认证出错时,一样被锁定

root_unlock_time root用户在登录失败时,锁定多长时间。该选项一般是配合even_deny_root 一起使用的。

三、终端登录安全控制

限制root只在安全终端登录

禁止普通用户登录 当服务器正在进行备份或调试等维护工作时,可能不希望再有新的用户登录系统。这时候,只需要简单地建立/etc/nologin 文件即可。login 程序会检查/etc/nologin 文件是否存在, 如果存在,则拒绝普通用户登录系统(root 用户不受限制)。

方法一:

touch /etc/nologin  #除root以外的用户不能登录了。

此方法实际上是利用了 shutdown 延迟关机的限制机制,只建议在服务器维护期间临时使用。当手动删除/etc/nologin 文件或者重新启动主机以后,即可恢复正常。

方法二:

vim /etc/securetty  #指定终端id进行登陆

用#注释掉tty几,root 就不能登录该主机。

测试:切换主机

虚拟控制台的选择可以通过按下Ctrl+Alt(+Fn键)键和功能键F1~F6)来实现(tty1-tty6) tty1 图形界面 tty2-6 字符界面。

四、端口扫描

1.nmap命令:网络端口扫描

网络端口扫描是渗透测试和网络安全的基础。当有外部进行IP攻击的时候,有几种方式:ARP攻击,中间人攻击,DDOS攻击,暴力破解。而nmap是偏于端口服务,我们知道每个端口号都对应着一个服务功能,比如http端口号:80,主要职能是把自己服务的资源供给外部去查看,典型:百度。外部查看百度的时候向百度服务器的80端口发送请求。那nmap对于这个端口范围进行检测,可以把IP地址对应的端口号全部都检测出来,就可以对这些暴露的端口号相对做出措施。

yum install -y nmap  #安装/更新nmap工具

其中,扫描目标可以是主机名、IP 地址或网络地址等,多个目标以空格分隔

常用选项:

-p:分别用来指定扫描的端口

-n:禁用反向 DNS 解析(以加快扫描速度)。扫描类型决定着检测的方式,也直接影响扫描的结果。有的时候开启dns解析通过该域名,回的是反向解析,把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 通而放弃扫描。

-p 端口号 IP-IP,检测 IP 地址位之内的主机是否开启某端口的服务。

2. netstat命令: 查看当前操作系统的网络连接状态、路由表、接口统计等信息

netstat是了解网络状态及排除网络服务故障的有效工具 。

netstat -选项

选项: -n:以数字的形式显示相关的主机地址、端口等信息

-r:显示路由表信息

-a:显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)

-l:显示处于监听(Listening)状态的网络连接及端口信息。

-t:查看 TCP(Transmission Control Protocol,传输控制协议)相关的信息。

-u:显示 UDP(User Datagram Protocol,用户数据报协议)协议相关的信息。

-p:显示与网络连接相关联的进程号、进程名称信息,该选项需要 root 权限

用法:①通常使用“-natp”组合选项,以数字形式显示当前系统中所有的 TCP 连接信息,同时显示对应的进程信息。

②配合管道符grep过滤出特定的记录。

上图各列代表:

① 协议(TCP/UDP) tcp6

② 队列 queue 接收队列 0

③ 队列 queue 发送队列 0

④ IP:Port :::80(IPV6) 192.168.226.131:80(接收端) 192.168.226.132:Port(发送端)

⑤ LISTEN 状态 包含了连接状态、断开状态、等待状态

⑥ PID/进程任务 3459/httpd

trol Protocol,传输控制协议)相关的信息。

-u:显示 UDP(User Datagram Protocol,用户数据报协议)协议相关的信息。

-p:显示与网络连接相关联的进程号、进程名称信息,该选项需要 root 权限

用法:①通常使用“-natp”组合选项,以数字形式显示当前系统中所有的 TCP 连接信息,同时显示对应的进程信息。

②配合管道符grep过滤出特定的记录。

[外链图片转存中…(img-bAEx6aM4-1654097858282)]

上图各列代表:

① 协议(TCP/UDP) tcp6

② 队列 queue 接收队列 0

③ 队列 queue 发送队列 0

④ IP:Port :::80(IPV6) 192.168.226.131:80(接收端) 192.168.226.132:Port(发送端)

⑤ LISTEN 状态 包含了连接状态、断开状态、等待状态

⑥ PID/进程任务 3459/httpd

END

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值