作业说明
这个作业属于哪个课程 | 网络攻防实践(https://edu.cnblogs.com/campus/besti/19attackdefense) |
这个作业的要求在哪里 | https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10228 |
我在这个课程的目标是 | 学习网络攻防相关知识,并通过实践深入了解网络攻防 |
这个作业在哪个具体方面帮助我实现目标 | 复习巩固Linux基础知识 |
作业一
1. 你对网络攻击和防御了解多少?该课程需要计算机和网络相关的基础知识,你原专业是什么专业,目前你掌握多少基础知识?
● 上学期学习了《网络系统安全》这门课,对网络攻击和防御的基础知识有一些了解,并做过一些相关实践。网络攻击分为主动攻击和被动攻击,主动攻击有伪装、重放、篡改和拒绝服务,被动攻击有报文分析和流量分析,对于被动攻击,重在防范,而不在于检测。
● 我原专业是网络工程,对计算机网络基础知识较为了解。
2. 作业要使用Markdown格式,Markdown入门参考(需掌握)
● 因上学期选修《Linux内核原理与分析》这门课,所以已掌握基本的Markdown语法。
作业二
你自己动手安装过操作系统吗?如果没有话现在动手学一下吧。
1. 学习基于VirtualBox虚拟机安装Ubuntu图文教程在自己笔记本上安装Linux操作系统(也可以使用VMware安装虚拟机,安装方法自己百度)
● 因上学期选修《Linux内核原理与分析》这门课,已安装虚拟机。
2. 通过实践学习别出心裁的Linux命令学习法,掌握Linux命令的学习方法
● 因上学期选修《Linux内核原理与分析》这门课,已掌握Linux的基本命令。
3. 参考上面的学习方法通过实践学习Linux基础入门(新版)课程,掌握常用的Linux命令,重点是3/4/5/6/7/8节
实验3 用户及文件权限管理
在 Linux 系统里, root
账户拥有整个系统至高无上的权利,比如 新建/添加 用户。我们一般登录系统时都是以普通账户的身份登录的,要创建用户需要 root 权限,这里就要用到 sudo
这个命令了。不过使用这个命令有两个大前提,一是你要知道当前登录用户的密码,二是当前用户必须在 sudo
用户组。
● 查看用户:who am i 或者 who mom likes
● su,su- 与 sudo
su <user>
可以切换到用户 user,执行时需要输入目标用户的密码。
sudo <cmd>
可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码。
su - <user>
命令也是切换用户,同时环境变量也会跟着改变成目标用户的环境变量。
● 新建用户:sudo adduser <user>,这个命令不但可以添加用户到系统,同时也会默认为新用户创建 home 目录。
● 查看用户属于哪些用户组:groups <user>
● 将其它用户加入 sudo 用户组
默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入 sudo 用户组从而获取 root 权限。使用usermod
命令可以为用户添加用户组,同样使用该命令你必需有 root 权限,你可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令。
$ su shiyanlou # 此处需要输入 shiyanlou 用户密码,shiyanlou 的密码可以通过 `sudo passwd shiyanlou` 进行设置。
$ groups lilei
$ sudo usermod -G sudo lilei
$ groups lilei
● 删除用户: sudo deluser <user> --remove-home
● 查看文件权限:ls -l
出现如下所示结果:
● 变更文件所有者
# 注意当前的用户必须是 lilei
# 如果是 shiyanlou 用户需要切换到 lilei(如果之前已经删除需要重新创建下)
$ su lilei
$ cd /home/lilei
$ touch iphone6
# 更改文件所有者为shiyanlou,需要切换到 shiyanlou 用户执行以下操作
$ cd /home/lilei
$ ls iphone6
$ sudo chown shiyanlou iphone6
● 修改文件权限
方法一:二进制数字表示
每个文件的三组权限(拥有者,所属用户组,其他用户,记住这个顺序是一定的)对应一个 " rwx ",也就是一个 “ 7 ” ,所以如果我要将文件“ iphone6 ”的权限改为只有我自己可以用那么就这样:
$ chmod 600 iphone6
方法二:加减赋值操作
$ chmod go-rw iphone6 // g、o 还有 u 分别表示 group、others 和 user,+ 和 - 分别表示增加和去掉相应的权限。
● adduser
和 useradd
的区别
useradd 只创建用户,创建完了用 passwd lilei 去设置新用户的密码。adduser 会创建用户,创建目录,创建密码(提示你设置),做这一系列的操作。其实 useradd、userdel 这类操作更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,需要你输入、确定等一系列操作。
实验4 Linux目录结构及文件基本操作
● FHS标准
FHS 依据文件系统使用的频繁与否以及是否允许用户随意改动,将目录定义为四种交互作用的形态,如下表所示:
● 进入上一级目录:cd ..
进入你的 home
目录:
绝对路径:关于绝对路径,简单地说就是以根" / "目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin
,表示根目录下的 usr
目录中的 local
目录中的 bin
目录。
相对路径:也就是相对于你当前的目录的路径,相对路径是以当前目录 .
为起点,以你所要到的目录为终点,表现形式如:usr/local/bin
(这里假设你当前目录为根目录)。你可能注意到,我们表示相对路径实际并没有加上表示当前目录的那个 .
,而是直接以目录名开头,因为这个 usr
目录为 /
目录下的子目录,是可以省略这个 .
的(以后会讲到一个类似不能省略的情况);如果是当前目录的上一级目录,则需要使用 ..
,比如你当前目录为 /home/shiyanlou
目录下,根目录就应该表示为 ../../
,表示上一级目录( home
目录)的上一级目录( /
目录)。
下面我们以你的 home
目录为起点,分别以绝对路径和相对路径的方式进入 /usr/local/bin
目录:
# 绝对路径
$ cd /usr/local/bin
# 相对路径
$ cd ../../usr/local/bin
● 新建空白文件:touch <文件名>
新建目录:mkdir <目录名>
同时创建一个多级目录:mkdir -p father/son/grandson
● 复制文件:
$ cd /home/shiyanlou
$ mkdir family
$ cp -r father family
● 删除文件:rm <文件> 或 rm -f <文件>,表示强制删除
删除目录:跟复制目录一样,要删除一个目录,也需要加上 -r
或 -R
参数,rm -r <目录>
● 移动文件:mv <源目录文件> <目的目录>
重命名文件:mv <旧的文件名> <新的文件名>
批量重命名:rename
● 查看文件
使用 cat
,tac
和 nl
命令查看文件:前两个命令都是用来打印文件内容到标准输出(终端),其中 cat
为正序显示,tac
为倒序显示。nl
命令,添加行号并打印。
使用 more
和 less
命令分页查看文件:如果说上面的 cat
是用来快速查看一个文件的内容的,那么这个 more
和 less
就是天生用来"阅读"一个文件的内容的。
使用 head
和 tail
命令查看文件:它们一个是只查看文件的头几行(默认为 10 行,不足 10 行则显示全部)和尾几行。
● 查看文件类型:file <文件>
实验5 环境变量与文件查找
● 变量
$ declare tmp // 创建变量,或也可以不用 declare 预声明一个变量,直接即用即创建
$ tmp=shiyanlou // 使用 = 号赋值运算符,将变量 tmp 赋值为 shiyanlou
$ echo $tmp // 读取变量的值,使用 echo 命令和 $ 符号($ 符号用于表示引用一个变量的值)
● 环境变量
通常我们会涉及到的变量类型有三种:
1)当前 Shell 进程私有用户自定义变量,如上面我们创建的 tmp 变量,只在当前 Shell 中有效。
2)Shell 本身内建的变量。
3)从自定义变量导出的环境变量。
也有三个与上述三种环境变量相关的命令:set
,env
,export
。这三个命令很相似,都是用于打印环境变量信息,区别在于涉及的变量范围不同。
命 令 | 说 明 |
---|---|
set |
显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量。 |
env |
显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。 |
export |
显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。 |
● 我们在 Shell 中输入一个命令,Shell 通过环境变量 PATH
来进行搜索的,然后执行。
PATH
里面的路径是以 :
作为分割符的,所以我们可以这样添加自定义路径:
$ PATH=$PATH:/home/shiyanlou/mybin //注意这里一定要使用绝对路径。
但是这样只是给 PATH 环境变量追加了一个路径,它也只是在当前 Shell 有效,我一旦退出终端,再打开就会发现又失效了。有没有方法让添加的环境变量全局有效?或者每次启动 Shell 时自动执行上面添加自定义路径到 PATH 的命令?下面我们就来说说后一种方式——让它自动执行。
在每个用户的 home 目录中有一个 Shell 每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。zsh 的配置文件是 .zshrc
,相应 Bash 的配置文件为 .bashrc
。它们在 etc
下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件。
$ echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc
上述命令中 >>
表示将标准输出以追加的方式重定向到一个文件中,注意前面用到的 >
是以覆盖的方式重定向到一个文件中,使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件。
● 前面我们在 Shell 中修改了一个配置脚本文件之后(比如 zsh 的配置文件 home 目录下的 .zshrc
),每次都要退出终端重新打开甚至重启主机之后其才能生效,很是麻烦,我们可以使用 source
命令来让其立即生效,如:
$ cd /home/shiyanlou $ source .zshrc
source
命令还有一个别名就是 .
,上面的命令如果替换成 .
的方式就该是:
$ . ./.zshrc
在使用.
的时候,需要注意与表示当前路径的那个点区分开。注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。
● 搜索文件
whereis
简单快速
locate
快而全
which
小而精
find
精而细
实验6 文件打包与解压缩
● zip
打包 :zip something.zip something (目录请加 -r 参数)
解包:unzip something.zip
指定路径:-d 参数
● tar
打包:tar -cf something.tar something
解包:tar -xf something.tar
指定路径:-C 参数
实验7 文件系统操作与磁盘管理
● 查看磁盘和目录的容量
使用 df 命令查看磁盘的容量
# 默认同样以 块 的大小展示
$ df
# 加上`-h`参数,以更易读的方式展示
$ df -h
使用 du 命令查看目录的容量
# 默认同样以 块 的大小展示
$ du
# 加上`-h`参数,以更易读的方式展示
$ du -h
# 只查看1级目录的信息
$ du -h -d 0 ~
# 查看2级
$ du -h -d 1 ~
du -h #同--human-readable 以K,M,G为单位,提高信息的可读性。
du -a #同--all 显示目录中所有文件的大小。
du -s #同--summarize 仅显示总计,只列出最后加总的值。
● dd
命令用于转换和复制文件,不过它的复制不同于cp。
dd
默认从标准输入中读取,并写入到标准输出中,但可以用选项if
(input file,输入文件)和of
(output file,输出文件)改变。
用dd
命令从标准输入读入用户的输入到标准输出或者一个文件中:
# 输出到文件
$ dd of=test bs=10 count=1 # 或者 dd if=/dev/stdin of=test bs=10 count=1
# 输出到标准输出
$ dd if=/dev/stdin of=/dev/stdout bs=10 count=1
# 注
在打完了这个命令后,继续在终端打字,作为你的输入
上述命令从标准输入设备读入用户输入(缺省值,所以可省略)然后输出到 test 文件,bs
(block size)用于指定块大小(缺省单位为 Byte,也可为其指定如'K','M','G'等单位),count
用于指定块数量。
dd
在拷贝的同时还可以实现数据转换,那下面就举一个简单的例子:将输出的英文字符转换为大写再写入文件:
$ dd if=/dev/stdin of=test bs=10 count=1 conv=ucase
● 使用 dd 命令创建虚拟镜像文件
使用dd
命令来完成创建虚拟磁盘的第一步。
# 从/dev/zero设备创建一个容量为 256M 的空文件
$ dd if=/dev/zero of=virtual.img bs=1M count=256
$ du -h virtual.img
然后我们要将这个文件格式化(写入文件系统),这里使用 mkfs 命令格式化磁盘(我们这里是自己创建的虚拟磁盘镜像)
# 将我们的虚拟磁盘镜像格式化为ext4文件系统
$ sudo mkfs.ext4 virtual.img
实验8 Linux下的帮助命令
● 内建命令与外部命令
内建命令实际上是 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在bash源码的builtins里面的,由 shell 程序识别并在 shell 程序内部完成运行,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。比如:history、cd、exit 等等。
外部命令是 Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调入内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等。比如:ls、vi等。
● 几个常用的帮助命令
help 命令:只能用于显示shell内建命令的帮助信息。外部命令基本上都有一个参数--help:ls --help
man命令:得到的内容比用 help 更多更详细,而且man没有内建与外部命令的区分,因为 man 工具是显示系统手册页中的内容,也就是一本电子版的字典,这些内容大多数都是对命令的解释信息,还有一些相关的描述。通过查看系统文档中的 man 也可以得到程序的更多相关信息和 Linux 的更多特性。
info命令:man 和 info 就像两个集合,它们有一个交集部分,但与 man 相比,info 工具可显示更完整的 GNU 工具信息。若 man 页包含的某个工具的概要信息在 info 中也有介绍,那么 man 页中会有“请参考 info 页更详细内容”的字样。