系统安全及应用

    技术2022-07-11  85

    系统安全及应用

    文章目录

    系统安全及应用账号安全控制基本安全措施系统账号清理密码安全控制 命令历史、自动注销命令历史限制终端自动注销 用户切换与提权su命令——切换用户PAM(Pluggable Authentication Modules)可插拔式认证模块PAM安全认证流程 使用sudo机制提升权限开关机安全控制终端及登录控制系统弱口令检测端口扫描NMAP

    账号安全控制

    用户账号,是计算机使用者的身份凭证或标识,每一个要访问系统资源的额人,必须凭借其用户账号才能进入计算机。在Linux系统中,提供了多种机制来确保用户账号的正当、安全使用。

    基本安全措施

    系统账号清理

    将非登录用户的Shell设为/sbin/nologiin 在Linux系统中除了用户手动创建的各种账号之外,还包括随系统或程序安装过程中而生成的其他大量账号。除了超级用户root之外,其他大量账号只是用来维护系统运作、启动或保持任务进程,一般是不允许的登陆的,因此也称为非登录用户。 常见的非登录用户包括bin、daemon、adm、lp、mail、nobody、apache、mysql、dbus、ftp、gdm、haldaemon等。为了确保系统安全,这些用户的登录shell通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动。

    [root@localhost ~]# grep "/sbin/nologin$" /etc/passwd #查看非登录用户 bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin ...省略部分内容 [root@localhost ~]# grep "bash$" /etc/passwd #查看当前可以登录的用户

    锁定长期不使用的账号 对于长期不用的用户账号,若无法确定是否删除,可以暂时将其锁定,(passwd、usermod命令都可以用来锁定和解锁账号)

    [root@localhost ~]# passwd -l lisi (或者 usermod -L lisi ) #锁定用户lisi 锁定用户 lisi 的密码 。 passwd: 操作成功 [root@localhost ~]# usermod -U lisi (或者 passwd -u lisi) #解锁用户lisi [root@localhost ~]# passwd -S lisi #查看账号状态 lisi PS 2019-11-14 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

    删除无用的账号 在非登录用户中,还有一部分是很少用到的,如news、uucp、games、gopher等,这些用户可视为冗余账号,可以直接删除。除此之外,还有一些随着应用程序安装的用户账号,若程序卸载以后未能自动删除,需要人为手动删除。

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

    chattr命令基本格式 chattr +i [目标文件] 锁定目标文件 chattr -i [目标文件] 解锁目标文件 lsattr [目标文件] 查看目标文件 例如

    [root@localhost ~]# chattr +i /etc/passwd /etc/shadow [root@localhost ~]# lsattr /etc/passwd /etc/shadow ----i----------- /etc/passwd ----i----------- /etc/shadow

    [root@localhost ~]# chattr -i /etc/passwd /etc/shadow [root@localhost ~]# lsattr /etc/passwd /etc/shadow ---------------- /etc/passwd ----------------/etc/shadow

    在账号文件被锁定的情况下,其内容将不允许变更,因此无法添加,删除账号,也不能更改用户的密码,登录shell,宿主目录等属性信息

    [root@localhost ~]# chattr +i /etc/passwd /etc/shadow //锁定目标文件 [root@localhost ~]# id wangwu //查看是否存在wangwu用户 id: wangwu: no such user [root@localhost ~]# useradd wangwu //尝试添加wangwu用户 useradd:无法打开 /etc/passwd

    密码安全控制

    设置密码有效期 在不安全的网络环境中,为了降低密码被猜出或者被暴力破解的风险,用户应养成定期修改密码的习惯,避免长期使用同一个密码。管理员可以在服务器端限制用户密码的最大有效天数,对于密码已经过期的用户,登录时将被要求重新设置密码,否则拒绝登录

    chage 命令用于设置密码的时限 设置密码有效期 要求用户下次登录时修改密码 [root@localhost ~]# vi /etc/login.defs //适用于新建用户 … PASS_MAX_DAYS 30

    [root@localhost ~]# chage -M 30 tom1 //适用于已有用户

    [root@localhost ~]# chage -d 0 tom1 //强制在下次登录时更改密码

    再登录tom1时会显示

    WARNING: Your password has expired. You must change your password now and login again! 更改用户 tom1 的密码 。 为 tom1 更改 STRESS 密码。 (当前)UNIX 密码:

    命令历史、自动注销

    命令历史限制

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

    [root@localhost ~]# vi /etc/profile //适用于新登录用户 …省略部分内容 将其中的HISTSIZE=1000,修改为HISTSIZE=200

    [root@localhost ~]# export HISTSIZE=200 //适用于当前用户 注销时自动清空命令历史:修改用户宿主目录中的~/.bash_logout文件,添加清空历史命令的操作语句。即:当用户注销(退出已登录的bash环境)时,所记录的历史命令将自动清空

    [root@localhost ~]# vi .bash_logout # ~/.bash_logout history -c clear [root@localhost ~]# history source .bash_logout

    或者 使用vi /etc/profile,将其中的history值改为0

    终端自动注销

    bash终端环境中,可以设置一个闲置超时时间,当超过指定时间没有任何输入时即自动注销终端,这样可以有效避免当管理员不在时其他人员对服务器的误操作风险。闲置时间有变量TMOUT来控制,默认单位为秒

    闲置60s后自动注销

    [root@localhost ~]# vi /etc/profile //适用于新登录用户 ... //省略部分内容 export TMOUT=60 [root@localhost ~]# source /etc/profile [root@localhost ~]# export TMOUT=60 //适用于当前用户

    用户切换与提权

    大多数Linux服务器并不建议用户直接以root用户进行登录。一方面可以大大减少因误操作而导致的破坏,另一方面也降低了特权密码在不安全的网络中被泄露的风险 Linux为我们提供了su ,sudo 两种命令 su命令主要用来切换用户 sudo命令用来提升执行权限

    su命令——切换用户

    用途及用法 用途:Substitute User,切换用户密码验证 root→任意用户,不验证密码 普通用户→其他用户,验证目标用户的密码 [lisi@localhost~]$su -root //带-选项表示将使用目标用户的登录shell环境 密码: 上一次登录:四 614 16:41:35 CST 2020pts/0[root@localhost ~]# whoami root

    限制使用su命令的用户

    限制使用su命令的用户 将允许使用su命令的用保护加入wheel组 启用pam_wheel认证模块 查看su操作记录 安全日志文件:/var/log/secure su命令的安全隐患 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登陆密码,带来安全风险 为了加强su命令的使用控制,可借助于PAM认证模块,之允许极个别用户使用su命令进行切换

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

    是一种高效而且灵活便利的用户级别的认证方式。 也是当前Linux服务器普遍使用的认证方式。

    每一行都是一个独立的认证过程每一行可以区分为三个字段: 认证类型 控制类型 PAM模块及其参数

    PAM认证类型包括四种: 认证管理:接受用户名和密码,进而对该用户的密码进行认证。 账户管理:检查账户是否被允许登录系统,账号是否已经过期,账号的登录是否有时间段的限制等 密码管理:主要用来修改用户的密码 回话管理:主要是提供对用户的管理和记账

    一般遵循的顺序 Service(服务)→PAM(配置文件)→pam_*so 首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证 用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证 不同的应用程序对应的PAM模块是不同的 如果想查看某个程序是否支持PAM认证可以用ls命令进行查看

    [root@localhost ~]# ls /etc/pam.d |grep su //查看su是否支持PAM模块认证 ksu su sudo sudo-i su-l [root@localhost ~]# cat /etc/pam.d/su // su的PAM配置文件的具体内容 #%PAM-1.0 auth sufficient pam_rootok.so # Uncomment the following line to implicitly trust users in the "wheel" group. #auth sufficient pam_wheel.so trust use_uid # Uncomment the following line to require a user to be in the "wheel" group. #auth required pam_wheel.so use_uid auth substack system-auth auth include postlogin account sufficient pam_succeed_if.so uid = 0 use_uid quiet account include system-auth password include system-auth session include system-auth session include postlogin session optional pam_xauth.so

    PAM安全认证流程

    控制类型也成称为Control Flags,用于PAM验证类型的返回结果 1.required验证失败时仍然继续,但返回Fail 2.requisite验证失败则立即结束整个验证过程,返回Fail 3.optional不用于验证,只显示信息(通常用于session类型)

    使用sudo机制提升权限

    su命令的缺点 用过su命令可以非常方便的切换为另一个用户,但前提条件是必须知道目标用户的登录密码 对于生产环境中的Linux服务器,每多一个人知道特权密码,其安全风险也就增加一分

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

    配置sudo授权 (1)在配置文件/etc/sudoers中添加授权 sudo机制的配置文件为 /etc/sudoers,文件的默认权限为440,需要使用专门的visudo工具进行编辑。虽然也可以用vi进行编辑,DNA保存时必须执行“:w!”命令来强制操作,否则系统将提示为只读文件而拒绝保存。 配置文件/etc/sudoers中,授权记录的基本配置格式如下所示。 授权配置主要包括用户、主机、命令三个部分,即授权哪些主机上执行哪些命令。各部分的具体含义如下。 用户user:直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。 主机MACHINE:使用此配置文件的主机名称,此部分主要是方便在多个主机间共用同一份sudoers文件,一般设为localhost或者实际的主机名。 命令COMMANDS:允许授权的用户通过sudo放回寺执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。 典型的sudo配置记录中,每行对应一个用户或组的sudo授权配置。 sudo配置记录的命令部分允许使用通配符“*”取反符号“!”,当需要授权某个目录下的所有命令或取消其中的个别命令时特别有用。 默认情况下,通过sudo方式执行的操作并不记录 (2)通过sudo执行特权命令 对于已获得授权的用户,通过sudo方式执行特权命令时,只需要将正常的命令行作为sudo命令的参数即可。由于特权命令程序通常位于/sbin、/user/sbin等目录下,普通用户执行应使用绝对路径。

    开关机安全控制

    调整BIOS引导设置 将第一引导设备(first boot device)设为当前系统所在硬盘 禁止从其他设备(光盘、U盘、网络)引导系统 将安全级别设为setup,并设置管理员密码

    GRUB限制 使用grub2-mkpasswd-pbkdf2生成密钥 修改/etc、grub.d/00_header文件中,添加密码记录 生成新的grub.cfg文件

    终端及登录控制

    在Linux系统中,默认开启了六个tty终端,允许任何用户进行本地登录。关于本地登录的安全控制,可以从以下几个方面着手。 1.禁止root用户登录 在Linux系统中,login程序会读取/etc/securetty文件,以决定允许root用户从哪些终端(安全终端)登录系统。若要禁止root用户从指定的终端登录,只需从该文件中删除或者注释掉对应的行即可。 2.禁止普通用户登录 当服务器正在进行备份或调试等维护工作时,可能不希望再有新的用户登录系统。这时候,只需要简单地建立/etc/nologin文件即可。login程序会检查/etc/nologin文件是否存在,如果存在,则拒绝普通用户登录系统(root用户不受限制)。 [root@localhost~]#touch /etc/nologin

    系统弱口令检测

    Joth the Ripper,简称为JR 一款密码分析工具,支持字典式的暴力破解 通过对shadow文件的口令分析,可以检测密码强度 官方网站:http://www.openwall.com/john/

    安装JR工具 安装方法 make clean 系统类型 主程序文件为john检测弱口令账号 获得Linux/Unix服务器的shadow文件 执行john程序,将shadow文件作为参数密码文件的暴力破解 准备好密码字典文件,默认为passwd。lst 执行john程序,结合–wordlist=字典文件

    端口扫描NMAP

    一款强大的网络扫描,安全检测工具 可以探测局域网中那些主机在线,或者某台主机中开了那些端口 官方站点是http://namp.org/ nmap被设计为检测众多主机数量的巨大网络,支持ping扫描、多端口检测、OS识别等多种技术。

    NMAP的扫描语法 nmap [扫描类型] [选项] <扫描目标…> 常用的扫描类型

    -sS,-sT,-sF,-sU,-sP,-P0 -sT:TCP端口 -sU:UDP端口 -sP:ping
    Processed: 0.009, SQL: 9