系统安全及应用

  • 系统安全及应用
    • 一.账号安全基本措施
      • 1.系统账号清理
      • 2.密码安全控制
      • 3.切换用户
        • 3.1限制使用su命令的用户
    • 二.PAM安全认证
      • 1.PAM认证原理
      • 2.PAM相关文件
      • 3.专用配置文件/etc/pam.d/格式
        • 3.1PAM安全认证流程
      • 4.shell模块
      • 5.securetty模块
      • 6.**pam_nologin.so** 模块
      • 7.limit
    • 三.使用sudo机制提升权限
      • 1.su命令的缺点
      • 2.sudo命令的用途及用法
      • 3.配置sudo授权
        • 3.1查看sudo操作记录
        • 3.2查询授权的sudo操作
        • 3.3子目录
      • 4.napm扫描

系统安全及应用

一.账号安全基本措施

1.系统账号清理

  • 将非登录用户的Shell设为/sbin/nologin
  • 锁定长期不使用的账号
  • 删除无用账号
  • 锁定账号文件passwd、shadow
chattr +i 文件名     锁定文件
chattr -i 文件名     解锁文件
lsattr 文件名        查看文件状态

系统安全及应用_第1张图片

2.密码安全控制

  • 设置密码有效期
  • 要求用户下次登录时修改密码
chage 用户名   修改信息
vim /etc/login.defs 适用于新建用户
chage -M 30 lisi    适用于已有用户
chage -d 0 zhangsan 强制在下次登录时更改密码
  • 命令历史限制

​ 减少记录的命令条数

​ 注销时自动清空命令历史

  • 终端自动注销

​ 闲置10秒后自动注销

#设置超时时间
vim /etc/profile   //对所有用户生效
export TMOUT=10    //10秒不做编辑自动退出终端
. .bashrc          //刷新
echo $TMOUT

vim .bashrc        //只对自己生效

. /etc/profile  . = source  //相当于刷新

系统安全及应用_第2张图片
在这里插入图片描述

echo 123123 |passwd --stdin lisi这种改密码方式会将密码暴露在history里面

系统安全及应用_第3张图片

#例子
vim .bash_logout   在退出当前终端的时候执行里面的命令
history -c         history -c和clear并不能清空history里面的内容,所有的命令都是存在.bash_history clear              文件中的,直接清空.bash_history文件

vim .bash_history
echo " " > /root/.bash_history   临时清空

系统安全及应用_第4张图片
系统安全及应用_第5张图片
系统安全及应用_第6张图片
系统安全及应用_第7张图片

#例子
pstree -p |grep bash  //过滤bash
bash  
pstree -p |grep bash  //又开了一个新的bash
两个bash硬盘资源共享,内存资源不共享,进程是相互隔离的,如果用命令修改第一个bash,只对打一个bash生效,对第二个bash是不生效的
a=10 
echo $a     //定义变量a=10
exit        //退出
pstree -p |grep bash  //重新过滤bash
echo $a     //a是空的
echo $HISTSIZE  //变量默认值1000
HISTSIZE=10
echo $HISTSIZE  //修改变量值为10
bash  
pstree -p |grep bash  //再过滤一个bash
echo $HISTSIZE    //变量为10
因为$HISTSIZE是系统变量,所以是通用的,export是自定义变量,不能通用,export全局生效

env  //系统自带变量,是通用的

系统安全及应用_第8张图片

3.切换用户

su -目标用户  完全切换
或
su 目标用户  不完全切换,会残留上一个用户的一些设置

密码验证

  • root—>任意用户,不验证密码
  • 普通用户—>其他用户,验证目标用户的密码
3.1限制使用su命令的用户
  • 将允许使用su命令的用户加入wheel组
  • 启用pam_wheel认证模块
vim /etc/pam.d/su
2 # auth sufficient pam_ rootok.so
6 #auth required pam_ wheel.so use_ _uid

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

二.PAM安全认证

su命令的安全隐患

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

PAM可插拔式认证模块

  • 是一种高效而且灵活便利的用户级别的认证方式
  • 也是当前Linux服务器普遍使用的认证方式
