Linux基础(1)
openssl
OpenSSL 是一个开源的加密工具包,提供了加密、解密、签名、验证等功能。
# 使用 openssl passwd 命令可以处理密码相关的操作:
1. openssl passwd -1 123
# -1 参数指定使用 MD5 加密算法对密码 "123" 进行加密处理。
# MD5 是一种常用的哈希算法,将任意长度的输入数据转换为固定长度的输出(通常是 128 位的哈希值)。2. openssl passwd -5 123
# -5 参数表示使用 SHA-256 哈希算法对密码 "123" 进行哈希加密处理。
# SHA-256 是一种更安全的哈希算法,它生成的哈希值长度为 256 位。
# 使用 SHA-256 加密时,通常会引入随机因素(如盐值),以增加密码的安全性,使得即使攻击者获得了密文,也很难通过逆向计算得到原始密码。
文件操作
创建空文件
touch newfile
删除文件
rm newfile
新建文件夹
mkdir newdir
删除空目录
rmdir newdir
重命名文件
mv file.txt new.txt
拷贝文件
cp file.txt newdir.txt
软连接
ln -s original.txt symlink.txt
硬链接
ln ~/offsec123.txt hardlink.txt
补充说明
在Linux系统中,链接是一种指向文件或目录的引用,主要有两种类型:硬链接和软链接。
1. 硬链接(Hard Link):
- 硬链接是指向文件数据的直接引用,它并不改变文件的存储位置。
- 硬链接可以看作是文件的另一个名字,多个硬链接指向同一个文件数据。
- 删除硬链接不会影响文件本身,只有当所有指向该文件数据的硬链接都被删除后,文件数据才会被删除。
- 硬链接不能跨文件系统创建,也不能用于目录。2. 软链接(Symbolic Link,也称为符号链接):
- 软链接类似于Windows中的快捷方式,它是一个独立的文件,包含对另一个文件或目录的路径引用。
- 软链接可以跨文件系统创建,也可以用于目录。
- 删除软链接不会影响它所指向的文件或目录。
- 如果原始文件被删除,软链接会变成一个“死链接”,指向一个不存在的位置。
- 软链接可以被删除而不影响原始文件,但删除原始文件会使软链接失效。总结来说,硬链接是文件数据的直接引用,而软链接是一个包含路径信息的独立文件。硬链接不能用于目录和跨文件系统,而软链接则可以。
搜索文件
1. which
输出path环境变量里对应的可执行文件路径。
echo $PATH2. locate (local.db)
通过预先构建的文件数据库来快速查找文件。
sudo updatedb
locate whoami.exe3. find
用于搜索文件目录
find -mtime 2 -ls | sort -k9 -k10 | more
find . -type f -iname '*.sh' -mmin -30 -ls
find . -name '*.svn' -exec rm -rf {} \;
find / -user root -type f -perm -o=w -name '*.sh' 2>/dev/null
详细分析
"which":
作用是查找命令的可执行文件路径。例如,如果你想知道"ls"命令在系统中的具体位置,可以使用"which ls"。
"echo $PATH"用于输出环境变量PATH的值,PATH变量包含了系统在哪些目录中查找可执行文件。
"locate (local.db)":
"locate"命令用于快速查找文件,它通过查询一个预先构建的文件数据库来实现。
"sudo updatedb"用于更新"locate"命令所使用的文件数据库。这个操作可能需要一些时间,因为它会扫描整个文件系统并将文件信息添加到数据库中。
"find":
"find -mtime 2 -ls"查找在两天内被修改过的文件,并以长列表形式显示。
"|"是管道符号,将前一个命令的输出作为后一个命令的输入。
"sort -k9 -k10"是按照第九列和第十列的内容对文件信息进行排序。
"more"用于分页显示结果,方便查看。
"find . -type f -iname '*.sh' -mmin -30 -ls"在当前目录下查找在30分钟内被修改过的,文件名以".sh"结尾的文件,并以长列表形式显示。
"find . -name '*.svn' -exec rm -rf {} \;"在当前目录下查找所有".svn"目录,并删除它们。
"find / -user root -type f -perm -o=w -name '*.sh' 2>/dev/null"在根目录下查找所有属于root用户,且其他用户有写权限的".sh"脚本文件,并将错误信息重定向到/dev/null,即忽略错误信息。
find补充
find 命令在 Linux 系统中用于在目录树中搜索文件和目录。它提供了丰富的选项来指定搜索条件,如文件名、文件类型、文件大小、修改时间、权限等。
使用格式:
find [搜索路径] [选项] [搜索条件]例如:
find / -name "filename" # 从根目录开始搜索名为 filename 的文件find 命令的常用选项和搜索条件包括:
-name:按照文件名搜索。
-type:指定文件类型,如 f 表示文件,d 表示目录。
-mtime:按照文件内容上次修改时间搜索,可以指定天数,如 -mtime -7 表示过去 7 天内修改过的文件。
-ctime:按照文件状态(如权限、所有者等)上次修改时间搜索。
-size:按照文件大小搜索,可以指定单位,如 +10M 表示大于 10MB 的文件。
-perm:按照文件权限搜索。
-user:按照文件所有者搜索。
-group:按照文件所属组搜索。
-exec:对搜索结果执行指定的命令。find 命令可以与其他命令结合使用,通过管道(|)传递搜索结果,例如:
find . -type f -name "*.txt" -exec cat {} \; # 显示当前目录下所有 .txt 文件的内容find 命令是文件搜索的强大工具,能够满足各种复杂的搜索需求。
账号文件
用户账号数据库
/etc/password
/etc/shadow
组账号
cat /etc/group
禁用账号
chage -E 1990-01-01 kali
查看密码状态
passwd -S username
一、用户账号数据库相关文件
/etc/passwd:
这是一个重要的系统文件,存储了系统中用户账号的基本信息。
每行代表一个用户,包含了用户名、密码占位符、用户 ID、用户组 ID、用户描述信息、用户主目录、用户默认 shell 等字段。/etc/shadow:
这个文件与用户账号相关,主要存储用户密码的加密信息以及密码的一些属性,如密码最后一次修改时间、密码最短使用期限、密码最长使用期限等。
只有具有足够权限的用户(通常是 root)才能读取这个文件,以提高密码的安全性。二、组账号相关命令
cat /etc/group:
查看用户账号信息的同时,也可以间接了解用户所属的组信息,因为其中包含了用户组 ID。
三、禁用账号相关命令
sudo passwd -I username:
“sudo”表示以管理员权限执行命令。
"passwd" 是用于管理用户密码的命令。
"-I" 选项用于锁定用户账号。当执行这个命令后,指定的 “username” 用户账号将被锁定,无法登录系统。chage -E 1990-01-01 kali:
“chage” 命令用于修改用户密码的过期信息。
"-E" 选项后面跟着一个日期,表示设置用户账号的过期时间。在这个例子中,将 “kali” 用户账号的过期时间设置为 “1990-01-01”,通常意味着在这个日期之后该账号将无法使用,除非重新设置过期时间或进行其他管理操作。passwd -S username:
"passwd" 命令的另一个用法。
"-S" 选项用于显示指定用户账号的密码状态信息,包括账号是否被锁定、密码是否已设置、密码最后一次修改时间等。
文件系统权限
一、Linux系统中一切都是文件
在 Linux 系统中,几乎所有的资源都被抽象为文件,包括硬件设备(如硬盘、网卡等)、进程间通信、网络连接等。这种设计理念使得对各种资源的管理可以通过统一的文件操作方式来进行,大大简化了系统的架构和管理。
二、查看权限
ls -la /etc/passwd:
- `ls` 是列出目录内容的命令。
- `-l` 选项以长格式显示文件信息,包括文件的权限、所有者、所属组、文件大小、修改时间等详细信息。
- `-a` 选项显示包括隐藏文件在内的所有文件。
- `/etc/passwd` 是要查看的文件路径,这个文件存储了系统用户账号的基本信息。通过这个命令可以看到 /etc/passwd 文件的权限设置、所有者、所属组等信息。
三、更改文件所有者
chown root file:
- `chown` 是改变文件所有者的命令。
- `root` 是新的所有者用户名,这里表示将文件的所有者改为 “root” 用户。
- `file` 是要更改所有者的文件名称。执行这个命令后,文件的所有者将变为 “root” 用户。
四、修改文件权限
sudo chmod u=rwx,g+rw,o-r file:
- `sudo` 表示以管理员权限执行命令。
- `chmod` 是改变文件权限的命令。
- `u=rwx` 表示文件所有者(user)具有读(r)、写(w)、执行(x)权限。
- `g+rw` 表示文件所属组(group)增加读(r)和写(w)权限。
- `o-r` 表示其他用户(other)去除读(r)权限。
- `file` 是要修改权限的文件名称。sudo chmod u+x,g+w,o-r file:
- `u+x` 表示给文件所有者增加执行权限。
- `g+w` 表示给文件所属组增加写权限。
- `o-r` 表示去除其他用户的读权限。
- `file` 是目标文件。chmod 400 <file>:
- `chmod` 命令直接以数字方式设置文件权限。
- "4" 表示文件所有者的权限,这里代表读权限(r),因为读权限对应的数字是 4;后两位数字 “00” 分别表示文件所属组和其他用户没有任何权限。
- `<file>` 是要设置权限的文件。
注意区分 chown 和 chmod
文件权限详解
回显的信息是 `ls -la /etc/passwd` 命令的输出,这个命令用于在 Linux 系统中查看 `/etc/passwd` 文件的详细信息。下面是输出内容的解释:
```
-rw-r--r-- 1 root root 3388 Dec 22 15:30 /etc/passwd
```1. `-rw-r--r--`:这是文件的权限设置。
- 第一个 `-` 表示这是一个普通文件。
- `rw-` 表示文件所有者(在这里是 root 用户)有读(r)和写(w)权限,但没有执行(x)权限。
- `r--` 表示与文件所有者同组的用户(在这里也是 root 组)有读(r)权限,但没有写(w)和执行(x)权限。
- `r--` 表示其他用户也有读(r)权限,但没有写(w)和执行(x)权限。2. `1`:表示硬链接的数量。在这个例子中,`/etc/passwd` 文件只有一个硬链接。
3. `root root`:第一个 `root` 表示文件的所有者是 root 用户,第二个 `root` 表示文件所属的用户组也是 root 组。
4. `3388`:表示文件的大小,单位是字节。这里 `/etc/passwd` 文件的大小是 3388 字节。
5. `Dec 22 15:30`:表示文件的最后修改时间,这里是 12 月 22 日 15 时 30 分。
6. `/etc/passwd`:这是文件的路径。
`/etc/passwd` 文件是一个系统文件,它存储了系统中所有用户的账号信息,包括用户名、用户 ID(UID)、组 ID(GID)、用户全名、主目录和默认 shell 等。这个文件对系统至关重要,因为它包含了验证用户登录所需的信息。
chown
chown 命令在 Linux 系统中用于更改文件或目录的所有者和所属组。这个命令对于管理系统文件的所有权是非常重要的。
使用格式:
chown [选项] [新所有者]:[新组] 文件或目录例如:
chown newuser:newgroup filename # 将 filename 的所有者改为 newuser,组改为 newgroupchown 命令的常用选项包括:
-R:递归地更改指定目录下所有文件和子目录的所有权。
-c:在文件所有权发生变化时,显示更改的详细信息。
-h:只对符号链接进行操作,而不改变链接所指向的文件的所有权。
-v:显示详细的处理过程。例如:
chown -R root:root /path/to/directory # 递归地将目录及其内容的所有者和组改为 root
chown -h root /path/to/symlink # 只改变符号链接的所有者为 root请注意,使用 chown 命令通常需要 root 权限或使用 sudo 来执行,特别是当你更改不属于你的文件或目录的所有权时。
chmod
chmod 命令在 Linux 系统中用于更改文件或目录的访问权限。这个命令允许用户控制文件的读(r)、写(w)和执行(x)权限,以增强系统的安全性。
使用格式:
chmod [选项] 权限模式 文件或目录1. 使用符号模式更改权限:
chmod [u|g|o|a]+/-/= 权限 文件或目录
- u: 用户(文件所有者)
- g: 组(文件所属组)
- o: 其他用户
- a: 所有用户(u, g, o 的总和)
- +: 增加权限
- -: 减少权限
- =: 设置确切的权限例如:
chmod u+x file # 给文件所有者增加执行权限
chmod g-w file # 从文件所属组中移除写权限
chmod o=r file # 将其他用户的权限设置为只读2. 使用数字模式更改权限:
chmod 权限 文件或目录
- 读(r)= 4
- 写(w)= 2
- 执行(x)= 1权限数字是这些值的总和。例如,7 表示读、写和执行权限(4+2+1)。
例如:
chmod 755 file # 给文件所有者全部权限,给所属组读和执行权限,给其他用户读和执行权限3. 递归更改权限:
chmod -R 权限 目录
-R 选项允许递归地更改目录及其所有子文件和子目录的权限。例如:
chmod -R 755 /path/to/directory # 递归地给目录及其内容设置 755 权限chmod 命令对于控制系统资源的访问控制是非常重要的,它可以帮助用户保护文件不被未授权访问或修改。
系统日志
一、系统日志相关命令
ls -l /var/log:
- `ls` 是列出目录内容的命令。
- `-l` 选项以长格式显示文件和目录的详细信息,包括权限、所有者、所属组、文件大小、修改时间等。
- `/var/log` 是系统日志文件所在的目录。执行这个命令可以查看该目录下的日志文件列表及相关信息。
二、认证信息日志相关命令
sudo tail -3 /var/log/auth.log:
- `sudo` 表示以管理员权限执行命令。
- `tail` 命令用于查看文件的末尾部分。
- `-3` 表示显示文件的最后 3 行内容。
- `/var/log/auth.log` 是存储系统认证信息的日志文件,包括用户登录、认证失败等信息。执行这个命令可以查看最近的三条认证相关的日志记录。
三、二进制日志相关命令
who /var/log/wtmp | tail -5:
- `who` 命令用于显示当前登录的用户信息。
- `/var/log/wtmp` 是一个二进制日志文件,记录了系统的登录和注销信息。
- `|` 是管道符号,将前一个命令的输出作为后一个命令的输入。
- `tail -5` 表示显示最后 5 行内容。执行这个命令可以查看最近的五次登录或注销记录。此组合命令可以快速查看最近用户活动信息。
四、dmesg
- `dmesg`:这个命令用于显示内核环形缓冲区(kernel ring buffer)中的信息,包括系统启动时的硬件检测信息、内核模块加载信息、设备驱动的初始化信息等。它可以帮助用户了解系统的硬件状态和内核的运行情况。
五、systemd日志相关命令
journalctl:
- `journalctl`:这是一个用于查看和管理 systemd 日志的命令。systemd 是 Linux 系统的初始化系统和服务管理器,它会记录系统和服务的启动、运行和错误信息等日志。
系统日志
认证信息日志
二进制日志
kali tty7 Sep 23 20:10 (:0)
显示了当前登录到系统的用户信息。详解:
- `kali`:这是登录到系统的用户名。
- `tty7`:这表示用户通过的终端类型和编号。`tty` 代表 "电传打字机"(TeleTYpewriter),是 Linux 系统中的一个虚拟控制台。数字 `7` 表示这是系统中的第七个虚拟控制台。
- `Sep 23 20:10`:这是用户登录的时间和日期。`Sep` 是九月(September)的缩写,`20:10` 表示晚上 8 点 10 分。
- `(:0)`:这表示登录会话的来源。在这种情况下,`(:0)` 通常指的是本地控制台会话,即用户是在本地计算机上登录的,而不是通过远程连接。总的来说,这行信息告诉我们用户 `kali` 在 9 月 23 日晚上 8 点 10 分通过本地的第七个虚拟控制台登录了系统。
dmesg
systemd日志
存储管理
一、内存使用量
free -m:
- free 命令用于显示系统内存的使用情况。
- -m 选项表示以兆字节(MB)为单位显示内存信息。执行这个命令后,会显示系统的总内存、已使用内存、可用内存、缓冲内存和缓存内存等信息,帮助用户了解系统当前的内存使用状态。
二、磁盘使用量
df -hT:
- df 命令用于显示磁盘空间使用情况。
- -h 选项表示以人类可读的格式(如KB、MB、GB等)显示磁盘空间大小。
- -T 选项显示文件系统类型等信息。
三、文件或目录大小
sudo du ./* -hsc:
- sudo 表示以管理员权限执行命令。
- du 命令用于统计文件或目录的磁盘使用空间。
- ./* 表示当前目录下的所有文件和目录。
- -h 选项以人类可读的格式显示大小。
- -s 选项表示汇总显示每个参数的总大小。
- -c 选项表示在最后显示总计。执行这个命令可以查看当前目录下每个文件和目录的大小,并在最后显示总计大小。
四、查看硬盘分区
sudo fdisk -l:
- sudo 以管理员权限执行。
- fdisk 是一个磁盘分区工具。
- -l 选项表示列出系统中的所有磁盘分区信息,包括磁盘的大小、分区类型、分区编号、起始和结束扇区等。这个命令可以帮助用户了解系统的硬盘分区情况。
五、挂载分区
sudo mount /dev/sdb1 /mnt/usb:
- sudo 以管理员权限执行。
- mount 命令用于挂载分区。
- /dev/sdb1 是要挂载的分区设备文件。
- /mnt/usb 是挂载点,即分区挂载的目录位置。
内存
free 命令默认是以千字节(KB)为单位来显示内存使用情况的。如果你想要 free 命令以其他单位显示,比如兆字节(MB)或吉字节(GB),你可以使用 -m 或 -g 选项来指定单位。
例如:
- free -m 会以兆字节(MB)为单位显示内存信息。
- free -g 会以吉字节(GB)为单位显示内存信息。
以第三个为例
- 内存(Mem)总计为 3 GB,其中 1 GB 已被使用,1 GB 未使用,没有共享内存,1 GB 用于缓冲和缓存,2 GB 可用。
- 交换空间(Swap)总计为 0 GB,意味着系统没有配置交换空间,或者交换空间没有被使用。
磁盘
这段输出是 `df -hT` 命令的结果,它显示了 Linux 系统中各个文件系统的磁盘空间使用情况。下面是各列的含义:
- `Filesystem`:显示文件系统的名称或挂载点。
- `Type`:显示文件系统的类型,如 `ext4`、`devtmpfs`、`tmpfs` 等。
- `Size`:显示文件系统的总大小。
- `Used`:显示已使用的磁盘空间。
- `Avail`:显示可用的磁盘空间。
- `Use%`:显示磁盘空间的使用百分比。
- `Mounted on`:显示文件系统的挂载点。根据你提供的输出:
- `udev` 是一个设备临时文件系统,大小为 1.9 GB,当前没有使用空间。
- `tmpfs` 是一个临时文件系统,通常用于内存中的文件存储,大小为 389 MB,使用了 1.3 MB,几乎未被使用。
- `/dev/sda1` 是一个 `ext4` 类型的磁盘分区,大小为 19 GB,已使用 17 GB,剩余 755 MB,使用率为 96%,挂载在根目录 `/`。
- 其他的 `tmpfs` 条目分别对应于不同的内存挂载点,如 `/dev/shm`、`/run/lock`、`/run/user/1000` 和 `/run/user/126`,它们都是用于存储临时文件和会话信息的。特别需要注意的是 `/dev/sda1` 分区的使用率非常高,达到了 96%,这可能会影响系统的性能和稳定性,建议清理一些不必要的文件或者扩展磁盘空间。
文件或目录大小
dairy.txt
、flag.txt
以及test
目录每个都占用了 4 KB 的磁盘空间。demo.txt
文件没有占用磁盘空间。- 当前目录下所有文件和目录的总大小是 12 KB。
查看硬盘分区
这段输出是
sudo fdisk -l
命令的结果,它显示了系统中硬盘的分区信息。下面是各列的含义:
Disk /dev/sda
:表示硬盘的设备名称。20 GiB
:硬盘的总大小,即 20 吉字节。21474836480 bytes
:硬盘的总字节数。41943040 sectors
:硬盘的总扇区数。Disk model: VMware Virtual S
:硬盘的型号,这里表明是一个 VMware 虚拟硬盘。Units: sectors of 1 * 512 = 512 bytes
:表示扇区大小,这里是 512 字节。Sector size (logical/physical): 512 bytes / 512 bytes
:逻辑和物理扇区大小都是 512 字节。I/O size (minimum/optimal): 512 bytes / 512 bytes
:最小和最优的输入/输出扇区大小都是 512 字节。Disklabel type: dos
:磁盘标签类型是 DOS。Disk identifier: 0xcbfd4294
:磁盘标识符。分区信息:
/dev/sda1
:第一个分区,启动分区,大小为 19 GB,类型为 Linux。/dev/sda2
:第二个分区,大小为 975 MB,类型为 W95 Ext'd (LBA),这是一个扩展分区。/dev/sda5
:在扩展分区内的逻辑分区,大小为 975 MB,类型为 Linux swap / Solaris,用作交换空间。根据输出:
- 硬盘
/dev/sda
被分为两个主分区,其中一个是扩展分区/dev/sda2
,它里面又包含了一个逻辑分区/dev/sda5
。/dev/sda1
是系统的主分区,用于 Linux 系统。/dev/sda5
是交换分区,用于虚拟内存。
挂载分区
说明:
挂载(Mount)在 Linux 和其他类 Unix 操作系统中是指将一个存储设备(如硬盘、分区、USB 驱动器等)连接到文件系统的一个特定点,使得用户可以访问该存储设备上的数据。挂载分区有以下几个作用:挂载通常需要相应的权限,因此在 Linux 中,经常需要使用 sudo
来获取必要的权限。挂载后,如果需要在系统重启后自动挂载,还需要在 /etc/fstab
文件中进行相应的配置。
简单举个例子,你插入了新硬盘(USB),但Linux没有C,D等盘,只有一个根目录,分了新磁盘区 sdb1,但无法通过 cd 等操作访问 /dev/sdb1,因为这里的 sdb1 是一个类似指针的东西,指向原始数据块,我们需要将其挂到另一个已经存在目录让我们访问并进行操作。 mount /dev/sdb1 ~/share,将sdb1挂载到工作目录下的 share 文件夹,然后对share的任何操作就相当于对 sdb所指向内容的操作。
基本网络工具
ifconfig:
- 它可以显示网络接口的 IP 地址、子网掩码、MAC 地址等信息,还可以用于启动、停止或配置网络接口。
ip addr:
- 也是用于查看和管理网络接口的命令。
- 它提供了比 ifconfig 更详细和灵活的网络接口信息显示,包括接口的状态、IP 地址、子网掩码、广播地址等。
sudo ifdown eth0:
- sudo 表示以管理员权限执行命令。
- ifdown 用于关闭指定的网络接口。eth0 是网络接口名称,这里表示关闭名为 "eth0" 的网络接口。
sudo ifup eth0:
- 同样以管理员权限执行。
- ifup 用于启动指定的网络接口。eth0 表示启动名为 "eth0" 的网络接口。
二、网络配置
/etc/network/interfaces:
- 这是一个系统文件,用于配置网络接口的静态 IP 地址、子网掩码、网关等信息。
- 在一些 Linux 发行版中,通过编辑这个文件可以实现网络接口的手动配置。
NetworkManager:
- 是一个动态网络控制和配置守护进程。
- 它可以自动管理网络连接,包括有线网络、无线网络和 VPN 连接等。
- NetworkManager 提供了图形界面和命令行工具来配置和管理网络,使得网络配置更加方便和灵活。它可以自动检测网络变化,并根据配置自动连接到可用的网络。
- 在大多数桌面环境中,你可以通过点击系统托盘中的网络图标来打开 NetworkManager 的 GUI。
- 或者,你可以从应用程序菜单中搜索“Network”或“Network Manager”来启动它。
网络链接
一、网络连接状态查看工具
- netstat -natup:显示网络连接、路由表、接口统计等信息的命令,选项 -n 避免域名解析,-a 显示所有连接和监听端口,-t 显示 TCP 连接,-u 显示 UDP 连接,-p 显示与连接相关的进程 ID 和程序名称。
- ss -natup:与 netstat 类似的命令,用于显示网络连接状态,包括连接的协议、本地地址和端口、远程地址和端口等信息。(更快速)
二、二层地址查看工具
- arp -en:地址解析协议(Address Resolution Protocol)的工具,用于查看 ARP 缓存表,其中包含了 IP 地址和对应的 MAC 地址映射关系,用于局域网中的二层地址解析。选项 -e 以详细格式显示 ARP 缓存表,-n 以数字形式显示 IP 地址,避免进行域名解析。
三、路由信息相关工具
- route:用于显示和管理系统的路由表,可以查看系统当前的路由信息,包括目标网络、网关、子网掩码等,还可以用于添加、删除或修改路由条目。
- ip route:是 ip 命令的一部分,用于管理系统的路由表,提供了更强大和灵活的路由管理功能,可以进行更复杂的路由配置操作。
- sudo ip route add 10.13.37.0/24 dev eth1:以管理员权限执行命令,添加一条路由条目,指定通过名为 "eth1" 的网络接口到达目标网络 10.13.37.0/24。
四、路由跟踪工具
- traceroute offensive-security.com:用于跟踪数据包从本地主机到目标主机所经过的路由路径的工具。它可以逐跳显示数据包经过的路由器的 IP 地址和响应时间,帮助用户了解网络连接的路径和可能存在的网络问题。
ss
显示了当前系统中网络连接的状态。下面是各列的含义:
- `Netid`:网络协议类型,如 `tcp`(传输控制协议)或 `udp`(用户数据报协议)。
- `State`:连接状态,如 `LISTEN`(监听中)表示服务器正在监听端口,等待连接;`ESTAB`(已建立)表示连接已经建立并处于活动状态;`UNCONN`(未连接)表示 UDP 套接字未连接。
- `Recv-Q`:接收队列中的数据量。
- `Send-Q`:发送队列中的数据量。
- `Local Address:Port`:本地地址和端口号。
- `Peer Address:Port`:远程地址和端口号。
- `Process`:与连接关联的进程信息(如果可用)。根据你提供的输出:
1. 有一个 UDP 套接字在监听所有接口的 68 端口(DHCP 服务器)。
2. 有两个 TCP 套接字在监听本地回环地址(127.0.0.1)的 6012 和 6010 端口。
3. 有一个 TCP 套接字在监听所有 IPv4 地址的 22 端口(SSH 服务)。
4. 有两个 TCP 连接已经建立,都是从本地的 22 端口(SSH 服务)到远程地址 x.x.x.x 的连接,远程端口分别是 26495 和 10894。
5. 有一个 TCP 套接字在监听所有 IPv6 地址的 22 端口(SSH 服务)。
6. 另外两个 TCP 套接字在监听 IPv6 回环地址([::1])的 6012 和 6010 端口。(用了 Xshell )
arp
-e display (all) hosts in default (Linux) style 显示详细arp缓存表
-n, --numeric don't resolve names 避免域名解析
arp -en 命令的结果显示了当前系统中的 ARP(地址解析协议)缓存表。ARP 缓存表包含了网络中已知主机的 IP 地址到 MAC 地址的映射。下面是各列的含义:
- `Address`:网络中主机的 IP 地址。
- `HWtype`:硬件类型,通常指的是网络接口类型,这里是 `ether`,表示以太网。
- `HWaddress`:主机的 MAC 地址,即物理地址。
- `Flags`:标志位,`C` 表示这个 ARP 条目是通过 ARP 协议动态学习到的,并且是完整的(complete)。
- `Mask`:子网掩码,用于确定 ARP 条目的适用范围。这里没有显示具体的子网掩码,通常与 `Flags` 列合并。
- `Iface`:网络接口名称,这里是 `eth0`,表示这些 ARP 条目是通过 `eth0` 网络接口学习到的。根据输出:
1. IP 地址 `192.168.x.x` 对应的 MAC 地址是 `12:dd:xx:xx:19:10`,这通常是本地网络中的路由器或网关的地址。
2. IP 地址 `192.168.xx.xx` 对应的 MAC 地址是 `3e:xx:xx:33:42:d5`,这可能是同一网络中的另一台主机。ARP 缓存表对于网络通信至关重要,因为它允许主机通过 MAC 地址在本地网络中直接通信。当发送数据包时,操作系统会检查 ARP 缓存表,以确定目的 IP 地址对应的 MAC 地址,然后将数据包发送到正确的物理地址。如果 ARP 缓存中没有目的 IP 地址的条目,系统会发送 ARP 请求来获取这个信息。
route
`ip route` 显示了当前 Linux 系统的路由表。路由表包含了数据包在网络中传输的路径信息。下面是各字段的含义:
1. `default via 192.168.43.1 dev eth0`:
- `default`:表示默认路由,即当没有特定路由匹配数据包的目的地址时,数据包将通过这个路由发送。
- `via 192.168.43.1`:指定了默认路由的下一跳地址,即所有未明确路由的数据包将发送到这个 IP 地址。这通常是本地网络的网关或路由器。
- `dev eth0`:指定了用于发送数据包的网络接口,这里是 `eth0`。
- 这条路由没有 `proto`(协议)字段,表示它是由内核自动生成的。2. `192.168.43.0/24 dev eth0 proto kernel scope link src 192.168.xx.xx`:
- `192.168.43.0/24`:表示一个子网,其中 `/24` 是子网掩码,意味着前 24 位用于网络部分,剩下的 8 位用于主机部分。这个子网包括从 192.168.43.1 到 192.168.43.254 的所有 IP 地址。
- `dev eth0`:同样指定了网络接口 `eth0`。
- `proto kernel`:表示这个路由是由内核自动生成的。
- `scope link`:表示路由的范围仅限于本地链路,即数据包不会离开本地网络接口。
- `src 192.168.xx.xx`:指定了发送数据包时使用的源 IP 地址,这里是 `192.168.43.230`,通常是分配给本地网络接口的 IP 地址。总结来说,这个路由表指示系统将所有未明确路由的数据包发送到默认网关 `192.168.xx.xx`,并且所有发往 `192.168.43.0/24` 子网的数据包都通过 `eth0` 接口,使用 `192.168.xx.xx` 作为源地址进行发送。这是典型的家用或小型办公网络配置。
traceroute
- traceroute offensive-security.com
offensive-security.com 是 oscp考核的官网,也是 kali-linux 的维护者。
`traceroute` 显示了从主机到目标主机 `offensive-security.com`(IP 地址为 192.124.249.5)的网络路径。`traceroute` 命令用于跟踪数据包在网络中的路由路径,帮助诊断网络问题。下面是各字段的含义:
- `traceroute to offensive-security.com (192.124.249.5), 30 hops max, 60 byte packets`:表示 `traceroute` 命令的目标是 `offensive-security.com`,最大跳数为 30,使用的是 60 字节的数据包。
- `1-29`:表示数据包经过的每个路由器或跳数。
- `localhost`:表示数据包在本地网络中,没有离开你的网络环境。
- `* * *`:表示在该跳数中没有收到响应,可能是由于路由器配置为不响应 ICMP 请求,或者数据包在该跳丢失。
- `IP 地址`:显示了每个跳的 IP 地址。
- `时间(ms)`:显示了到达每个跳的往返时间,以毫秒为单位。
根据你提供的输出:
1. 数据包首先通过本地网络的三个路由器(192.168.x.x, 192.168.x.x, 192.168.x.x)。
2. 在第 5 跳,数据包到达了 192.168.x.x,然后跳到了 106.227.x.x。
3. 接下来,数据包经过了几个路由器,包括 202.97.x.x 和 202.97.x.x。
4. 在第 12 跳,数据包到达了 89.149.x.x,这是 `ae19.cr0-sjc1.ip4.gtt.net` 的 IP 地址,可能是一个较大的网络服务提供商的路由器。
5. 从第 13 跳开始,直到第 29 跳,`traceroute` 没有收到响应,这可能是因为这些路由器不响应 ICMP 请求,或者数据包在这些跳丢失。这种输出可以帮助你了解数据包从你的主机到目标主机所经过的路径,以及可能存在的网络延迟或丢包问题。如果有很多 `* * *`,可能表明网络中存在问题,或者某些路由器不响应 `traceroute` 请求。
ssh服务
一、启动服务
- sudo systemctl start ssh:以管理员权限启动 SSH 服务。
- ssh root@localhost:使用 SSH 协议以 root 用户身份登录到本地主机。
systemctl 是管理系统服务的工具
二、连接本地主机
- ssh 是 Secure Shell 的客户端命令。
- root 表示要以 "root" 用户身份进行登录。
- localhost 表示连接到本地主机。
三、配置文件
- /etc/ssh/sshd_config:这是 SSH 服务器的主要配置文件,包含了各种参数,如端口号、允许的登录用户、认证方式、访问控制等。
四、客户端配置
- hash knownHosts yes:可能用于指示对已知主机文件中的主机名进行哈希处理,以提高安全性。
- ~/.ssh:用户主目录下的一个目录,用于存储 SSH 客户端的配置和相关文件,如私钥文件(id_rsa)、公钥文件(id_rsa.pub)以及已知主机文件(known_hosts)等。
远程拷贝文件
一、远程拷贝
- scp root@1.1.1.1:/home/kali/.bashrc Copiedbashrc使用 scp 命令从 IP 地址为 1.1.1.1 的主机上以 root 用户身份复制 `.bashrc` 文件到本地,并命名为 `Copiedbashrc`。
二、scp 命令解释
- scp 是 Secure Copy 的缩写,用于在不同主机之间安全地复制文件。
- root@1.1.1.1 表示从 IP 地址为 1.1.1.1 的主机上以 "root" 用户身份进行操作。
- /home/kali/.bashrc 是源文件路径,即要从远程主机上复制的文件。
- Copiedbashrc 是目标文件名称或目标路径,即将远程文件复制到本地后的名称或存放位置。
尝试从 windows 上拷贝 linux 上的文件
成功
查看历史命令
history
history 命令在 Linux 系统中用于显示用户在终端中执行过的命令历史记录。这个命令可以帮助用户回顾和重用之前的命令,提高工作效率。以下是 history 命令的一些常用选项和功能:
1. 显示历史记录:
- 直接输入 `history` 会列出用户执行过的命令历史,每个命令前面都有一个数字,表示命令在历史中的序号。2. 显示特定数量的历史命令:
- `history 10`:显示最近的 10 条命令历史。3. 搜索历史记录:
- `history | grep 'search_term'`:在命令历史中搜索包含 'search_term' 的命令。
查看历史记录默认是从前往后的,可结合tail命令一起使用。