0


Linux系统安全和应用笔记

一、账号安全控制

1.1 基本的安全措施

1.系统账号清理:在linu系统中有大量的账号,有些账号是不经常使用的或卸载程序之后未能正确删除的,这些账号就需要管理员手动清理,一般使用"userdel"命令进行删除。除了删除之外还有以下情况:

  • 不确定某个账号是否应该被删除,但又不经常使用,就可以锁定该账号,一般使用"usermod -L userName"进行锁定,在需要解锁时,使用"usermod -U userName"进行解锁。
  • 服务器中的用户账号已经固定,不需要再更改的话,则可以采用锁定账号配置文件的方法达到此目的。一般使用"chattr"命令,结合"+i"选项锁定,"-i"解锁。若要查看文件的锁定情况,则只需要使用"lsattr"即可。

注意使用chattr命令时要指定文件的路径。

chattr -/+i 要锁定的文件的路径

chattr也能够使用一些其他选项,如:

  • -a:只能向文件中追加数据,而不能覆盖或删除。如果目录设置了此属性,则新的文件和子目录只能被添加,但不能被删除或重命名。
  • -c:将文件或目录压缩后存储。
  • -d:当目录被删除时,其内容(文件和子目录)也会被自动删除。这类似于某些UNIX系统中的“sticky bit”属性,但仅应用于目录。
  • -s:如果文件是空的(零字节),则删除它。这用于删除零字节长度的文件。
  • -u:当文件被删除时,其数据内容会被保存,但文件名会被删除,并且会尝试在将来恢复它。

2.密码安全控制

在不安全的网络环境中,要避免长期使用同一个密码,而管理员可以设置用户的密码的最大有效天数,但时间必须要修改密码,否则就会拒绝登录。使用chage命令可以实现此操作:

chage [选项] 限制的天数 username

而要批量设置用户密码的可用期限,可以修改/etc/login.defs文件,通过将里面的PASS_MAX_DAYS设置为想要的期限,即可控制该主机上所有用户的密码可用期限。而chage命令使用的选项有:

  • -m:设置用户必须等待多少天才能更改其密码。如果设置为0,则用户可以随时更改密码。
  • -M:设置密码的最大有效天数。密码到期后,用户必须更改密码才能继续登录。
  • -d:将密码的最后一次更改日期设置为指定的日期。日期格式通常为 YYYY-MM-DD。
  • -l:显示用户的密码年龄信息。这包括密码最后一次更改的日期、密码的最小和最大有效天数、密码到期前的警告天数等。

3.命令历史、自动注销

在Bash终端环境中,历史命令的记录条数由/etc/profile文件中的变量HISSIZE控制,可以影响系统中所有的用户。通过修改该变量的值,可以允许history可以记录的命令的数量。此外,还可以在用户家目录中的bash_logoutw文件中添加清空历史命令的操作语句,在用户退出时可以清空命令记录。通过这两项配置,能有效防止用户通过history查看自己的命令操作过程。

用户也可以设置终端的闲置超时时间,防止自己在离开时忘记关闭终端而可能导致的风险。通过在/etc/profile文件中添加:export TMOUT并设置时间,单位为秒。

1.2用户切换和提权

大多数Linux服务器并不建议用户直接以root用户的身份登陆,所以需要为普通用户提供一种身份切换或权限提升机制,以便在必要时执行管理任务。Linux也提供了用户切换的指令su和提升用户权限的命令sudo:

  • su命令——切换用户 - su命令有两种执行方式,分别为

su username su - username

第一种只切换身份而不切换用户环境,第二种则连用户环境一起切换。而su命令切换用户没有限制,从而有机会反复尝试其他用户的登录密码,这样带来了安全风险,故需对su命令进行限制。通过启用pam_wheel认证,使非wheel组内的用户无法使用su命令,从而将切换用户的权限控制在最小范围内,且只需将一个用户加入wheel组,就可以继续使用su命令。启用pam_wheel认证需要将/etc/pam.d/su文件中的"auth required pam_wheel.so use_uid"取消注释即可。

    • pam_wheel中的PAM是linux系统可插拔认证模块,是当前Linux服务器普遍使用的认证方式。PAM提供了对所有服务进行认证的中央机制,系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略。PAM认证原理如下所示: - PAM 认证一般遵循的顺序:Service(服务)→PAM(配置文件)→pam*.so;- PAM 认证首先要确定哪一项服务,然后加载相应的 PAM 的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/ib/security 下)进行安全认证;- 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到 PAM 模块进行认证。不同的应用程序所对应的 PAM 模块也是不同的。- 在PAM配置文件中,一般命令都有三个字段,分别代表命令的认证类型、控制类型、PAM模块及其参数。而认证类型包括四种: - 认证管理(authentication management):接受用户名和密码,进而对该用户的密码进

行认证;

      • 帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等:- 会话管理(session management):主要是提供对会话的管理和记账。

而控制类型有以下四种,用于PAM验证类型的返回结果:

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

PAM验证流程图如下所示:

