系统安全与应用

100 阅读10分钟

一.账号安全基本措施

1. 系统账号清理

  • 将用户设置为无法登录、
  • 锁定账户
  • 删除账户
  • 锁定账户密码 本质锁定

shell——/sbin/nologin却比较特殊,所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。举例来说,各个系统账号中,打印作业有lp这个账号管理,www服务器有apache这个账号管理,他们都可以进行系统程序的工作,但就是无法登陆主机而已。

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

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

举例如图:

微信截图_20230729180608.png

微信截图_20230729181817.png

1.2锁定长期不使用的账号

这里有两种命令用法基本一致

passwd [选项] 用户名

-l :锁定用户账号

-u:解锁用户账号

-S:查看用户状态

usermod [选项] 用户名

-L:锁定用户账号

-U:解锁用户账号

举例如图:锁定用户。锁定后用户无法登录。

微信截图_20230729182229.png

1.3删除无用的账号

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

用户被删除后,他的家目录会变成无主文件,文件的属主和属主位显示的是原主人的UID和GID。

  • userdel -r 用户名。删除用户的同时删除他的家目录。

微信截图_20230729182926.png

1.4锁定账号文件passwd、shadow

  • chattr命令改变文件属性,lsattr命令查看文件底层属性

选项说明:

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

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

微信截图_20230729183146.png

  • chattr +a 文件或目录     只允许对文件进行追加操作(适用于日志文件)  

  • chattr +i 文件或目录     不能更改、重命名或删除这个文件

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

微信截图_20230729183748.png

2.密码安全控制

1.设置密码有效期

2.要求用户下次登录时修改密码

chage命令

用来修改帐号和密码的有效期限。

格式:

chage [选项] 用户名

常用选项

微信截图_20230729183949.png

2.1.设置密码有效期

  • chage -M ,设置用户密码的有效期。

微信截图_20230729184526.png

微信截图_20230729184739.png

  • chage -d 0,强制要求用户下次登录时必须修改密码。

微信截图_20230729185008.png

3.命令历史限制

Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在 命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通 过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户。例如,可以设 置最多只记录 200 条历史命令。

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

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

家目录下有 .bash_history 文件,用于记录历史命令。清空该文件即清空了命令历史。

微信截图_20230729185513.png 注:在注销时清空命令历史,或在登录时清空命令历史,设置其中一种即可。

4.终端自动注销

闲置20秒后自动注销

方法:

写入配置文件 文件位置 .bash_profile

微信截图_20230729190334.png

二.用户切换和提权

2.1 用户切换——su 命令介绍

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

查看su操作记录:

系统安全日志/var/log/secure,是记录ssh登陆服务器的日志文件。

切换用户的方式:

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

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

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

密码验证:

  • root 切换到任意用户,不验证密码。
  • 普通用户切换到其他用户,需要验证目标用户的密码。

注意:

su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。

微信截图_20230729190754.png

密码验证

1.从root切换到任意用户不需要验证密码

2.普通用户切换到其他用户需要验证目标用户的密码

微信截图_20230729191134.png

2.2限制使用su命令的用户

su 命令的安全隐患

  • 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险。
  • 为了加强su 命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su 命令进行切换。

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

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

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

微信截图_20230729191432.png

注意第二行和第六行:

  1. 以上两行现在是默认状态(即开启第二行,注释第六行),这种状态下是允许所有用户间使用su命令进行切换的。

  2. 两行都注释是允许所有用户都能使用su命令,但root使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码)。

  3. 如果开启第六行,表示只有root用户和wheel组内的用户才可以使用su命令。

  4. 如果注释第二行,开启第六行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令。

三.用户提权 sudo命令

sudo命令作用以及用法

作用:指定用户以超级用户的身份来执行部分命令

用法:sudo 授权命令

1.在配置文件中添加授权,文件位置visudo 或者 vim /etc/sudoers

root    ALL=(ALL)       ALL  #这里的all表示所以命令

记录格式 :用户 登入主机 = (代表用户) 命令

可以使用通配符“ * ”号任意值和“ !”号进行取反操作。
权限生效后,输入密码后5分钟可以不用重新输入密码。

举例:

微信截图_20230729192243.png

微信截图_20230729193440.png

微信截图_20230729193401.png

微信截图_20230729193313.png

四. PAM安全认证

su命令的安全隐患

默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root) 的登录密码,带来安全风险;

为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换。

PAM(Pluggable Authentication Modules)可插拔式认证模块

是一种高效而且灵活便利的用户级别的认证方式

也是当前linux服务器普遍使用的认证方式

PAM认证原理

一般遵循的顺序

Service (服务)—>PAM (配置文件) —>pam_*.so

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

用户询问服务时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。

不同的应用程序所对应的PAM模块时不同的。

如果想查看某个程序是否支持PAM 认证,可以用ls命令进行查看/etc/pam.d/

微信截图_20230729193732.png

PAM安全认证流程

控制类型也称作Control Flags,用于PAM验证类型返回的结果

1.required验证失败时任然继续,但返回Fail

2.requisite验证失败则立即结束整个验证过程,返回Fail

3.sufficien验证成功则立即返回,不在继续,否则忽略结果并继续

4.optional不用于验证,只显示信息

微信截图_20230729193839.png

五.系统引导和登录控制

5.1.1 调整BIOS引导设置原则

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

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

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

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

5.1.2 GRUB限制

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

通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

5.1.3 GRUB菜单加密的实现

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

微信截图_20230729194049.png

5.1.4设置GRUB 2加密

由于GRUB 2负责引导linux系统,其作为系统中的第一道屏障的安全性非常重要,对GRUB 2进行加密可以实现安全性。

在默认情况下,GRUB 2对所有可以在物理上进入控制台的人都是可访问的。任何人都可以选择并编辑任意菜单项,并且可以直接访问GRUB命令行。要启用认真支持,必须将环境变量超级用户设置为一组用户名(可以使用空格、逗号、分号作为分隔符)这样就只允许超级用户使用GRUB命令行、编辑菜单项以及执行任意菜单项。

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

  • 明文密码:密码数据没有经过加密,安全性差。
  • PBKDF2加密密码:密码经过PBKDF2哈希算法进行加密,在文件中存储的是加密后的密码数据,安全性较高。

为GRUB菜单设置密码的两种方式:

  • 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是开机时第一个启动的文件)

5.1.5CentOS 7系统中,直接使用 “grub2-setpasswd” 命令设置grub密码

微信截图_20230729194635.png

微信截图_20230729194649.png

5.2### 终端登录安全控制

限制root只在安全终端登录

安全终端配置:/etc/securetty

禁止普通用户登录

建立/etc/nologin

删除nologin文件或重启后即恢复正常

微信截图_20230729195836.png

微信截图_20230729195424.png

六.网络端口扫描——nmap工具

网络端口扫描:

微信截图_20230729200125.png

服务和端口号:

微信截图_20230729200202.png

常用选项和扫描类型

微信截图_20230729200319.png

七.netstat命令

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

微信截图_20230729200426.png

举例:

微信截图_20230729200624.png

netstat -tnlp,直接使用ip地址列出所有处于监听状态的TCP端口,且加上程序名。

微信截图_20230729200740.png