百度网盘链接:https://pan.baidu.com/s/1BEBgtu_fWJI3Z26V-cGkOg?pwd=1kom
提取码:1kom
第1章 Linux 安全渗透简介
1.1 Linux 操作系统的基础知识
-
Linux 的起源和发展:了解 Linux 操作系统的起源、发展和主要的发行版,如Linux 内核的诞生、GNU项目的贡献以及常见的 Linux 发行版如Ubuntu、Debian、CentOS 等。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
严格来讲,Linux操作系统指的是“linux内核+各种软件”,Linux这个词只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。
-
Linux 文件系统:熟悉 Linux 文件系统的层次结构和常见的目录结构:
-
根目录(/)
-
用户目录(/home)
-
系统配置目录(/etc)
-
Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。
-
常用的文件系统有以下几种EXT3、swap、vfat、nfs等。
-
深入理解
-
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
-
Windows和Linux对比
1、Windows和Linux的文件权限
在Windows系统中,用户分为两类:计算机管理员和受限用户。Windows常常设置为管理员身份,结果大家都可以随意安装和修改系统软件,导致病毒软件防不胜防,导致Windows的安全性相对较差。
在Linux中,用户分为4类:root(超级用户)、普通用户、同一组用户和其他用户。root用户拥有最高权限,可以对计算机系统进行任何操作。但root用户一般只在对系统进行维护时,如添加新用户、安装应用程序时,才进行登录,一般都是以普通用户的身份进行登录,普通用户不能修改系统文件夹下的文件,因此病毒软件想修改系统程序的可能性就大大降低了,这样就增加了系统的安全性和可靠性。
2、Windows和Linux的目录结构
在Windows下,整个硬盘被分成几个区。Linux也有分区的概念,但它是将所有系统安装在一棵树上,即从树根"/"开始。Linux中有一些重要的系统目录,它们都有特定的用途。
/home存放系统中登录用户的主目录
/bin存放系统中的可执行文件
/etc存放系统中大部分配置文件
/root超级用户的主目录
/var存放内容经常变动的文件
/usr存放与系统的用户直接相关的程序和文件
-
-
- Linux文件系统根目录下的主要目录介绍
/bin:保存系统命令,如ls、cd、pwd等常用命令
/dev:存放设备文件,特殊文件保存目录(不可以随意修改)
/home:用户目录,存放普通用户相关文件的用户,是我们常用的目录
/lost+found:存放临时文件。此文件夹大多数情况下都是空的,当突然停电或非正常关机后,有些文件就临时存放在这里。
/mnt:缺省挂载点,挂载U盘、移动硬盘目录(常用)
/sbin:用来存放管理员才能使用的命令,即具有一定权限才可以使用的命令
/proc:进程,该目录不能直接操作,其保存的是内存的过载点
/srv: 系统启动服务时可以访问的数据库目录
/tmp:临时目录
/var:系统相关文档内容目录,存放经常被修改的文件,包括各种日志、数据文件。
/boot:存放引导的相关文件,保存系统的启动数据(不可随意操作)
/etc:用来存放配置相关文件
/lib:存放系统动态链接共享库,几乎所有的应用程序都会用到该目录下的共享库。
/media:存放挂载和自动挂载设备的标准位置。如远程文件系统和可移动介质。
/opt:存放第三方软件。第三方软件在安装时默认会找到这个目录,所以如果你没有安装此类软件时,它是空的,但如果你一旦把它删除,以后再安装此类软件可能会碰到麻烦。
/root:存放root用户(即管理员用户)相关文件的目录
/sys:该目录不能直接操作,存放类似于/proc的文件系统,在Linux2.6内核中最新出现,包含的文件用于获得硬件状态并反映内核看到的系统设备树。它使用了/proc中的很多帮助。
/selinux:selinux是一种基于域-类型模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后还有一个相应的安全策略。
/usr:系统软件资源目录,存放默认安装文件的目录,存放用户的应用程序和文件
/usr/bin:众多的应用程序
/usr/sbin:超级用户的一些管理程序
/usr/include:Linux下开发和编译应用程序所需要的头文件
/usr/lib:常用的动态链接库和软件包的配置文件
/usr/src:源代码,Linux内核的源代码就放在这里
/usr/local/bin:本地增加的命令
/usr/local/lib:本地增加的库
- 用户和权限管理:了解 Linux 中的用户和用户组的概念,以及权限管理和访问控制,包括用户的创建、删除、权限的分配和修改等。
Linux用户管理
用户是Linux系统工作中重要的一环,用户管理包括用户与组账号的管理。
账号管理是指账号的新增、删除和修改、账号规划以及权限的授予等问题。
在Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限
Linux用户权限
Linux下有两种用户:超级用户(root)、普通用户。
Linux系统中的root账号通常用于系统的维护和管理,它对Linux操作系统的所有部分具有不受限制的访问权限。在大多数版本的Linux中,都不推荐直接使用root账号登录系统。
Linux普通用户在系统下的操作是受限的。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
useradd #建立用户账户
-c:加上备注文字,备注文字保存在passwd的备注栏中。
-d:指定用户登入时的启始目录。
-D:变更预设值。
-e:指定账号的有效期限,缺省表示永久有效。
-f:指定在密码过期后多少天即关闭该账号。
-g:指定用户所属的起始群组。
-G:指定用户所属的附加群组。
-m:自动建立用户的登入目录。
-M:不要自动建立用户的登入目录。
-n:取消建立以用户名称为名的群组。
-r:建立系统账号。
-s:指定用户登入后所使用的shell。
-u:指定用户ID号
usermod #修改用户账户
-c <备注> 修改用户帐号的备注文字。
-d <登入目录> 修改用户登入时的目录。
-e <有效期限> 修改帐号的有效期限。
-f <缓冲天数> 修改在密码过期后多少天即关闭该帐号。
-g <群组> 修改用户所属的群组。
-G <群组> 修改用户所属的扩展、附加群组。
-l <帐号名称> 修改用户帐号名称。
-L 锁定用户密码,使密码无效。
-s <shell> 修改用户登入后所使用的shell。
-u <uid> 修改用户ID。
-U 解除密码锁定。
userdel #删除用户账户
groupadd #建立用户组
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
groupdel #删除用户组
groupmod #更改组群识别码或名称
-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n 新用户组 将用户组的名字改为新名字
gpasswd #管理组群
-a 添加用户到组。
-d 从组删除用户。
-A 指定管理员。
-M 指定组成员和 -A 的用途差不多。
-r 删除密码。
-R 限制用户登入组,只有组中的成员才可以用 newgrp 加入该组。
- 命令行界面:掌握 Linux 命令行界面的基本操作和常用命令,如文件和目录的操作(ls、cd、mkdir、rm 等)、文件权限管理(chmod、chown 等)、文本编辑器(vi、nano)的使用等。
-
目录操作命令(增、删、改、查)
-
切换目录:cd
绝对路径:绝对路径一定是由根目录 / 开始写起。例如,使用绝对路径的表示方式指明 bin 文件所在的位置,该路径应写为 /usr/bin 相对路径:和绝对路径不同,相对路径不是从根目录 / 开始写起,而是从当前所在的工作目录开始写起。例如cd .. (.表示当前目录、..表示上一级目录)
命令格式:cd 目录名 cd / #切换到根目录 cd ~ #切换到主目录 cd - #切换到上次访问的目录 cd .. #返回上一级目录
-
查看目录:ls 和 pwd
pwd 查看当前工作路径(绝对路径)
ls 查看当前目录下的目录和文件 命令格式:ls [-选项] 目录名 选项: -a:列出当前目录所有文件和目录(包括隐藏文件,以 .开头的为隐藏文件) -l:以列表的形式显示文件和目录 示例: ls -a 查看该目录下所有文件或目录 ls -l(简写ll) 以列表形式查看文件或目录
-
创建目录【增】 mkdir
命令格式:mkdir [-选项] 目录名 选项: -p:递归创建目录。 示例: mkdir data/ 在当前目录下创建一个名为aaa的目录 mkdir -p hadoop/data/ 在当前目录下创建hadoop一并创建子目录data mkdir /tmp/bigdata 在指定目录tmp下创建一个名为bigdata的目录
-
删除目录或文件【删】rm和rmdir
命令格式:rmdir 目录名 (只能删除空目录) 示例: rmdir bigdata #删除bigdata这个目录(bigdata为空的目录)
命令格式:rm [-rf] 目录名或文件名 选项: -f:不提示,强制删除文件或目录; -i:删除已有文件或目录之前先询问用户; -r,-R:递归删除,将指定目录下的所有文件与子目录一并删除; -v:显示指令的详细执行过程。 示例: rm -rf data/ #删除当前目录下data这个目录 rm -rf * #删除当前目录下所有文件和目录,慎用~ rm -rf /* #【自杀命令!慎用!慎用!慎用!】将根目录下的所有文件全部删除 注意:rm默认删除文件,使用-r选项可以删除目录,也可以删除其他文件或压缩包,为了方便大家的记忆,无论删除任何目录或文件,都直接使用 rm -rf 目录/文件/压缩包。
-
目录修改【改】mv 和 cp
-
目录重命名
命令格式:mv 旧目录名 新目录名 示例: mv hadoop/ hadoop01/ #将hadoop名改为hadoop01 注意:mv的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行重命名的操作
-
剪切(移动)目录
命令:mv 目录名称 目录的新位置 示例: mv data Data/ # 将data这个目录移动到Data这个目录下 注意:mv语法不仅可以对目录进行剪切操作,对文件和压缩包等都可执行剪切操作
-
拷贝(复制)目录或文件
命令格式:cp [-选项] 目录名称 目录拷贝的目标位置 选项: -r:表示递归复制 示例: cp -r apps/ Data/ #将apps目录复制到Data目录下 注意:cp命令在复制目录是一定加上选项参数“-r”,cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不用写-r递归。
-
-
搜索目录【查】find
命令格式:find 目录 参数 文件名称或者目录名 示例: find /tmp -name 'a*' 查找/tmp目录下的所有以a开头的目录或文件。
-
-
文件操作命令【增,删,改,查】
-
文件操作新建文件【增】touch
命令格式:touch 文件名 示例: touch a.txt #在当前目录创建一个名为aa.txt的文件 touch b.txt c.txt d.txt #在当前目录下创建多个文件b.txt、c.txt、d.txt 注意:使用vi 命令也可以创建新文件
-
删除文件 【删】 rm
命令格式:rm -rf 文件名 示例: rm -rf /tmp/a.txt 删除/tmp目录下的a.txt文件
-
修改文件内容【改】 vi或vim
命令格式:vi 文件名 示例: vi a.txt 进入a.txt进行编辑
-
文件移动或重命名:mv
命令格式:mv 文件名 新文件名 示例: mv hello.txt hi.txt #将当前目录下的hello.txt重命名为hi.txt mv /tmp/a.txt /tmp/b.txt #将/tmp目录下的a.txt重命名为b.txt
-
文件的复制:cp
命令格式:cp 原文件名 指定目录 示例: cp a.txt hadoop/ #将当前目录下的a.txt复制到hadoop目录下 cp a.txt hadoop/b.txt #将当前目录下的a.txt复制到hadoop目录下重命名为b.txt 注意:可以复制的时候重命名
-
查看文件内容【查】
文件的查看命令:cat、more、less、head、tail
cat:查看文件内容,看最后一屏 命令格式:cat [选项] 文件名 选项: -n :显示行号 示例: cat /etc/sudo.conf #使用cat查看/etc/sudo.conf文件,只能显示最后一屏内容 more:百分比显示 示例: more /etc/sudo.conf #使用more查看/etc/sudo.conf文件,可以显示百分比,回车可以向下一行,空格可以向下一页,q可以退出查看 less:翻页查看 示例: less /etc/sudo.conf #使用less查看/etc/sudo.conf文件,可以使用键盘上的PgUp和PgDn向上和向下翻页,q结束查看 head:默认查看文件前十行内容 示例: head -5 /etc/sudo.conf #使用head -5 查看/etc/sudo.conf文件的前5行内容 tail:默认查看文件后十行内容 示例: tail -5 /etc/sudo.conf #使用tail -5 查看/etc/sudo.conf文件的后5行内容
-
创建链接文件:ln
命令格式:ln [-选项] 源文件 目标文件 选项: -s :创建软连接(相当于快捷键) 示例: ln data.txt d #创建data.txt文件的硬链接d 示例: ln -s data.txt da #创建data.txt的软连接文件da 注意:加-s创建软链接,不加-s则创建硬链接,软链接前面是 l 开头的(link),而硬链接是 - 开头,表示文件;软链接类似与 windows 的快捷方式,有一个明显的箭头指向,而指向的是源文件;硬链接文件除了文件名与源文件不一样,其余所有信息都是一样的。类似于 cp 复制操作。但是又和复制不一样,硬链接可以同步更新。
-
-
文件权限管理
-
读、写、执行
每个文件的权限针对三类对象进行定义:
文件和文件目录的所有者:u—User
文件和文件目录的所有者所在的组的用户:g—Group
其它用户(除所有者和所有组的用户):o—Others
所有用户(用 a 表示)
每个文件针对每类访问者定义了三种主要权限:
-
读(由 r 表示)
-
写(或修改,用 w 表示)
-
执行(由 x 表示)
-
rwx r-- r–
-
421 400 400
-
7 4 4
-
-
文件类型
d:文件夹 -:普通文件 l:软链接(类似Windows的快捷方式) b:块设备文件(例如硬盘、光驱等) p:管道文件 c:字符设备文件(例如屏幕等串口设备) s:套接口文件
-
基本权限
读(r/4): Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限 写(w/2): Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限 执行(x/1): execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限 “—”表示不具有该项权限
-
文件权限值的字符表示方法
Linux表示 说明 r- - 只读 -w- 仅可写 - -x 仅可执行 rw- 可读可写 r-x 可写可执行 rwx 可读可写可执行 - - - 无权限 -
文件权限值的8进制数值表示方法
权限符号 八进制 二进制 r- - 4 100 -w- 2 010 - -x 1 001 rw- 6 110 r-x 5 101 -wx 3 011 rwx 7 111 - - - 0 000
-
-
nano文本编辑器
-
nano是一个字符终端的文本编辑器,可以打开指定文件进行编辑
语法:nano [选项] [[+行,列] 文件名] -h, -? --help 显示此信息 -A --smarthome 启用智能 HOME 键 -B --backup 储存既有文件的备份 -U --quickblank 状态行快速闪动 -V --version 显示版本资讯并离开 -W --wordbounds 更正确地侦测单字边界
-
-
vi编辑器
-
vi 命令的使用
命令格式: vi 文件名 示例: vi a.txt 注意:直接输入vi,可以查看vi的版本等信息,还可以直接编辑,但是退出时需要加上文件名,例如 :wq a.txt,将输入的内容保存到a.txt文件中。
-
vi编辑器的三种模式
vi 编辑器有三种模式:命令模式、插入(编辑)模式、底行模式
-
命令模式
直接用命令(vi 文件名)打开一个文件的话,默认是在命令模式下。
(base) [root@defense ~]# vi test.txt
-
插入(编辑)模式
在命令模式下输入a、A、i、I、o、O中任何一个字符即可进入插入模式,在此模式下才可以对文件进行编辑,输入内容。在此模式下按 ESC键 退出到命令模式
a、A、i、I、o、O字符作用如下: a:在当前光标下一位开始编辑 A:在当前光标所在行行尾开始编辑 i:在当前光标开始编辑 I:在当前光标所在行行首开始编辑 o:在当前光标的下一行开始编辑 O:在当前光标的上一行开始编辑
-
底行模式
在命令模式下,通过输入 :(英文冒号)即可切换到底行模式,底行模式下可以做一些保存,字符替换等操作,底行模式下命令以回车结束,退出或者返回命令模式,或者**双击Esc**返回命令模式。
常用的底行模式下的命令如下:: set nu 显示行号 :set nonu 取消显示行号 :q 只退出,不保存 :wq 保存退出 :q! 强制退出 :wq! 强制保存退出 :%s/old/new 将old替换成new :/string 查找字符串 :n 定位到n行(n指数字)
-
-
-
包管理器:熟悉 Linux 发行版的包管理系统,如apt、yum、dnf 等,以及常用的包管理命令,如软件的安装、更新、卸载等。
-
pm包 - (Fedora, Redhat及类似系统)
rpm -ivh package.rpm 安装一个rpm包 rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告 rpm -U package.rpm 更新一个rpm包但不改变其配置文件 rpm -F package.rpm 更新一个确定已经安装的rpm包 rpm -e package_name.rpm 删除一个rpm包 rpm -qa 显示系统中所有已经安装的rpm包 rpm -qa | grep httpd 显示所有名称中包含 “httpd” 字样的rpm包 rpm -qi package_name 获取一个已安装包的特殊信息 rpm -qg “System Environment/Daemons” 显示一个组件的rpm包 rpm -ql package_name 显示一个已经安装的rpm包提供的文件列表 rpm -qc package_name 显示一个已经安装的rpm包提供的配置文件列表 rpm -q package_name --whatrequires 显示与一个rpm包存在依赖关系的列表 rpm -q package_name --whatprovides 显示一个rpm包所占的体积 rpm -q package_name --scripts 显示在安装/删除期间所执行的脚本l rpm -q package_name --changelog 显示一个rpm包的修改历史 rpm -qf /etc/httpd/conf/httpd.conf 确认所给的文件由哪个rpm包所提供 rpm -qp package.rpm -l 显示由一个尚未安装的rpm包提供的文件列表 rpm --import /media/cdrom/RPM-GPG-KEY 导入公钥数字证书 rpm --checksig package.rpm 确认一个rpm包的完整性 rpm -qa gpg-pubkey 确认已安装的所有rpm包的完整性 rpm -V package_name 检查文件尺寸、 许可、类型、所有者、群组、MD5检查以及最后修改时间 rpm -Va 检查系统中所有已安装的rpm包- 小心使用 rpm -Vp package.rpm 确认一个rpm包还未安装 rpm2cpio package.rpm | cpio --extract --make-directories bin 从一个rpm包运行可执行文件 rpm -ivh /usr/src/redhat/RPMS/arch/package.rpm 从一个rpm源码安装一个构建好的包 rpmbuild --rebuild package_name.src.rpm 从一个rpm源码构建一个 rpm 包
-
yum 软件包升级器 - (Fedora, RedHat及类似系统)
yum install package_name 下载并安装一个rpm包 yum localinstall package_name.rpm 将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关系 yum update package_name.rpm 更新当前系统中所有安装的rpm包 yum update package_name 更新一个rpm包 yum remove package_name 删除一个rpm包 yum list 列出当前系统中安装的所有包 yum search package_name 在rpm仓库中搜寻软件包 yum clean packages 清理rpm缓存删除下载的包 yum clean headers 删除所有头文件 yum clean all 删除所有缓存的包和头文件
-
deb 包 (Debian, Ubuntu 以及类似系统)
dpkg -i package.deb 安装/更新一个 deb 包 dpkg -r package_name 从系统删除一个 deb 包 dpkg -l 显示系统中所有已经安装的 deb 包 dpkg -l | grep httpd 显示所有名称中包含 “httpd” 字样的deb包 dpkg -s package_name 获得已经安装在系统中一个特殊包的信息 dpkg -L package_name 显示系统中已经安装的一个deb包所提供的文件列表 dpkg --contents package.deb 显示尚未安装的一个包所提供的文件列表 dpkg -S /bin/ping 确认所给的文件由哪个deb包提供
-
apt 软件工具 (Debian, Ubuntu 以及类似系统)
apt-get install package_name 安装/更新一个 deb 包 apt-cdrom install package_name 从光盘安装/更新一个 deb 包 apt-get update 升级列表中的软件包 apt-get upgrade 升级所有已安装的软件 apt-get remove package_name 从系统删除一个deb包 apt-get check 确认依赖的软件仓库正确 apt-get clean 从下载的软件包中清理缓存 apt-cache search searched-package 返回包含所要搜索字符串的软件包名称
-
DNF(Dandified Yum)是新一代的RPM软件包管理器
# 查看版本 dnf –version #查看系统中可用的 DNF 软件库 dnf repolist #查看系统中可用和不可用的所有的 DNF 软件库 dnf repolist all #列出系统中所有 RPM 包 dnf list #列出所有安装了的 RPM 包 dnf list installed #搜索软件库中的 RPM 包 dnf search git #查看软件包详情 dnf info git #安装软件包 dnf install git #升级软件包 dnf update git #检查系统软件包的更新 dnf check-update #升级所有软件包 dnf update #删除软件包 dnf remove git #删除无用孤立的软件包 #用处:当没有软件再依赖它们时,某一些用于解决特定软件依赖的软件包将会变得没有存在的意义,该命令就是用来自动移除这些没用的孤立软件包。 dnf autoremove #删除缓存的无用软件包 dnf clean all #获取有关某条命令的使用帮助 dnf help clean #查看 DNF 命令的执行历史 dnf history
-
-
进程管理和系统监控:了解 Linux 中的进程管理和系统监控工具,如ps、top、htop 等,用于查看和管理运行的进程、系统资源的使用情况等。
-
网络配置和管理:熟悉 Linux 网络配置和管理,包括网络接口的设置、IP 地址的配置、网络服务的启动和停止等。
-
Shell 脚本编程:掌握 Shell 脚本编程的基础知识,能够编写简单的脚本来实现自动化任务和批处理操作。
1.2命令行界面的基础知识
- 命令提示符(Prompt):命令行界面通常显示一个特殊字符作为命令提示符,表示用户可以输入命令
了。常见的提示符包括 “$”、“#” 或用户名等。
- 命令和参数:在命令行中,可以输入命令和相关参数来执行各种操作。命令是要执行的动作,而参数则
提供了命令所需的额外信息。命令和参数之间通常使用空格分隔。
- 命令的语法:每个命令都有自己的语法规则,包括命令本身和可选或必需的参数。要正确使用命令,需
要熟悉该命令的语法,并按照正确的格式输入命令和参数。
- 文件和目录路径:在命令行界面中,文件和目录使用路径表示。绝对路径是从根目录()开始的完整
路径,而相对路径是相对于当前工作目录的路径。
- 命令补全:命令行界面通常提供命令补全功能,可以通过按下 Tab 键来自动补全命令或文件名。这可
以帮助减少输入错误和提高效率。
- 历史记录:命令行界面会保存执行过的命令的历史记录,我们可以使用向上和向下箭头键浏览历史记
录,并重新执行之前执行过的命令。
- 管道和重定向:使用管道符号(|)可以将一个命令的输出作为另一个命令的输入,实现命令之间的数
据传输。重定向符号(>、>>、<)允许将命令的输出重定向到文件或从文件中获取输入。
- 帮助文档:大多数命令都提供了帮助文档,可以使用命令后面加上 --help 或者 -h 参数来查看命令的帮
助信息,了解命令的使用方式和可用选项。
1.3 Kali Linux 的介绍
1.3.1 什么是 Kali Linux
Kali Linux 是一个基于 Debian Linux 操作系统的开源渗透测试和安全评估工具集。它是由 Offensive
Security 团队维护和开发的,其中包含了一系列的渗透测试工具和安全评估工具。Kali Linux 旨在提供一个
完整的渗透测试平台,方便安全专业人员、渗透测试人员、黑客和安全研究人员等使用。
Kali Linux 拥有一个庞大的社区,其中有很多开发者和用户为 Kali Linux 的发展做出了重要的贡献。Kali
Linux 的代码是开源的,用户可以通过 GitHub [ https://github.com/offensive-security/kali-linux-2021.2]
获得完整的源代码和文档。
1.3.2 什么是Offsec
Offensive Security(Offsec)是一个安全培训和咨询公司,致力于提供高质量的渗透测试和安全培训课程。
Offsec 在安全行业拥有广泛的声誉,是渗透测试和信息安全领域的权威之一。
Kali Linux 是 Offensive Security 团队开发和维护的一个基于 Debian 的 Linux 发行版,它主要用于渗透测试
和安全评估。Kali Linux 包含了大量的渗透测试工具和安全评估工具,使得安全专业人员、渗透测试人员、
黑客和安全研究人员等能够方便地进行渗透测试和安全评估工作。
因此,Offensive Security 公司和 Kali Linux 有着密切的关系。Offensive Security 团队维护和开发 Kali
Linux,并在其培训和咨询课程中广泛使用该平台进行演示和实践。同时,Kali Linux 的使用者也可以通过
Offensive Security 公司的培训和咨询课程来获得更深入的知识和技能。
1.4 Kali Linux 的下载与安装
kali推荐的下载方式有两种,分别为:
-
ISO镜像【Installer Images】
-
虚拟机镜像【Vitural Machines】
本次课程使用的是虚拟机镜像,下载完后文件名为【kali-linux-2023.1-vmware-amd64.7z】,大小为:
2.72GB,解压后大小为14.3GB。
-
硬件要求(至少>=)
-
1 GHz x86 processor
-
1 GB RAM (system memory)
-
20 GB of hard-drive space
-
CD-DVD drive / USB boot support
-
1.4.1安装Kali Linux至VMware Workstation
- 下载镜像文件:获取卡利 |Kali Linux
- 打开vmware首页,创建新的虚拟机
- 选择”自定义“ 选择 ”下一步“
-
选择“下一步”
-
选择 “安装程序光盘映像文件” 通过浏览目录选择刚刚下载的镜像文件,然后”下一步“
- 选择“Linux”,版本随意,然后点击 “下一步”
- 给虚拟机起个名字(如kali2023),点击“浏览”选择一个文件夹来安装kali(位置为自定义,尽量不要安装到c盘),点击”下一步“
- 处理器数量和处理器内核数量、虚拟机内存 按照需求自定义,后期可以更改
- 选择”NET“,”下一步“
- 选择 LSI Logic,”下一步“
- 选择”SCSI“,”下一步“
- 选择”创建新虚拟磁盘 “ ,”下一步“
- 选择 ”将虚拟磁盘存储为多个文件“,最大磁盘大小自定义,”下一步“
- 点击”下一步“
- 点击”完成“
- 开启虚拟机进行查看
- 进入此界面后鼠标失效,直接按键盘 ”Enter“,”Ctrl+Alt“同时按恢复鼠标
- 可选择”简体中文“,也可选择”English“,点击”安装Toos“
- 选择”中国“
- 选择”汉语“
- 稍等片刻
- 设置主机名
- 域名可以不填
- 新用户全名随意填写
- 用户名随意
- 密码随意,点击 ”显示明文密码“ 可以看到设置的密码
- 选择”使用整个磁盘“
- 点击”继续“
- 点击”将所有文件放在同一个分区中“
- 点击”结束分区设定并将修改写入磁盘“
- 选择”是“
- 稍等一小会
- 可以全选也可以选择部分,但第二项”Xfce“必须要选择
- 稍等一小会儿
- 选择”是“
- 选择”/dev/sda“
- 安装完成
- 登录自己设置的用户名和密码
1.4.2 安装WMware Tools
VMware Tools简介
是VMware虚拟机中自带的一种增强工具。它是VMware提供的增强虚拟显卡和硬盘性能,以及同步虚拟机与主机时钟的驱动程序。只有在VMware虚拟机中安装好VMware Tools工具,才能实现主机与虚拟机之间的文件共享,同时可支持自由拖拽的功能,鼠标也可在虚拟机与主机之间自由移动(不用再按Ctrl+Alt)。
自 Kali Linux 2021.3 以来,VMware Tools已预安装在实时映像中。open-vm-tools``open-vm-tools-desktop
步骤如下:
- 打开虚拟机,在VMware Workstation的菜单中选择“VM” -> “安装VMware Tools”。
- 在 kali 系统中打开终端执行以下命令
sudo vmware-uninstall-tools.pl
sudo apt-get remove open-vm-tools
sudo apt-get remove --auto-remove open-vm-tools
sudo apt-get purge open-vm-tools
sudo apt-get purge --auto-remove open-vm-tools
git clone https://github.com/rasa/vmware-tools-patches.git
reboot 重启虚拟机
sudo apt-get install open-vm-tools
sudo apt-get install open-vm-tools-desktop
VMware Tools安装完成
1.5 Kali更新与升级
1.5.1 换源
登录
-
用户名:kali
-
密码:kal
- 换源
-
编辑
/etc/apt/sources.list
软件源配置文件(告诉系统从哪里下载软件包)命令如下:
vi /etc/apt/sources.list
#开头表示注释,生效的内容为第二行,含义为:
从http.kali.org下载Kali Linux软件包,其中包括main、contrib、non-free和non-free-firmware 组件
因为国内访问http.kali.org网速较慢,故需要将软件包的下载地址修改至国内网站:
具体操作如下:
-
打开终端并输入以下命令以备份原始源列表:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
-
打开源列表文件:
sudo vim /etc/apt/sources.list
-
将以下行完全替换文件内容:
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
即,将原来的kali官方源注释掉,然后向其中加入源,我这里加的是阿里云源
- 保存并关闭文件。
kali官方源
deb http://http.kali.org/ moto main non-free contrib
deb-src http://http.kali.org/ moto main non-free contrib
deb http://security.kali.org/ moto/updates main contrib non-free
deb-src http://security.kali.org/ moto/updates main contrib non-free
中科大kali源
deb http://mirrors.ustc.edu.cn/kali kali main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali main non-free contrib
deb http://mirrors.ustc.edu.cn/kali-security kali/updates main contrib non-free
新加坡kali源
deb http://mirror.nus.edu.sg/kali/kali/ kali main non-free contrib
deb-src http://mirror.nus.edu.sg/kali/kali/ kali main non-free contrib
deb http://security.kali.org/kali-security kali/updates main contrib non-free
deb http://mirror.nus.edu.sg/kali/kali-security kali/updates main contrib non-free
deb-src http://mirror.nus.edu.sg/kali/kali-security kali/updates main contrib non-free
163 Kali源
deb http://mirrors.163.com/debian wheezy main non-free contrib
deb-src http://mirrors.163.com/debian wheezy main non-free contrib
deb http://mirrors.163.com/debian wheezy-proposed-updates main non-free contrib
deb-src http://mirrors.163.com/debian wheezy-proposed-updates main non-free contrib
deb-src http://mirrors.163.com/debian-security wheezy/updates main non-free contrib
deb http://mirrors.163.com/debian-security wheezy/updates main non-free contrib
阿里云kali源
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
中科大
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
清华大学
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
注意:其中有些源可能用不了,选择可用的添加即可
1.5.2 Kali更新
-
更新Kali软件包清单 在终端中输入以下命令来更新Kali的软件包清单:
sudo apt-get update
-
按需升级已安装的软件包 用以下命令升级已经安装的软件包:
sudo apt-get upgrade
此时,系统会列出将被升级的软件包,并要求你进行确认,输入Y按回车后进行更新。
-
整体升级Kali系统 对整个Kali系统进行升级,可以输入以下命令:
sudo apt-get dist-upgrade
此时系统会列出需要升级的软件包,你需要输入Y进行确认后,系统将开始整体升级。
-
升级Kali系统内核要升级Kali的Linux内核版本,可以使用以下命令:
sudo apt-get install linux-image-$(uname -r|sed 's,[^-]*-[^-]*-,,') linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,')
-
使用命令
apt-get clean
清理,再用命令reboot
重启虚拟机
查看系统版本(若干命令)
- 查看内核版本号
uname -r
>> 6.1.0-kali5-amd64
- 包含操作系统标识数据的文件
cat /etc/os-release
>>
PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
VERSION="2023.1"
VERSION_ID="2023.1"
VERSION_CODENAME="kali-rolling"
ID=kali
ID_LIKE=debian
HOME_URL="https://www.kali.org/"
SUPPORT_URL="https://forums.kali.org/"
BUG_REPORT_URL="https://bugs.kali.org/"
ANSI_COLOR="1;31"
- 查看 Linux 发行版操作系统的具体版本
lsb_release -a
>>
No LSB modules are available.
Distributor ID: Kali
Description: Kali GNU/Linux Rolling
Release: 2023.1
Codename: kali-rolling
- 显示系统的主机名、操作系统版本和架构,以及其他相关信息
hostnamectl
>>
Static hostname: kali
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: 551962710fa64f83ba27f6f73428c0d9
Boot ID: eb600149bfa24e4aacfec87fe7ca140e
Virtualization: vmware
Operating System: Kali GNU/Linux Rolling
Kernel: Linux 6.1.0-kali5-amd64
Architecture: x86-64
Hardware Vendor: VMware, Inc.
Hardware Model: VMware Virtual Platform
Firmware Version: 6.00
根据上述输出信息,正在运行 Kali GNU/Linux Rolling 版本,版本号为 2023.1,发行代号为 kali-rolling。这表明正在使用最新版本的 Kali Linux,并且处于滚动更新的状态,意味着系统会持续更新并添加新的功能和补丁。Kali Linux Rolling 是一个持续更新的版本,提供了最新的渗透测试工具和安全评估工具,以确保能够使用最新的技术进行渗透测试和安全研究。
- 显示当前系统的发行版信息和版本号
cat /etc/issue
>>
Kali GNU/Linux Rolling \n \l
1.6 Kali Linux 默认的服务
(1)apache2
- 简介
Apache2 是 Apache HTTP Server 的第二个主要版本,也被称为 Apache 2.x。它是 Apache Software Foundation 开发的一种用于提供 Web 服务的开源软件。
与早期的 Apache 版本相比,Apache2 在性能、安全性和可扩展性方面有了很大的改进。它支持多线处理请求,可以处理大量的并发连接,同时还提供了许多模块和功能来增强服务器的能力。
Apache2 在许多操作系统上都可用,并且被广泛用作 Web 服务器。它的安装和配置相对简单,并且有丰富的文档和社区支持。
使用 Apache2,您可以轻松地托管网站、提供静态和动态内容、支持各种 Web 技术(如 PHP、Python 和 Ruby),以及配置许多其他服务器功能,如虚拟主机、SSL 加密、反向代理等。
总的来说,Apache2 是一种强大而受欢迎的 Web 服务器软件,适用于各种规模的网站和应用程序。
- 服务启动
service apache2 start
- 服务状态查看
service apache2 status
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; disabled; preset: disabled)
Active: active (running) since Thu 2023-06-08 06:08:00 EDT; 7s ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 7536 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 7553 (apache2)
Tasks: 6 (limit: 2261)
Memory: 19.4M
CPU: 91ms
CGroup: /system.slice/apache2.service
├─7553 /usr/sbin/apache2 -k start
├─7555 /usr/sbin/apache2 -k start
├─7556 /usr/sbin/apache2 -k start
├─7557 /usr/sbin/apache2 -k start
├─7558 /usr/sbin/apache2 -k start
└─7559 /usr/sbin/apache2 -k start6月 08 06:08:00 kali systemd[1]: Starting apache2.service - The Apache HTTP Server…
6月 08 06:08:00 kali apachectl[7552]: AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Set the ‘ServerName’ directive globally to suppress this message
6月 08 06:08:00 kali systemd[1]: Started apache2.service - The Apache HTTP Server.
按q退出
通过使用主机访问Kali虚拟机IP地址显示如上图所示,即证明服务启动成功。
(2)SSH (Secure Shell)
SSH (Secure Shell) 是一种网络协议和加密技术,用于安全地远程登录到计算机或服务器,并在网络上进行加密的数据通信。
使用 SSH,您可以通过一个安全的通道在本地计算机和远程计算机之间进行加密的通信。这种加密通道可以防止第三方窃听或篡改数据,并提供了身份验证机制以确保连接的安全性。
SSH 是通过客户端和服务器之间的交互实现的。当您使用 SSH 客户端连接到远程服务器时,客户端会与服务器进行身份验证,然后建立一个加密的通信通道。一旦连接建立,您可以在终端中执行命令、传输文件或执行其他操作,就像在本地计算机上一样。
SSH 还支持其他功能,如端口转发和代理设置,这使得它不仅可以用于远程登录,还可以用于安全地访问远程计算机上的应用程序或服务。
SSH 通常使用 TCP/IP 协议,运行在默认的端口 22 上。它是一种广泛使用的安全远程管理工具,被广泛应用于服务器管理、远程维护和安全文件传输等领域。
- 服务启动
service ssh start
- 服务状态查看
service ssh status
- 服务端口查看
netstat -tpan | grep 22
>>
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 10438/sshd: /usr/sb
tcp 0 0 192.168.18.133:60280 52.222.236.48:443 ESTABLISHED 8875/firefox-esr
tcp 0 0 192.168.18.133:45228 152.195.38.76:80 TIME_WAIT -
tcp6 0 0 :::22 :::* LISTEN 10438/sshd: /usr/sb
“netstat -tpan | grep 22” 命令用于显示活动的网络连接,并通过过滤器只显示与端口22相关的连接,而端口22是SSH默认使用的端口。
这是命令的解释:
“netstat” 是一个命令行工具,用于显示活动的网络连接、路由表和各种网络接口的统计信息。
“-tpan” 是传递给 netstat 的选项:
“-t” 指定显示 TCP 连接。
“-p” 显示与连接相关的进程ID和名称。
“-a” 显示监听和非监听的套接字/连接。
“-n” 确保显示 IP 地址和端口号,而不是将其解析为主机名和服务名。
“|” 是管道符号,用于将一个命令的输出重定向到另一个命令。
“grep 22” 过滤 netstat 的输出,只显示包含数字 22 的行,这代表端口 22 上的连接(通常是SSH 连接)。
总而言之,“netstat -tpan | grep 22” 命令用于查找和显示与端口 22 相关的活动 TCP 连接,通常表示SSH 连接。
(3)安装vsftpd
- 安装
sudo apt install vsftpd
- 配置
sudo vim /etc/vsftpd.conf
- 使用vim过滤注释信息。
要使用Vim过滤以
#
开头的注释行,可以使用以下步骤:
- 打开要编辑的文件:
vim [文件名] 即vim /etc/vsftpd.conf
进入命令行模式,按下冒号
:
键。在命令行中输入以下命令来过滤注释行:
:g/^#/d
这个命令中的
g
表示全局匹配,^#
表示以#
开头的行,d
表示删除匹配的行。
按下回车键执行命令。所有以
#
开头的注释行将被删除。若要保存更改并退出Vim编辑器,可以输入
:wq
,然后按下回车键。现在,您应该看到已经过滤掉以
#
开头的注释行,并且文件中只剩下非注释的内容。请注意,在进行任何修改之前,最好先备份您的文件以防止意外数据丢失
-
回显非注释内容。
cat /etc/vsftpd.conf | grep -v "^#"
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
- 配置文件解析:
listen=NO
: 这表示vsftpd不会监听任何网络接口的IPv4连接,因为该选项设置为"NO"。如果要允许IPv4连接,可以将其设置为"YES"。
listen_ipv6=YES
: 这表示vsftpd将监听IPv6连接,因为该选项设置为"YES"。这意味着它将接受来自IPv6地址的连接。
anonymous_enable=NO
: 这意味着匿名访问已禁用,因为该选项设置为"NO"。这将要求用户提供有效的凭据才能进行FTP连接。
local_enable=YES
: 这表示本地用户访问已启用,因为该选项设置为"YES"。本地用户可以使用其系统凭据进行FTP连接。
dirmessage_enable=YES
: 这表示启用目录消息功能,因为该选项设置为"YES"。当用户进入目录时,服务器可以发送目录消息。
use_localtime=YES
: 这意味着服务器将使用本地时间,因为该选项设置为"YES"。在文件传输日志和其他情况下,服务器将使用本地时间而不是UTC时间。
xferlog_enable=YES
: 这表示启用传输日志,因为该选项设置为"YES"。传输日志记录了文件传输的详细信息,如上传和下载的文件。
connect_from_port_20=YES
: 这表示启用主动模式的传输,因为该选项设置为"YES"。在主动模式下,服务器使用端口20主动连接客户端的数据端口。
secure_chroot_dir=/var/run/vsftpd/empty
: 这是一个安全的 chroot 目录,限制了 FTP 用户的访问权限。
pam_service_name=vsftpd
: 这是与 PAM(Pluggable Authentication Modules)相关的服务名称,用于验证用户身份。
rsa_cert_file
和rsa_private_key_file
: 这些是使用 SSL/TLS 加密所需的 RSA 证书和私钥的文件路径。当前的配置显示未启用 SSL/TLS (ssl_enable=NO
)。
ssl_enable=NO
: 这表示未启用 SSL/TLS 加密连接,因为该选项设置为"NO"。如果要启用SSL/TLS 加密,可以将其设置为"YES"。
1.7 修改系统语言为中文
(1)打开终端(root模式)
打开设置
命令如下:
dpkg-reconfigure locales
(2)修改设置
en_US.UTF-8 UTF-8
改为不勾选
- 下面这种有个*属于已经勾选了
通过上下箭头按键我们把红点(表示当前选中的选项)移动到en_US.UTF-8 UTF-8
,按下空格表示不勾选/勾选
- 使用空格勾选
[ ]zh_CN.GBK_GBK
和[ ] zh-CN.UTF-8.UTF-8
两个选项,这里有部分虚拟机会找不到[ ]zh_CN.GBK_GBK
,这两个选项是紧跟着的,找不到就算了,问题不大。(按Enter健)
光标下移,按下enter
表示ok
,选择语言zh_CN.UTF-8
- 重启:终端输入reboot
重启生效
重启后会有个提示,建议你选择保留旧名称,以后路径敲代码敲英文肯定比敲中文方便很多!
1.8 安装中文输入法
- 以googlepinyin为例,部分kali Linux系统不支持搜狗输入法切换中文
- 安装fcitx框架
sudo apt install fcitx
- 安装Google输入法
sudo apt install fcitx-googlepinyin
(4)然后使用命令reboot
重启虚拟机。
(安装完成后重启,打开终端,按Ctrl+空格键
开启中文输入法,ctrl+空格键
键切换中英文;在任何需要输入的地方都使用ctrl+空格键
来开启中英文输入法)
(5)搜索fcitx configuration
- 选择Google拼音
【至此,kali设置使用中文输入法完成】