一、linux账号管理和认证

1.1、 Linux账号口令检查

awk -F: '($2==""){print$1}' /etc/shadow
  • 执行命令,如果结果为空说明,不存在空口令账号
  • 如果内容为空,说明存在空口令账号,对帐户设置密码

image-20240308172928058

1.2、Linux口令安全策略检查

检查口令复杂度以及过期时长

vim /etc/login.defs

标准

  • PASS_MAX_DAYS 密码最长过期天数 参考值90
  • PASS_MIN_DAYS 密码最小过期天数 参考值80
  • PASS_MIN_LEN 密码最小长度 参考值8
  • PASS_WARN_AGE密 码过期警告天数参考值 7

image-20240308173412393

image-20240308173721920

二、root远程登录限制

2.1、设置sudo账号

操作

  • 新建一个用户
useradd user_01
passwd user_01

image-20240308174314977

  • 设置用户sudo权限

    chmod u+w /etc/sudoers && vim /etc/sudoers

chmod u+w是给文件授予写的权限

image-20240308174538733

chmod u-w /etc/sudoers

取消文件写的权限

image-20240308174802432

  • 测试用户是否可以使用
su user

超级管理员切换到普通用户时不用输入密码

image-20240308174917253

2.2、关闭root用户远程登录

操作

  • 修改sshd_config文件
vim /etc/ssh/sshd_config

image-20240308175950298

image-20240308180011107

  • 修改后重启ssh服务

image-20240308180131817

systemctl restart ssh

结果:root用户无法直接登录ssh,以sudo新用户身份登录系统后,执行sudo命令可获得root操作权

2.3、检查root之外的UID为0用户

操作

awk -F: '($3==0){print$1}' /etc/passwd

image-20240308180701828

返回

值应该只有roo条目,UID为0的任何用户都拥有最高特权,保证只有root通用的UID为0

2.4、使用密钥登录

操作

ssh-keygen 

image-20240308181324573

  • 配置id_rsa.pub
cat /home/kali/.ssh/id_rsa.pub >> /home/kali/.ssh/authorized_keys

image-20240308181556284

  • 取出id_rsa
cat /home/kali/.ssh/id_rsa

image-20240308182026374

将生成的密钥复制到主机中,手动建立一个文件名id_rsa,将密钥复制进去

image-20240308182108202

  • 使用id_rsa登录ssh
ssh @用户名 ip -i id_rsa

如果id_rsa不在当前目录,使用绝对或者相对路径指定一下

image-20240308182250735

  • 关闭密码登录
vim /etc/ssh/sshd_config

image-20240308182554193

重启ssh服务

systemctl restart ssh

结果:无法直接使用密码登录,必须使用id_rsa

image-20240308182823666

三、系统文件与访问控制

3.1、远程连接的安全性配置

操作

find / -name .netrc 2>/dev/null

2>/dev/null 作用是忽略报错信息

image-20240308183710697

netrc 文件是一种用于存储网络认证信息的文件,通常用于命令行工具(例如FTP、Git、Curl等)在与远程服务器进行身份验证时使用。这个文件包含了一系列匹配规则和对应的用户名密码信息,当需要连接到远程服务器时,相应的工具会检查该文件中是否有匹配的规则,并使用其对应的用户名和密码进行认证。

  • 检查rhosts
find / -name .rhosts 2>/dev/null 

image-20240308183859432

rhosts 文件是Unix和类Unix系统中用于远程主机认证的文件。通常,它包含了一系列允许访问本地服务器上的文件或服务的主机名和用户列表。当远程主机尝试访问本地主机时,本地主机会检查远程主机是否在.rhosts 文件中,如果是,则允许它通过身份验证并访问相应的文件或服务。

预期:系统中无.netrc与.rhosts文件

3.2、用户umask安全配置

操作

cat /etc/profile /etc/csh.login /etc/csh.cshrc /etc/bashrc 2>/dev/null |grep umask

image-20240308184231495

  • 检查是否存在umask值

umask 是一个Unix/Linux系统中用于设置文件和目录的默认访问权限的命令或参数。它代表用户掩码(user mask)。
在Unix/Linux系统中,每个文件和目录都分配了一组访问权限,包括读取(r)、写入(w)和执行(x)权限。这些权限决定了谁可以对文件进行何种操作。当创建新文件或目录时,默认的权限由 umask 值来确定。
例如,如果 umask 值设置为 022,则新创建的文件将被设置为权限 644(即用户可读写,其他人只能读取),新创建的目录将被设置为权限 755(即用户具有完全权限,其他人只能访问)。

  • 预期结果:无umask值

3.3、重要目录和文件权限

操作步骤

  • 查找未授权的SUID/SGID文件
find / -perm -04000 2>/dev/null 
find / -perm -02000 2>/dev/null

image-20240308184638029

  • 检查任何人都有写权限的目录
find / -type d -perm -o+w 2>/dev/null
  • 检查隐藏文件和目录
find / -name ".*" -print -xdev
find / -name ".. *" -print -xdev
  • 预期结果:
    • 无未授权的suid/sgid权限,无未授权的可写权限目录,无未授权的隐藏文件或目录
    • 有的话,需要手动检查一下

3.4、系统core dump状态

核心转储(core dump)是指在程序崩溃或异常结束时,将程序的内存内容保存到磁盘上的一种机制。虽然核心转储对于调试应用程序非常有用,但也可能带来安全风险。

操作

vim /etc/security/limits.conf

image-20240308185336637

  • 预期结果:关闭core dump

四、日志审计

操作

cat/etc/rsyslog.conf

查看参数authpriv值

image-20240308190050101

  • 预期结果:对所有登录事件都记录