Linux 系统安全及应用(账号安全和引导登录控制)

1 账号安全基本措施

1.1 系统账号清理

1.1.1 将非登录用户的Shell设为/sbin/nologin

       在我们使用Linux系统时,除了用户创建的账号之外,还会产生系统或程序安装过程中产生的许多其他账号,除了超级用户root外,其他账号都是用来维护系统运作的,一般不允许登录,常见的非登录用户有bin、adm、mail、lp、nobody、ftp等。

 使用usermod命令修改登录shell:

  usermod -s /sbin/nologin 用户名

1.1.2 锁定长期不使用的账号

方法一:
 passwd -l 用户名      //锁定用户
 passwd -u 用户名      //解锁用户
 ​
 方法二:
 usermod -L 用户名     //锁定用户
 usermod -U 用户名     //解锁用户

1.1.3 删除无用的账号

userdel 用户名       //删除用户,但不删除用户的家目录  

userdel -r 用户名     //删除用户的同时,删除他的家目录

1.1.4 锁定账号文件passwd、shadow

chattr [-RV] [+/-/=<属性>] 文件或目录          //改变文件属性  ​

 lsattr 文件或目录                                         //查看文件底层属性

-R:递归处理,将指定目录下的所有文件及子目录一并处理。

-V:显示指令执行过程。

属性作用
a(append)只允许对文件进行追加操作(适用于日志文件)
A不允许更新文件的访问时间
i (immutable)在文件上启用这个属性时,我们不能更改、重命名或删除这个文件
j (journaling)设置了这个属性时,文件的数据首先保存在日志中,然后再写入文件

使用”chattr +i“为文件增加i属性,之后不能更改、重命名或删除这个文件。

[root@localhost ~]# chattr +i /etc/passwd /etc/shadow   //为两个文件增加i属性
 [root@localhost ~]# lsattr /etc/passwd /etc/shadow      //查看文件底层属性
 ----i----------- /etc/passwd
 ----i----------- /etc/shadow
 [root@localhost ~]# useradd mike     //尝试创建用户,创建失败       
 useradd:无法打开 /etc/passwd
 ​
 [root@localhost ~]# chattr -i /etc/passwd /etc/shadow    //去掉两个文件的i属性
 [root@localhost ~]# lsattr /etc/passwd /etc/shadow
 ---------------- /etc/passwd
 ---------------- /etc/shadow

1.2 密码安全控制——设置密码规则

一般通过设置密码规则来控制密码安全,主要设置以下两点:

  • 设置密码有效期
  • 要求用户下次登录时修改密码

1.2.1 对于新建用户——修改/etc/login.defs文件

 注意:第三个参数 密码最小长度规则对root无效

1.2.2 对于现有用户——chage命令

 chage [选项] 用户名

选项规则
-m密码可更改的最小天数。为0时代表任何时候都可以更改密码。
-M密码保持有效的最大天数。
-W用户密码到期前,提前收到警告信息的天数。
-E帐号到期的日期。过了这天,此帐号将不可用。
-d设置”最后一次修改密码的日期“。设置为 0 有特殊意思,表示用户应该在下次登录系统时更改密码。
-i停滞时期。允许密码过期后多少天内仍能使用,如果一个密码已过期这些天,那么此帐号将不可用。
-l例出当前的设置。

 

1.3 命令历史限制

 一般使用两种方式控制命令历史:

  • 减少记录的命令条数。
  • 注销时自动清空命令历史,或登录时自动清空命令历史。

 [root@localhost ~]# export HISTSIZE=200     临时修改历史命令为200条

 [root@localhost ~]# echo $HISTSIZE=200  临时修改历史命令为200条

[root@localhost ~]# history -c                         临时清理历史命令

永久修改历史命令条数

 [root@localhost ~]# vim /etc/profile //设置历史命令条数记录为200条  

     ( HISTSIZE=200)

 [root@localhost ~]# source /etc/profile //刷新配置文件,使文件立即生

[root@localhost ~]# vim ~/.bash_logout    //注销时自动清空历史命令

( echo " " > ~/.bash_history)

 [root@localhost ~]# vim ~/.bashrc     //登录时自动清空历史命令

( echo " " > ~/.bash_history)

1.4 终端自动注销

[root@localhost ~]# vim /etc/profile           //设置闲置600秒后自动注销 

(export  TMOUT=600)

用户切换和提权

2.1 用户切换——su命令

su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令

切换用户的方式:

su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换。

su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换。

即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)。

2.1.2 限制使用su命令的用户

限制使用su命令的用户(通过修改/etc/pam.d/su 文件):

  • 将允许使用su命令的用户加入wheel组。
  • 启用pam_wheel认证模块。则只有wheel组内的用户可以使用su命令切换用户。

查看 /etc/pam.d/su 文件:

注意第二行和第六行:

以上两行现在是默认状态(即开启第二行,注释第六行),这种状态下是允许所有用户间使用su命令进行切换的。
两行都注释是允许所有用户都能使用su命令,但root使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码)。
如果开启第六行,表示只有root用户和wheel组内的用户才可以使用su命令。
如果注释第二行,开启第六行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令
 

 只需要把特定的组和用户加入wheel就可以获得su权限

2.2 用户提权——sudo命令

需要启用 Default logfile 配置

默认日志文件:/var/log/sudo.log

注意:sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,权限必须为0440