1.rpm -qi pam  
#查看当前系统pam
Name        : pam
Version     : 1.1.8
Release     : 18.el7
Architecture: x86_64
Install Date: 2023年07月27日 星期四 17时26分12秒
Group       : System Environment/Base
Size        : 2625254

2.rpm -ql pam  
#查看模块
/etc/pam.d
/etc/pam.d/config-util
/etc/pam.d/fingerprint-auth
/etc/pam.d/other
/etc/pam.d/password-auth
/etc/pam.d/postlogin
/etc/pam.d/smartcard-auth
/etc/pam.d/system-auth

3.ls /usr/lib64/security/*.so|wc -l  
#60个模块是二进制文件,不会直接修改
60
4.ls /etc/security/   
#和上面的模块配合使用,有些比较简单的模块没有配置文件
access.conf       console.perms    limits.d        opasswd         time.conf
chroot.conf       console.perms.d  namespace.conf  pam_env.conf
console.apps      group.conf       namespace.d     pwquality.conf
console.handlers  limits.conf      namespace.init  sepermit.conf

我们会去修改配置文件
/etc/security
/etc/pam.d/*

5.cd /etc/pam.d/  
#这里的文件是应用程序怎么调用模块的
atd                     gdm-pin           postlogin-ac       su
chfn                    gdm-smartcard     ppp                sudo
chsh                    ksu               remote             sudo-i
config-util             liveinst          runuser            su-l
crond                   login             runuser-l          system-auth
cups                    other             setup              system-auth-ac
fingerprint-auth        passwd            smartcard-auth     systemd-user
fingerprint-auth-ac     password-auth     smartcard-auth-ac  vlock
gdm-autologin           password-auth-ac  smtp               vmtoolsd
gdm-fingerprint         pluto             smtp.postfix       xserver
gdm-launch-environment  polkit-1          sshd
gdm-password            postlogin         sssd-shadowutils

6.cat /etc/pam.d/sshd  
#文件类型
#%PAM-1.0
auth	   required	pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
# Used with polkit to reauthorize users in remote sessions
-auth      optional     pam_reauthorize.so prepare
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin
# Used with polkit to reauthorize users in remote sessions
-session   optional     pam_reauthorize.so prepare

1.PAM认证原理

  • 一般遵循的顺序

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

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

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

  • 不同的应用程序所对应的PAM模块是不同的

2.PAM相关文件

  • 包名: pam
  • 模块文件目录:/lib64/security/*.so
  • 特定模块相关的设置文件:/etc/security/
  • man 8 加模块名 可以查看帮助
  • 应用程序调用PAM模块的配置文件
  1. 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
  2. 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
  3. 注意:如/etc/pam.d存在,/etc/pam.conf将失效
用户来访问我
首先确定你的service类型(用户名 密码 密钥 短信验证码)
根据配置文件确定是否放行
如果调用的相关的模块
#配置文件:
主配置:/etc/security  只有功能强大的pam模块才会有主配置文件
次配置文件: /etc/pam.d   虽然他是次配置但是他优先生效
模块文件: /usr/lib64/security/
我怎么知道 怎么配置 模块的配置文件和模块的功能?
man  8  模块名 

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

type   control   module-path    arguments

type:指模块类型,即功能
control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
module-path: 用来指明本模块对应的程序文件的路径名
Arguments: 用来传递给该模块的参数
type(模块类型) 功能
Auth 账号的认证和授权 用户名和密码
Account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)
Password 用户修改密码时密码复杂度检查机制等功能
Session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等
-type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用

系统安全及应用_第9张图片

control(控制位) 功能
required 一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件
requisite 一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件
sufficient 一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的
equired和requisiteoptional 表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略include: 调用其他的配置文件中定义的配置
optional 可选项
PAM模块 功能
认证管理 接受用户名和密码,进而对该用户的密码进行认证
帐户管理 检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等
密码管理 主要是用来修改用户的密码
会话管理 主要是提供对会话的管理和记账。 控制类型也可以称做 Control Flags,用于 PAM 验证类型的返回结果
3.1PAM安全认证流程

控制类用于PAM验证类型的返回结果

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

系统安全及应用_第10张图片

4.shell模块

功能:检查有效shell
帮助:man pam_shells
案例:不允许使用/bin/csh的用户本地登录
模块: pam_shells.so  只允许规定的shell类型通过,是在/etc/shells 文件中存在的类型通过

系统安全及应用_第11张图片

#例子
cd /etc/pam.d
ls
vim su
auth required pam_shells.so //在第一行加入
useradd -s /bin/csh lisi    //添加用户lisi,并指定shell类型为/bin/csh
passwd lisi
su lisi   //切换用户lisi,可登录
vim /etc/shells     
去掉 /bin/csh
su lisi   //不可登录

系统安全及应用_第12张图片
系统安全及应用_第13张图片

5.securetty模块

功能:只允许root用户在/etc/securetty列出的安全终端上登陆

vim /etc/securetty  //允许什么样的东西登录到系统当中来
systemctl start  telnet.socket  //开启服务
yum install telnet-server.x86_64 -y
telnet 192.168.91.101    //远程登录协议,在2服务器连1服务器,默认不让登录root用户
登录zhangsan用户
ip a
su root
不建议使用telnet,是明文的,建议使用ssh,ssh是密文,并且有压缩功能

6.pam_nologin.so 模块

功能:如果/etc/nologin文件存在,将导致非root用户不能登陆,当该用户登陆时,会显示/etc/nologin文件内容,并拒绝登陆

7.limit

功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间

ulimit -a 
yum install httpd-tools -y
ab -c1025 -n 2000 http://192.168.91.100/   //-c1025同一时间并发1025个  -n代表总共2000次
ab 测试网站的并发
systemctl status httpd -y
ulimit -n  10000   //   #修改最大值  临时修改,只对当前窗口有效

三.使用sudo机制提升权限

1.su命令的缺点

必须要先告知超级用户的密码

2.sudo命令的用途及用法

用途:以其他用户身份(如root)执行授权的命令

sudo 授权命令

3.配置sudo授权

sudo,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具

visudo或者vi /etc/sudoers

记录格式

用户 主机名列表=命令程序列表
  root                ALL=(ALL)      ALL(全部命令)
对哪个用户进行设置   代表ip地址或主机名 可以执行什么命令
#例子
su lisi
mount /dev/sr0 /mnt  //挂载光盘  ,lisi用户没有权限,操作失败
visudo       //在visudo里添加lisi用户
lisi  ALL=(ALL)  /usr/bin/mount   /dev/cdrom /mnt/
which mount  //查看绝对路径
sudo mount /dev/cdrom /mnt/   //在lisi用户下挂载

visudo
lisi  ALL=(ALL)  /usr/bin/mount   /dev/cdrom /mnt/, /usr/bin/umount   //解挂载,
可以跟多个命令
sudo umount /mnt/ 

系统安全及应用_第14张图片

3.1查看sudo操作记录
  • 需启用Defaults logfile配置
  • 默认日志文件:/var/log/sudo
#启用sudo操作日志
visudo
Defaults logfile = "/var/log/sudo"
tail -f /var/log/sudo

系统安全及应用_第15张图片

3.2查询授权的sudo操作
sudo -l

系统安全及应用_第16张图片

3.3子目录
#在总文件里面改,容易影响全部,这时候可以建一个子配置文件
vim /etc/sudoers.d/test   //建一个子文件test
kkk   ALL= NOPASSWD:ALL   //允许kkk使用所有命令
useradd kkk
passwd kkk
su kkk
sudo mount /dev/sr0 /opt

系统安全及应用_第17张图片

4.napm扫描

#检测192.168.80.0/24网段有哪些存活主机
nmap -n -sP 192.168.80.0/24 

-n:禁用反向DNS解析(以加快扫描速度) ip转换成 域名  12222 2www.baidu.com 
-sP: ICMP 扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。

系统安全及应用_第18张图片

服务 端口号
HTTP 80
HTTPS 443
Telnet 23
FTP 21
SSH(安全登录)、SCP(文件传输)、端口重定向 22
SMTP 25
POP3 110
WebLogic 7001
TOMCAT 8080
WIN2003远程登录 3389
Oracle数据库 1521
MS SQL* SEVER数据库sever 1433

你可能感兴趣的:(系统安全,安全)