要自己设置PAM的密码策略,需要在/etc/pam.d/system-auth中添加"password requisite pam_cracklib.so",其后可以跟"minlen=n"来设置密码的最小长度、"dcredit=-1"来设置密码最小要有一位数字、"ucredit=-1"设置密码最少要有一个大写字母、"ocredit=-1"设置密码至少要有几个特殊符号。

注:PAM仅存在于redhat系统中。

  • sudo命令——提升执行权限

通过su命令可以非常方便地切换为另一个用户,但前提条件是必须知道目标用户的密码,如果是root用户为目标用户,则就需要root用户的密码,而每多一个人知道root的密码,安全风险也就增加一分。而使用sudo命令不仅可以提权,还可以指定允许哪些用户以超级用户的身份来执行哪些命令。

要对用户进行提权,需要配置/etc/sudoers文件,而该文件一般使用visudo命令进行编辑。在配置文件中,授权记录的j基本配置格式如下所示:

user MACHINE=COMMANDS

授权配置主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行命令。各部分的具体含义如下:

    • 用户(user):直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有

用户)。

    • 主机(MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间共用同一份 sudoers 文件,一般设为 localhost 或者实际的主机名即可。- 命令(COMMANDS):允许授权的用户通过 sudo 方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。

典型的sudo配置记录中,每行对应一个用户或组的sudo授权配置。例如,若要授权用户zhangsan能够执行ifconfig命令修改IP地址,而wheel组的用户无需验证密码即可执行任何命令,可以执行以下操作:

visudo zhangsan localhost=/sbin/ifconfig #将此文本添加进sudoers文件中 
%wheel ALL=NOPASSWD:ALL #将此文本添加进sudoers文件中

而当使用相同授权的用户较多,或者授权的命令较多时,可以使用集中定义的别名。用户、主机、命令部分都可以定义为别名(必须大写),分别通过关键字User_Alias、Host_Alias、Cmmd_Alias进行设置。例如以下操作通过别名方式来添加授权记录,允许用户zhangsan、lisi、wangwu在主机smtp、pop中执行rpm、yum命令。

visudo User_Alias OPERATORS=zhangsan,lisi,wangwu #将此文本添加进sudoers文件中 
Host_Alias MAILSVRS=smtp,pop #将此文本添加进sudoers文件中 
Cmmd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum #将此文本添加进sudoers文件中 
OPERATORS MAILSVRS=PKGTOOLS #将此文本添加进sudoers文件中

sudo配置记录的命令部分允许使用通配符"*"、取反符号"!",当需要授权某个目录下的所有命令或取消其中个别命令时特别有用。如,若要授权用户zhangsan可以执行/sbin/日录下除 ifconfig、route 以外的其他所有命令程序,可以执行以下操作:

visudo #将下行文本添加进sudoers文件中 zhangsan localhost=/sbin/*,!/sbin/ifconfg,!/sbin/route

默认情况下,通过 sudo 方式执行的操作并不记录。若要启用 sudo日志记录以备管理员查看,应在/etc/sudoers文件中增加“Defaults logfile”设置。

visudo Defaults logfile ="/ar/log/sudo" #将此文本添加进sudoers文件中

对于已获得授权的用户,通过sudo 方式执行特权命令时,只需要将正常的命令行作为sudo 命令的参数即可。由于特权命令程序通常位于sbin、/usr/sbin 等目录下,普通用户执行时应使用绝对路径。在当前会话过程中,第一次通过 sudo 执行命令时,必须以用户自己的密码(不是 root用户或其他用户的密码)进行验证。此后再次通过 sudo 执行命令时,只要与前一次sudo操作的间隔时间不超过 5min(分),则不再重复验证。

二、系统引导和登录控制

2.1 开关机安全控制

对于服务器主机,其物理环境的安全防护是非常重要的,不仅要保持机箱完好、机柜锁闭,还要严格控制机房的人员进出、硬件设备的现场接触等过程。在开关机安全控制方面,除了要做好物理安全防护以外,还要做好系统本身的一些安全措施。

  1. 调整BIOS引导设置

(1)将第一优先引导设备(First Boot Device)设为当前系统所在磁盘。

(2)禁止从其他设备(如光盘、U盘、网络等)引导系统,对应的项设为“Disabled”。

(3)将 BIOS的安全级别改为“setup”,并设置好管理密码,以防止未授权的修改。

  1. 限制更改GRUB参数

在没有任何限制的情况下,任何人都可以修改GRUB参数,对服务器本身显然是一个大的威胁。为了加强对引导过程的安全控制,可以为GRUB菜单设置一个密码,只有输入正确的密码才被允许修改参数。

为 GRUB 菜单设置的密码建议采用“grub2-mkpasswd-pbkdf2”命令生成,表现为经过PBKDF2算法加密的字符串,安全性更好。生成密码后在/etc/grub.d/00_header配置文件中的末尾,添加root用户,格式为:

set superusers="root"

之后再将用grub2-mkpasswd-pbkdf2命令生成的密码写在用户的下一行,格式为:

passwd_pbkdf2 root 生成的密码

最后使用grub2-mkconfig命令在/boot/grub2/下生成新的grub.cfg配置文件,格式为:

grub2-mkconfig -o /boot/grub2/grub.cfg

输出的信息有:

Generating grub configuration file... 
Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img 
Found linux image: /boot/vmlinuz-0-rescue-b15df1eb8205483f9f70c79709810abc 
Found initrd image: /boot/initramfs-0-rescue-b15df1eb8205483f9f70c79709810abc.img done

通过上述的配置,重新开机进入GRUB菜单时,按E键则需要先输入密码,才能修改参数。

2.2 终端及登录控制

在 Linux 服务器中,默认开启了六个tty终端,允许任何用户进行本地登录。关于本地登录的安全控制,可以从以下几个方面着手:

  1. 禁止root用户登录

在 Linux 系统中,login 程序会读取/etc/securetty文件,以决定允许root 用户从哪些终端(安全终端)登录系统。若要禁止root用户从指定的终端登录,只需从该文件中删除或者注释掉对应的行即可。例如,若要禁止 root 用户从tty5、tty6登录,可以修改/etc/securety文件,将tty5、tty6行注释掉。

  1. 禁止普通用户登录

当服务器正在进行备份或调试等维护工作时,可能不希望再有新的用户登录系统。这时候,只需要在下简单地建立/etc/nologin文件即可。login程序会检査/etc/nologin文件是否存在,如果存在,则拒绝普通用户登录系统(root用户不受限制)。当手动删除/etc/nologin文件或者重新启动主机以后,即可恢复正常。

三、弱口令检测和端口扫描

3.1弱口令检测——John the Ripper

在网络环境中,过于简单的口令是服务器面临的最大风险,对于任何一个承担着安全责任的管理员,及时找出这些弱口令账号是非常必要的,这有助于采取进一步的安全措施。John the Ripper是一款开源的密码破解工具,通过使用John the Ripper,可以检测Linux/UNIX系统用户账号的密码强度。

John the Ripper的官方网站是http://www.openwal.com/iohn/,通过该网站可以获取稳定版源码包,如john-1.8.0.tar.gz。

  1. John the Ripper的下载安装过程
  • 解压john压缩包后,在john压缩包里有一个src目录,进入此目录。
  • 执行make clean linux-x86-64,即可执行编译过程。
  • 编译完成后,run子目录下会生成一个名为john的可执行程序,安装结束。最后直接运行可执行程序即可。

在安装有John the Ripper中,只需执行 run 目录下的 john 程序,将待检测的 shadow 文件作为命令行参数,就可以开始弱口令分析了。

在执行过程中,分析出来的弱口令账号将即时输出,第一列为密码字串,破解出的密码信息自动保存到john.pot 文件中,可以使用John命令结合“--show"选项进行查看(需要指定文件路径)。

3.2 网络扫描——NMAP

NMAP是一个端口扫描l类安全测评工具,被设计为检测众多主机数量的巨大网络,支持ping扫描、多端口检测、OS识别等多种技术。使用 NMAP 定期扫描内部网络,可以找出网络中不可控的应用服务,及时关闭不安全的服务,减小安全风险。在使用之前需要先安装NAMP软件包。

  1. 扫描语法及类型

NAMP命令的使用格式为:

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

其中,扫描目标可以是主机名、IP地址或网络地址等,多个目标以空格分隔;常用的选项有“-p”“-n”,分别用来指定扫描的端口、禁用反向DNS解析(以加快扫描速度);扫描类型决定着检测的方式,也直接影响扫描的结果。

比较常用的几种扫描类型如下:

  • -sS,TCP SYN扫描(半开扫描): 只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。
  • -ST,TCP连接扫描:这是完整的TCP扫描方式,用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。
  • -SF,TCP FIN扫描:开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。
  • -sU,UDP扫描:探测目标主机提供哪些UDP服务,UDP 扫描的速度会比较慢。
  • -SP,ICMP扫描:类似于ping检测,快速判断目标主机是否存活,不做其他扫描。
  • -P0,跳过ping检测:这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描。
  1. 扫描操作示例:

  2. 针对本机进行扫描,检查开放了哪些常用的TCP端口、UDP端口。

在扫描结果中,STATE列若为open则表示端口为开放状态,为filtered表示可能被防火墙过滤,为closed表示端口为关闭状态。

  1. 检查 192.168.10.0/24 网段中有哪些主机提供 FTP 服务。

图中显示192.168.10.101、192.168.10.102和192.168.10.254都提供FTP服务。

  1. 快速检测 192.168.10.0/24 网段中有哪些存活主机(能 ping 通)。

显示192.168.10.1、192.168.10.101、192.168.10.102、192.168.10.254都可以ping通。

  1. 检测 IP 地址位于 192.168.10.100~200 的主机是否开启文件共享服务

显示192.168.10.101和192.168.10.102并没有开启文件共享服务。

标签: php 开发语言

本文转载自: https://blog.csdn.net/m0_64000472/article/details/138455880
版权归原作者 永远的1M2 所有, 如有侵权,请联系我们删除。

“Linux系统安全和应用笔记”的评论:

还没有评论