#用户    登入主机 = (代表用户)     命令
 #user     host=(username)       command
   root       ALL=(ALL)          ALL
  %wheel      ALL=(ALL)         NOPASSWD:ALL
  
 #root表示允许哪个用户。%wheel表示wheel组。
 #第一个ALL表示通过哪些主机登入。
 #第二个ALL表示以哪个用户身份。
 #最后一个ALL表示允许运行哪些命令。
 #NOPASSWD表示使用sudo命令不需要验证密码。

 sudo基本语法:

sudo [-u username] [command]

2.2.2 sudo别名

sudo别名有四种类型:

  • User_Alias(用户)
  • Runas_Alias(代表用户)
  • Host_Alias(登录主机)
  • Cmnd_Alias(命令)

创建用户别名MYUSERS=lucy,mike。允许这两个用户使用/sbin/下的所有命令,除了reboot、poweroff、init、rm这四个命令。 (! 表示取反。! /sbin/reboot 表示不允许使用reboot命令。)

 [root@localhost ~]# visudo  ----------------------------------

 User_Alias MYUSERS = lucy,mike  

Host_Alias MYHOSTS = localhost

 Cmnd_Alias MYCMNDS = /sbin/*,!/sbin/reboot,!/sbin/poweroff,!/sbin/init,!/usr/bin/rm  ​

 MYUSERS  MYHOSTS=(root) NOPASSWD:MYCMNDS

2.2.4 查看sudo操作记录

  • 需要启用 Default logfile 配置

  • 默认日志文件:/var/log/sudo

[root@localhost log]# visudo //修改配置文件 -----------------------------

Default logfile="/var/log/sudo" //在最后一行添加 Default logfile 配置

2.3 PAM安全认证

  • 包名: pam
  • 模块文件目录:/lib64/security/*.so
  • 特定模块相关的设置文件:/etc/security/
  • 应用程序调用PAM模块的配置文件
  1. 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
  2. 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
  3. 注意:如/etc/pam.d存在,/etc/pam.conf将失效

2.3.2 PAM工作原理

PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so

PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证。

专用配置文件/etc/pam.d/ 格式:

配置文件/etc/pam.d/每一行都是一个独立的认证过程。

每一行可以区分为三个字段: 认证类型 、控制类型 、PAM 模块及其参数 。具体如下:

认证类型(module-type):

  • 认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证;
  • 帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等;
  • 密码管理(password management):用户修改密码时密码复杂度检查机制等功能;
  • 会话管理(session management):主要是提供对会话的管理和记账。
  • -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用。

控制类型: 也可以称做 Control Flags,用于 PAM 验证类型的返回结果。

  • 1)required 验证失败时仍然继续,但返回 Fail。
  • 2)requisite 验证失败则立即结束整个验证过程,返回 Fail 。
  • 3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续。
  • 4)optional 不用于验证,只是显示信息(通常用于 session 类型)。

PAM 模块及其参数:

  • 默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。 同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。

3 系统引导和登录控制

3.1 开关机安全控制

  • 将第一引导设备设为当前系统所在硬盘;

  • 禁止从其他设备(光盘、 U盘、网络)引导启动系统;

  • 将安全级别设为setup,并设置管理员密码。

    禁用重启热键:Ctrl+Alt+Delete,避免因用户误操作重启。

3.1.2 GRUB限制

  • 未经授权禁止修改启动参数
  • 未经授权禁止进入指定系统

3.1.3 GRUB菜单加密的实现

定义每个菜单项的所有脚本都存放在/etc/grub.d目录中,这些脚本的名称必须有两位的数字前缀,其目的是构建GRUB 2菜单时定义脚本的执行顺序以及相应菜单项的顺序,比如00_header文件首先被读取。

GRUB 2密码支持以下两种格式:

  • 明文密码:密码数据没有经过加密,安全性差。
  • PBKDF2加密密码:密码经过PBKDF2哈希算法进行加密,在文件中存储的是加密后的密码数据,安全性较高。
  • CentOS 7系统中,直接使用 “grub2-setpasswd” 命令设置grub密码;
  • CentOS 6系统中,先要使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令,然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令,最后使用grub2-mkconfig命令生成grub配置文件。(/etc/grub.d/00_header是开机时第一个启动的文件)

方法一

方法二

先要使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令,

然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令,

最后使用grub2-mkconfig命令生成grub配置文件。

修改配置文件

 

3.2 终端登录安全控制

3.2.1 限制root只在安全终端登录

安全终端配置:/etc/securetty

3.2.2 禁止普通用户登录

  • 建立/etc/nologin文件
  • 删除nologin文件或者重启后即恢复正常

4 网络端口扫描——nmap工具

4.1 nmap工具

  • 一款强大的网络端口扫描、安全、检测工具

网络端口扫描:

控制位描述
SYN建立链接
ACK确认
FIN结束断开
PSH传送 0 数据缓存,上层应用协议
RST重置
URG紧急

服务和端口号:

HTTP80
HTTPS443
Telnet23
FTP21
SSH22
SMTP25
POP3110
WebLogic7001
TOMCAT8080
WIN2003远程登录3389
Oracle数据库1521
MS SQL* SEVER数据库sever1433
ySQL 数据库sever3306

nmap命令常用格式

 nmap [扫描类型] [选项] <扫描目标>

netstat命令

netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。

命令格式:netstat [选项]

-a显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)。
-n拒绝显示别名,以数字的形式显示相关的主机地址、端口等信息。
-t查看TCP协议相关的信息。
-u显示UDP协议相关的信息。
-p显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限)
-r显示路由表信息。
-l显示处于监听状态(Listen)的网络连接及端口信息。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值