第3章Linux操作系统攻防实训
“一切皆文件”是Linux的基本思想,包括命令、硬件和软件设备、进程等,对于操作系统内核而言都被视为拥有各自特性或类型的文件。Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获取,并可以任意修改其源代码。正是由于“一切皆文件”和开源这两大特点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行修改和完善,这让Linux吸收了无数程序员的智慧,在发展中不断壮大,已成为目前在服务器应用领域占用率*高的操作系统,也被互联网资源的提供者视为***可靠的操作系统。不过,“**”这一概念在互联网应用中是相对的,即在互联网中不存在**的**,各类攻击行为在Linux系统中仍然存在,只是攻击的方式和难度不同而已。
3.1Linux基本命令的使用
3.1.1预备知识: Linux的字符终端
Linux系统的字符终端窗口为用户提供了一个标准的命令行接口,在字符终端窗口中,会显示一个Shell提示符,通常为“$”。用户可以在提示符后输入带有选项和参数的字符命令,并能够在终端窗口中看到命令的运行结果,此后,将会出现一个新的提示符,标志着新命令行的开始。字符终端窗口中出现的Shell提示符因用户不同而有所差异,其中,普通用户的命令提示符为“$”,**管理员用户的命令提示符为“#”,这两个符号之间所表示的用户身份的差别,在Linux攻防中是非常重要的。因为在Linux用户的提权攻击过程中,当同一用户账户在不同时间段登录系统后,如果在字符终端窗口中提示符从“$”变为“#”,说明提权操作成功。
Linux系统中的命令是区分大小写的。在Linux命令行中,可以使用Tab键来自动补齐命令,即可以只输入命令的前几个字母,然后按Tab键,系统将自动补齐该命令; 如果命令不止一个,则显示所有和输入字符相匹配的命令。按Tab键时,如果系统只找到一个和输入字符相匹配的目录或文件,则自动补齐; 如果没有匹配的内容或有多个相匹配的名称,系统将发出警鸣声,再按一下Tab键将列出所有相匹配的内容,以供用户利用向上或向下的光标键来选择。
Linux可以翻查曾经执行过的历史命令。如果要在一个命令行上输入和执行多条命令,可以使用分号来分隔命令,如“cd /;ls”; 如果要使程序以后台方式执行,只需在要执行的命令后跟上一个“&”符号即可。
3.1.2实验目的和条件
1. 实验目的
通过本实验,使读者掌握以下内容。
(1) Linux命令行的操作方法。
(2) 文件目录类命令的使用方法。
(3) 系统信息类命令的使用方法。
(4) 进程管理类命令的使用方法。
2. 实验条件
本实验需要在一台运行Linux操作系统的计算机上完成,这台计算机既可以是一台物理机,也可以是一台虚拟机(在实验中,如果没有特殊要求,建议使用虚拟机)。本实验使用的Linux操作系统为Red Hat。
3.1.3实验过程
步骤1: 进入实验用的Red Hat操作系统后,在命令行终端���口中可以输入简单的命令,如图31所示。
图31Linux的字符操作界面
在命令行中,先来熟悉一些简单的命令,并了解这些命令的用途。其中,浏览目录类命令主要包括pwd、cd、ls,浏览文件类命令主要包括cat、more、less、head、tail,目录操作类命令主要包括mkdir、rmdir,文件操作类命令主要包括cd、rm、diff、tar、mv、whereis、grep。
步骤2: 在图32中,开始演示浏览目录类命令pwd、cd、ls的使用。其中,“ls la /home/”命令为列出home目录中包含隐藏文件在内的所有文件。其他浏览目录类命令希望读者自己动手进行练习。
图32浏览目录
步骤3: 在图33中,开始演示浏览文件类命令cat、more、less、head、tail的使用。
图33浏览文件
步骤4: 在图34中,开始演示目录操作类命令mkdir、rmdir的使用。
图34目录操作
步骤5: 在图35中,开始演示文件操作类命令cd、rm、diff、tar、mv、whereis、grep的使用。
图35文件操作
在Linux操作系统中,还有以下一些常用的命令。
dmesg: 显示系统诊断信息、操作系统版本号、物理内存大小及其他信息。
df: 查看文件系统的各个分区占用情况。
du: 查看某个目录中的各级子目录使用硬盘空间数。
free: 查看系统内存、虚拟内存的大小及占用情况。
date: 查看和设置当前日期和时间。
cal: 显示指定月份或年份的日历。
clock: 显示系统时钟。
ps: 查看系统进程。
kill: 向进程发送强制终止信号。
killall: 根据进程名发送终止信号。
nice: 指定运行程序优先级。
renice: 根据进程的进程号来改变进程的优先级。
top: 实时监控进程状态。
bg、jobs、fg: 控制进程显示。
3.1.4任务与思考
考虑到部分读者对Linux操作系统的命令行操作不熟悉,本实验主要通过对常用命令的学习,使读者逐渐熟悉Linux的操作环境,并初步掌握一些常用命令的功能和使用方法。
Linux在服务器应用中占有**的优势,目前DNS、DHCP、NAT等大量的互联网基础信息服务都构建在Linux操作系统之上,同时Web、Email、FTP等服务平台也主要选择Linux操作系统。对于网络攻防的学习来说,读者必须通过系统学习来掌握Linux操作系统的相关操作,同时对Linux的工作机制有一个全面深入的认识。其中包括Linux操作系统在进程与线程管理、内存管理、系统管理、设备控制、网络、系统调用等方面形成的特有工作机制,掌握这些工作机制为全面学习Linux操作系统的功能及应用特点是非常有帮助的。
请读者借助各类工具,通过查阅相关文献,并进行实验操作,来掌握与Linux工作机制相关的内容。
3.2Linux用户和组的管理
3.2.1预备知识: Linux用户和组的管理特点
Linux操作系统是一个多用户、多任务的操作系统,允许多个用户同时登录到同一个系统,使用系统资源。为了使所有用户的工作顺利进行,保护每个用户的文件和进程,规范每个用户的权限,需要区分不同的用户,因此产生了用户账户和组群。
用户账户是用户的身份标识,用户通过用户账户可以登录到系统,并且访问已经被授权的资源。系统依据账户来区分属于每个用户的文件、进程、任务,并给每个用户提供特定的工作环境,使每个用户的工作都能各自独立不受干扰地进行。
Linux系统下的用户账户分为普通用户账户和**用户账户(root)两种类型。其中,**用户账户又称为根用户或管理员账户,可以对普通用户和整个系统进行管理。Linux系统下的账户管理具有以下特点。
(1) 组群也称为工作组,是具有相同特性的用户的逻辑集合,使用组群有利于系统管理员按照用户的特性组织和管理用户,提高工作效率。
(2) 在为资源授权时可以把权限赋予某个组群,组群中的成员即可自动获得这种权限。
(3) 一个用户账户至少属于一个用户组,当某一用户账户属于多个组群的成员时,其中某个组群是该用户的主组群(私有组群),其他组群是该用户的附属组群(标准组群)。
(4) 每一个用户都有一个**的身份标识,称为用户ID(UID); 每一个用户组也有一个**的身份标识,称为用户组ID(GID)。其中,root用户的UID为0。
(5) 普通用户的UID可以在创建时由管理员指定,如果不指定,用户的UID默认从500开始顺序编号。
Linux系统下,用户账户文件有以下两个。
(1) /etc/passwd文件: 用户账户信息。
(2) /etc/shadow文件: 用户口令。
Linux系统下,组群文件有以下3个。
(1) /etc/group文件: 组群账户信息。
(2) /etc/gshadow文件: 组群口令、管理员等管理信息。
(3) /etc/login.defs文件: 设置用户账户限制的文件,该文件中的配置对root用户无效。
3.2.2实验目的和条件
1. 实验目的
通过本实验,使读者掌握以下内容。
(1) 用户和组群的配置文件。
(2) Linux下用户的创建、管理和维护。
(3) Linux下组群的创建、管理和维护。
(4) 用户账户管理器的使用方法。
2. 实验条件
本实验中所使用的Linux操作系统为Red Hat,既可以运行在物理机上,也可以运行在虚拟环境中。对于初学者来说,建议在VMware等虚拟机环境中安装Linux操作系统,进行相关的实验。
3.2.3实验过程
步骤1: 使用“cat/etc/passwd”命令查看/etc/passwd文件,如图36所示。
图36查看/etc/passwd文件
需要说明的是,/etc/passwd文件每行使用“:”分隔几个域,真正的密码保存在shadow文件中。
步骤2: 使用“cat/etc/shadow”命令查看/etc/shadow文件,如图37所示。
图37查看/etc/shadow文件
需要说明的是,所有用户对passwd文件均可读取,但只有root用户对shadow文件可读,因此密码存放在shadow文件中更**。
步骤3: 使用“cat/etc/group”命令查看/etc/group文件。用户的组账户信息放在group文件中,任何用户都可以查看且用“:”将几个域分开,如图38所示。
图38查看/etc/group文件
步骤4: 使用“cat/etc/gshadow”命令查看/etc/gshadow文件。gshadow文件用于存放组群的加密口令、组管理员等信息,只有root用户可读,用“:”分割成4个域,如图39所示。
图39查看/etc/gshadow文件
步骤5: 使用“useradd”或“adduser”命令创建新用户,其命令格式为:
useradd [选项] username
例如,创建一个名称为cloud用户,如图310所示。
图310创建新用户
需要说明的是,如果系统中创建的用户名已经存在,将出现如图311所示的提示信息。
图311当要创建的用户在系统中存在时出现的提示信息
“useradd”命令的选项含义。
vc comment: 用户的注释性信息。
vd home_dir: 指定用户的主目录。
ve expire_date: 禁用账号的日期,格式为: YYYYMMDD。
vf inactive_days: 设置账户过期多少天后,用户账户被禁用。
vu UID: 指定用户的UID。
vg initial_group: 用户所属主组群的组群名称或GID。
vG grouplist: 用户所属的附属组群列表。
vm: 如果用户主目录不存在,则创建它。
vM: 不要创建用户主目录。
vn: 不要为用户创建用户私人组群。
vp: 加密的口令。
vr: 创建UID小于500的不带主目录的系统账号。
vs: 指定用户的登录Shell,默认为/bin/bash。
步骤6: 新建用户user1,UID为510,指定其所属的私有组为cloud(cloud组的标志符为1001),用户的主目录为/home/user1,用户的Shell为/bin/bash,用户的密码为123456,账户永不过期,如图312所示。
图312新建用户
步骤7: 新建了用户后,要为用户设置口令,未设置口令的用户不能登录系统,使用user1来登录系统(logout注销后,再使用user1用户登录),如图313所示。
图313为新建用户设置口令
步骤8: 请读者重新使用root账户登录,来指定和修改user1用户账户口令: passwd,如图314所示。
图314指定和修改user1用户账户口令
需要说明的是,**用户root可以为自己和其他用户设置口令,而普通用户只能为自己设置口令。
步骤9: 创建组群命令“groupadd”或“addgroup”。现在创建一个组群testgroup,如图315所示。
图315创建组群
步骤10: 使用“tail l /etc/group”命令查看新建的组群信息,如图316所示。
图316查看新建的组群信息
步骤11: 修改组群、gid、组群名称,如图317所示。
图317修改组群、gid、组群名称