0


Linux基础操作与安全实践指南

linux基础

openssl

OpenSSL的基本用法

(一)命令分类

命令分为三类:标准命令,消息摘要(dgst子命令),加密命令(enc子命令)。

(二)对称加密enc命令示例

openssl enc -ciphername [-help] [-ciphers] [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md digest] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id],其中-infilename表示要加密/解密的输入文件(缺省为标准输入),-outfilename表示要加密/解密的输出文件(缺省为标准输出)。

OpenSSL的运行模式

有两种运行模式:交互模式和批处理模式。直接输入openssl回车进入交互模式,输入带命令选项的openssl进入批处理模式。

  1. openssl passwd -1 123

openssl passwd -1 命令用于生成一个基于MD5的密码哈希值。这个命令通常用于生成密码文件,例如在Linux系统中用于设置用户密码。

命令解析

  • openssl: 这是一个用于处理SSL/TLS协议的工具,也可以用于生成各种加密材料。
  • passwd: 这是openssl的一个子命令,用于生成密码哈希。
  • -1: 这个选项指定使用MD5算法来生成密码哈希。
  • 123: 这是你要生成哈希的密码。
  1. openssl passwd -5 123

-5: 这个选项指定使用SHA-256算法来生成密码哈希。

openssl支持多种密码哈希算法

选项解释

  • -salt val: 使用提供的盐值。盐值可以增加密码哈希的安全性,防止彩虹表攻击。
  • -6: 使用基于SHA-512的密码算法。
  • -5: 使用基于SHA-256的密码算法。
  • -apr1: 使用基于MD5的密码算法,Apache变体。
  • -1: 使用基于MD5的密码算法。
  • -aixmd5: 使用基于AIX MD5的密码算法。

linux文件管理命令

1,touch命令创建空文件

2,rm 删除文件

  1. 新建目录 mkdir new
  2. 删除空目录 rmdir new

3. 重命名文件mv

4. 移动文件 mv

用法:mv 选项... [-T] 源 目标

 或:mv 选项... 源... 目录

 或:mv 选项... -t 目录 源...

将 <源> 重命名为 <目标>,或将 <源> 移动至 <目录>。

长选项的必选参数对于短选项也是必选的。

--backup[=控制] 为每个已存在的目标文件创建备份

-b 类似 --backup,但不接受任何参数

--debug 解释文件是如何复制的。隐含启用 -v

-f, --force 覆盖前不询问

-i, --interactive 覆盖前询问

-n, --no-clobber 不覆盖已存在的文件

如果您指定了 -i、-f、-n 中的多个,仅最后一个生效。

  --no-copy                如果重命名失败,则不复制

  --strip-trailing-slashes  去掉每个 <源> 尾部的斜杠

-S, --suffix=后缀 替换通常使用的备份文件后缀

-t, --target-directory=目录 将所有 <源> 参数复制到 <目录>

-T, --no-target-directory 将 <目标> 视为普通文件

--update[=更新] 控制更新哪些已存在的文件;

                             <更新>={all,none,older(默认)}。见下

-u 等价于 --update[=older]

-v, --verbose 显示详细步骤

-Z, --context 将目标文件的 SELinux 安全上下文设置为

                             默认类型

  --help        显示此帮助信息并退出

  --version     显示版本信息并退出
  1. cp拷贝文件

  1. 软链接 ln -s

用法:ln 选项... [-T] 目标 链接名

 或:ln 选项... 目标

 或:ln 选项... 目标... 目录

 或:ln 选项... -t 目录 目标...

第一种格式,创建一个名为 <链接名> 的、指向 <目标> 的链接。

第二种格式,在当前目录创建指向 <目标> 的链接。

第三和第四种格式,在 <目录> 中创建指向各个 <目标> 的链接。

默认创建硬链接,当使用 --symbolic 时创建符号链接。

默认情况下,目标(指新链接的名称)不能已经存在。

创建硬链接时,每个 <目标> 都必须存在。符号链接可以包含任意的文本;

以后进行解析时,符号链接会被解析为一个相对于其父目录的相对链接。

长选项的必选参数对于短选项也是必选的。

  --backup[=控制]         为每个已存在的目标文件创建备份文件

-b 类似 --backup,但不接受参数

-d, -F, --directory 允许超级用户尝试创建指向目录的硬链接

                            (注意:即使是超级用户,此操作也可能因系统

                            限制而失败)

-f, --force 删除已存在的目标文件

-i, --interactive 删除目标文件前进行确认

-L, --logical 如果 <目标> 为符号链接,将其解引用

-n, --no-dereference 如果 <链接名> 是一个指向目录的

                            符号链接,则将其视为普通文件处理

-P, --physical 创建直接指向符号链接的硬链接

-r, --relative 和 -s 同时使用时,创建相对于链接位置的链接

-s, --symbolic 创建符号链接,而不是硬链接

-S, --suffix=后缀 替换通常使用的备份文件后缀

-t, --target-directory=目录 在指定的 <目录> 中创建链接

-T, --no-target-directory 总是 <链接名> 视为普通文件

-v, --verbose 打印每个已创建链接的文件名称

  --help        显示此帮助信息并退出

  --version     显示版本信息并退出

  1. 硬链接 ln

在Linux系统中,软链接(Soft Link,又称符号链接Symbolic Link)和硬链接(Hard Link)是两种不同的文件链接方式

软硬链接区别:

  1. 硬链接原文件/链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;
  2. 在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;
  3. 链接数目是不一样的,软链接的链接数目不会增加;
  4. 文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的,软链接显示的大小与原文件不同
  5. 软链接没有任何文件系统的限制,任何用户可以创建指向目录的符号链接

linux搜索文件命令

1,which 查找可执行文件的路径

which 选项... 可执行文件名称...

主要参数

  • -n:指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
  • -p:与-n参数相同,但包括文件的路径。
  • -w:指定输出时栏位的宽度。
  • -V:显示版本信息

which指令会在环境变量$PATH设置的目录里查找符合条件的文件

  1. locate 通过访问预建的数据库来快速查找系统上的文件或目录

各个选项和参数的解释:

  1. -b, --basename:仅搜索路径名称中的文件名部分。默认情况下,locate会搜索整个路径名称。使用这个选项后,只会匹配文件名部分。
  2. -c, --count:打印匹配的数量而不是具体的匹配项。如果你只想知道有多少个文件符合搜索条件,而不关心具体是哪些文件,可以使用这个选项。
  3. -d, --database DBPATH:指定搜索文件的数据库路径,默认是/var/lib/plocate/plocate.db 。你可以使用自定义的数据库来进行搜索。
  4. -i, --ignore-case:进行不区分大小写的搜索。这样搜索时,不会区分字母的大小写。
  5. -l, --limit LIMIT:设置匹配的最大数量。当达到指定数量的匹配项时,停止搜索。
  6. -0, --null:使用NUL字符而不是换行符来分隔匹配项。这在处理包含特殊字符(如换行符)的文件名时非常有用。
  7. -N, --literal:即使打印到终端,也不引用文件名。默认情况下,文件名会被引用以避免特殊字符的问题。
  8. -r, --regexp:将模式解释为基本正则表达式(basic regexps)。这会使搜索变慢。
  9. --regex:将模式解释为扩展正则表达式(extended regexps)。这也会影响搜索性能。
  10. -w, --wholename:搜索整个路径名称。这是默认行为,但可以通过-b选项来改变。
  11. --help:打印帮助信息,显示命令的使用说明。
  12. --version:打印版本信息,显示命令的版本。

使用 updatedb 命令更新 locate 命令使用的数据库,这个命令会在后台运行,并遍历整个文件系统,收集文件和目录的信息,并将这些信息存储在数据库中。这个数据库可以被 locate 命令用来快速查找文件。

*3,find 目录下查找文件和目录*它可以使用不同的选项来过滤和限制查找的结果

find [path...] -options [-print -exec -ok command]

  • [path...] 表示要搜索的路径,可以是文件或目录。
  • -options 是指定的搜索条件,用于筛选出符合条件的文件或目录。
  • -print 是默认输出方式,将匹配的文件输出到标准输出。
  • -exec 和 -ok 用于对匹配的文件执行指定的 shell 命令。

常用选项

  1. ****按文件名查找 (-name)****:

find /path/to/search -name "*.txt"

这条命令将在指定路径下搜索所有以 .txt 结尾的文件。

  1. ****按文件类型查找 (-type)****:

find /path/to/search -type f

这条命令将查找所有普通文件。f 表示普通文件,d 表示目录,l 表示符号链接,等等。

  1. ****按修改时间查找 (-mtime)****:

find /path/to/search -mtime -7

这条命令将查找过去7天内修改过的文件。-7 表示7天以内,+7 表示7天以前。

  1. ****按文件大小查找 (-size)****:

find /path/to/search -size +100M

这条命令将查找大于100MB的文件。M 表示兆字节,G 表示千兆字节,等等。

  1. ****按文件权限查找 (-perm)****:

find /path/to/search -perm 777

这条命令将查找权限为 777 的文件。

  1. ****按文件属主查找 (-user)****:

find /path/to/search -user username

这条命令将查找属于指定用户的文件。

  1. ****按文件所属组查找 (-group)****:

find /path/to/search -group groupname

这条命令将查找属于指定组的文件。

执行命令

  • -exec 选项

find /path/to/search -name "*.txt" -exec rm {} ;

这条命令将删除所有找到的 .txt 文件。{} 是一个占位符,表示每个匹配的文件,; 表示命令的结束。

  • -ok 选项

find /path/to/search -name "*.txt" -ok rm {} ;

这条命令与 -exec 类似,但在执行每个命令之前,会提示用户确认是否执行。

find -mtime 2 -ls | sort -k9 -k10 |more

  1. find . -mtime -2 -ls: - find .: 在当前目录(.)中查找文件。- -mtime -2: 查找过去两天内修改过的文件。- -ls: 对找到的每个文件,输出类似于 ls -l 的详细信息,包括文件的权限、链接数、所有者、组、文件大小、修改时间以及文件名。
  2. | sort -k9 -k10: - |: 管道操作符,将前一个命令的输出作为下一个命令的输入。- sort -k9 -k10: 对输入进行排序。-k9 表示按第9列排序(通常是文件大小),-k10 表示按第10列排序(通常是文件的修改时间)。
  3. | more: - |: 同样是管道操作符。- more: 分页显示排序后的结果,使输出不会一次性全部显示出来,方便查看。

功能总结

  • 查找文件:在当前目录中查找过去两天内修改过的文件。
  • 列出详细信息:对找到的文件输出详细的 ls -l 样式的文件信息。
  • 排序:首先按文件大小(第9列)排序,然后按文件的修改时间(第10列)排序。
  • 分页显示:使用 more 命令分页显示排序后的结果。

find -type f -iname '.sh' -mtime -30 -ls*

  1. find:这是查找命令,用于在指定目录中查找文件和目录。
  2. -type f: - -type f: 仅查找文件(不包括目录)。
  3. ****-iname '*.sh'***: - -iname '.sh': 查找所有扩展名为 .sh 的文件,不区分大小写。*.sh 是一个通配符模式,表示任何以 .sh 结尾的文件。
  4. -mmin -30: - -mmin -30: 查找在过去30分钟内修改过的文件。-mmin 选项后面跟着一个负数,表示文件在过去的多少分钟内被修改过。
  5. -ls: - -ls: 对找到的每个文件,输出类似于 ls -l 的详细信息,包括文件的权限、链接数、所有者、组、文件大小、修改时间以及文件名。

***find -name '.svn' -exec rm {} ; ****

  1. find: 这是一个用于在文件系统中查找文件的命令。
  2. -name '.svn': 这是find命令的一个选项,用于指定查找的文件名模式。.svn表示查找所有以.svn结尾的文件。
  3. -exec rm {{}} ;: 这是find命令的一个选项,用于对找到的文件执行指定的命令。rm是删除文件的命令,{}是find命令中用于表示找到的文件的占位符,;表示-exec选项的结束。

find / -user root -type f -perm -o=w -name '.sh' 2>/dev/null*

这个命令用于在Linux系统中查找所有属于root用户且其他用户具有写权限的Shell脚本文件(以.sh结尾的文件)。这个命令常常用于查找提权利用文件

命令组成部分

  1. find /:从根目录开始查找文件。
  2. -user root:查找属于root用户的文件。
  3. -type f:指定查找的类型为普通文件。
  4. -perm -o=w:查找其他用户具有写权限的文件。-o=w表示其他用户(others)的写权限位被设置。
  5. -name '*.sh':查找文件名以.sh结尾的文件。
  6. 2>/dev/null:将标准错误输出重定向到/dev/null,即忽略错误信息。

渗透测试中关键的文件路径

在进行渗透测试时,了解和关注一些关键的文件路径是非常重要的,因为这些路径可能包含敏感信息、配置文件或可利用的漏洞。以下是一些在Windows和Linux系统中需要特别关注的关键文件路径:

Windows系统

  1. C:\Windows\System32\config\SAM: - 存储用户账户信息和密码哈希值。- 攻击者可以提取这些哈希值进行密码破解。
  2. C:\Windows\System32\config\SYSTEM: - 包含系统的安全设置信息。- 可以被用来了解系统的安全配置。
  3. C:\Users<用户名>\NTUSER.DAT: - 存储用户特定的设置和偏好。- 攻击者可以从中提取敏感信息。
  4. C:\pagefile.sys : - 虚拟内存文件,可能包含敏感信息的备份。- 可以通过分析提取出有价值的数据。
  5. C:\hiberfil.sys : - 休眠文件,包含系统状态的备份。- 同样可以通过分析提取出敏感信息。
  6. C:\boot.ini : - 存储系统启动时所需的参数。- 修改它可以执行恶意代码或导致系统无法正常启动。

Linux系统

  1. /etc/shadow: - 存储用户的加密密码。- 只有root用户可以访问,攻击者可以尝试获取并破解密码。
  2. /etc/passwd: - 包含用户账户信息。- 攻击者可以通过修改这个文件来添加新的用户账户或提高权限。
  3. /etc/group: - 存储用户组的信息。- 攻击者可以通过修改这个文件来提升自己的权限。
  4. /etc/hosts: - 存储IP地址和主机名的映射关系。- 可以被用来进行主机名解析的篡改。
  5. /etc/crontab: - 存储定时任务信息。- 攻击者可以添加定时任务来执行恶意代码。
  6. /etc/sudoers: - 存储sudo命令的配置信息。- 攻击者可以修改这个文件来获得root权限。

禁用账户操作

passwd -l username禁用账户,这个账户将锁定无法登录

****chage -E 1990-01-01 kali ****用于管理用户账户密码过期信息的命令

  1. chage: 这是Linux系统中的一个命令,用于更改用户密码过期信息。
  2. -E 1990-01-01: 这是chage命令的一个选项,用于设置用户账户的过期日期。在这个例子中,1990-01-01表示账户将在1990年1月1日过期。
  3. kali: 这是用户账户的名称。在这个例子中,kali是目标用户账户。

命令作用

执行 chage -E 1990-01-01 kali 命令后,用户账户 kali 将在1990年1月1日过期。过期后,该账户将无法再登录系统,除非管理员手动更改账户的过期日期。

passwd -S username

  1. passwd: 这是Linux系统中的一个命令,用于更改用户密码。
  2. -S: 这是passwd命令的一个选项,表示显示密码状态。
  3. username: 这是用户账户的名称。在这个例子中,username是目标用户账户。

命令作用

执行 passwd -S username 命令后,将显示指定用户账户的密码状态信息

经过验证之后发现kali用户无法登录了,但是可以root用户 passwd -u kali解锁

Linux文件系统权限

查看权限ls -la /etc/passwd

显示 /etc/passwd 文件的详细信息,包括文件的权限、所有者、用户组、文件大小、最后修改时间等

chown root file 改变文件所有者,

root是新的所有者用户名,表示将文件的所有者改为root 用户。

file是要更改所有者的文件名称。执行这个命令后,文件的所有者将变为 root”用户。

修改文件权限

一、使用chmod命令

  1. 数字设定法- 在Linux中,文件和目录的权限可以用数字来表示。权限分为文件所有者(user)、群组(group)、其他人(other)三个部分,每个部分的权限值相加得到一个三位的八进制数。例如: - 权限的数值表示含义: - r(读)权限值为4:对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。- w(写)权限值为2:对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。- x(执行)权限值为1:对文件而言,具有执行文件的权限;对目录来说该用户具有进入目录的权限。
  2. 文字设定法- 操作对象: - u:表示文件所有者(user)。- g:表示同组(group)用户,即与文件属主有相同组ID的所有用户。- o:表示其他(other)用户。- a:表示所有(all)用户,它是系统默认值。- 操作符号: - ****+****:增加权限。例如chmod g+r,o+r example,使同组和其他用户对文件example有读权限。- ****-****:去除权限。- ****=****:赋予给定权限并取消其他所有权限(如果有的话)。

二、使用chown命令修改文件的归属

  • 这个命令可以用来改变文件或目录的属主和属组。格式为chown 属主:属组 文件或目录,如果要递归修改指定目录下所有文件和子目录的归属,可以使用-R参数,例如chown wang:wang -R test。

三、特殊权限位的设置

  1. 粘着位(sticky)- 粘着位有特殊的作用,在设置了粘着位的目录下,只有超级管理员、该目录的所有者、该文件的所有者可以进行删除操作。如果文件权限最后一位是T,表示该文件有粘着位且最后一位没有执行权限x;t表示最后一位有执行权限x。设置粘滞位的命令是chmod 0 + t文件。

四、文件的访问控制列表(ACL)

  1. 查看ACL信息- 使用getfacl命令可以查看文件上设置的ACL信息。
  2. 管理ACL规则- 使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制,例如setfacl -m u:用户名:权限 文件。

方式一:chmod u=rwx,g+w,o-r file

  • 解释: - u=rwx: 设置文件所有者(user)拥有读(r)、写(w)和执行(x)权限。- g+w: 增加文件所属组(group)的写权限。- o-r: 移除其他用户(others)的读权限。
  • 结果: - 文件所有者拥有全部权限(rwx)。- 文件所属组增加写权限(w)。- 其他用户失去读权限(-r)。

方式二:chmod u+x,g+w,o-r file

  • 解释: - u+x: 增加文件所有者的执行权限。- g+w: 增加文件所属组的写权限。- o-r: 移除其他用户的读权限。
  • 结果: - 文件所有者增加执行权限(x)。- 文件所属组增加写权限(w)。- 其他用户失去读权限(-r)。

方式三:chmod 400 file

  • 解释: - 400: 八进制权限表示法,其中每一位分别表示所有者、所属组和其他用户的权限。- 4: 二进制为100,表示所有者有读权限(r)。- 0: 二进制为000,表示所属组没有任何权限。- 0: 二进制为000,表示其他用户没有任何权限。
  • 结果: - 文件所有者拥有读权限(r)。- 文件所属组没有任何权限。- 其他用户没有任何权限。

Linux系统日志

一,系统日志相关命令

查看 "/var/log" 目录下的文件和目录的详细信息

  • 命令: ls -l /var/log
  • 解释: - ls: 列出目录内容。- -l: 以长格式显示文件和目录的详细信息,包括权限、链接数、所有者、组、文件大小、修改时间等。- /var/log: 目标目录路径。

二,认证信息日志相关命令

tail -3 /var/log/auth.log

  • tail:这是一个用于显示文件末尾内容的命令。
  • -3:这个选项指定显示文件的最后三行。
  • /var/log/auth.log :这是要查看的日志文件的路径。

在渗透测试的后续阶段,需要对我们渗透的痕迹进行抹除清理,这个时候就需要对日志进行一些操作

三,二进制日志相关文件

who /var/log/wtmp |tail -5

  1. who /var/log/wtmp:读取 /var/log/wtmp 文件并显示历史登录记录。
  2. tail -5:显示输出的最后5行。

注意事项

  • /var/log/wtmp 文件通常是二进制文件,who 命令能够正确解析它。
  • 如果 /var/log/wtmp 文件不存在或为空,输出将为空。
  • 该命令需要足够的权限来读取 /var/log/wtmp 文件。

四. dmesg

dmesg 是一个在Linux系统中用于查看内核日志的实用工具。它允许用户查看系统内核的输出消息,包括引导信息、硬件检测、设备驱动程序和系统错误等。通过使用 dmesg 命令,用户可以追踪系统启动过程中的事件,排查故障和问题。

基本用法

  1. 查看系统内核日志

dmesg

执行上述命令后,将显示最新的内核日志信息。日志可能包含各种关于系统硬件、设备驱动程序和内核模块的消息。

  1. 过滤特定关键字 使用 grep 命令结合 dmesg 命令,可以过滤出包含特定关键字的日志信息。例如,过滤出包含 "error" 关键字的日志:

dmesg | grep "error"

  1. 显示最新的N行日志 使用 tail 命令结合 dmesg 命令,可以显示最新的N行日志。例如,显示最新的10行日志:

dmesg | tail -n 10

  1. 按时间戳排序日志 使用 sort 命令结合 dmesg 命令,可以按时间戳对日志进行排序。例如,按时间戳从新到旧排序日志:

dmesg | sort -r

高级用法

  1. 显示和内存、硬盘、USB、TTY相关的信息

dmesg | grep -E 'memory|disk|usb|tty'

  1. 读后删选项 如果想要在读取 dmesg 后,删除已读的日志,可以加上 -C 选项:

dmesg -C

  1. 显示原始数据 dmesg 默认输出的信息是处理过的,想要显示原始数据:

dmesg -r

  1. 显示时间戳 dmesg 命令默认的时间显示是从开机到log记录的时间,想要显示实际的日期和时间:

dmesg -T

  1. 显示特定类型的日志 只输出特定类型的信息,例如守护进程的信息:

dmesg -f daemon

  1. 显示特定级别的信息 只输出特定级别的信息,例如错误和警告:

dmesg --level=err,warn

五. systemd日志相关命令

systemd 是Linux系统中最新的初始化系统(init),它主要的设计目标是克服SysVinit固有的缺点,提高系统的启动速度。systemd 是一个系统和服务管理器,运行为PID 1并负责启动其它程序。它利用Linux的cgroups监视进程,支持快照和系统恢复,维护挂载点和自动挂载点,各服务间基于依赖关系进行精密控制。此外,systemd 还提供了日志进程、控制基础系统配置,维护登录用户列表以及系统账户、运行时目录和设置,可以运行容器和虚拟机,可以简单地管理网络配置、网络时间同步、日志转发和名称解析等功能。

systemctl 是systemd的主命令,用于管理系统和服务。

  • systemctl start <service>:启动指定的服务。
  • systemctl stop <service>:停止指定的服务。
  • systemctl enable <service>:启用指定的服务,使其在系统启动时自动启动。
  • systemctl disable <service>:禁用指定的服务,使其在系统启动时不自动启动。
  • systemctl status <service>:查看指定服务的状态。
  • systemctl list-units:列出当前活动的所有单元。

journalctl 基本用法

  1. 查看所有日志:默认情况下,journalctl 将显示自系统安装以来收集的所有日志。

journalctl

  1. 查看内核日志:使用 -k 选项可以查看内核日志。

journalctl -k

  1. 查看指定时间的日志:使用 --since 和 --until 选项可以过滤出指定时间段内的日志。

journalctl --since "2023-01-01 00:00:00" --until "2023-01-01 01:00:00"

  1. 查看指定服务的日志:使用 -u 选项可以查看指定服务的日志。

journalctl -u nginx.service

  1. 查看指定进程的日志:使用 _PID 字段可以查看指定进程的日志。

journalctl _PID=1234

  1. 实时跟踪日志:使用 -f 选项可以实时跟踪最新的日志,类似于 tail -f。

journalctl -f

  1. 显示指定数量的最新日志:使用 -n 选项可以显示指定数量的最新日志条目。

journalctl -n 20

  1. 调整显示输出:使用 -o 选项可以设置输出格式,例如 short, json, json-pretty 等。

journalctl -o json-pretty

日志过滤

journalctl 提供了丰富的过滤选项,可以根据不同的字段来筛选日志。例如,可以使用 _HOSTNAME, _SYSTEMD_UNIT, _PID, _COMM 等字段来过滤日志。此外,还可以使用 -p 选项来根据日志级别进行过滤,例如 emerg, alert, crit, err, warning, notice, info, debug。

linux存储管理

一,查看内存使用量free -m

二,磁盘使用量 df -hT

-T 打印文件系统类型

三,查看文件或目录大小 du -h

du -h | sort -rh 是一个用于查看当前目录下所有文件和目录的磁盘使用情况的命令组合。

命令分解

  1. du -h: - du 是 "disk usage" 的缩写,用于估计文件空间使用情况。- -h 选项表示 "human-readable",即以易读的格式(如 KB、MB、GB)显示文件大小。
  2. sort -rh: - sort 是一个用于排序文本行的命令。- -r 选项表示 "reverse",即反向排序,从大到小。- -h 选项表示 "human-numeric-sort",即根据易读的文件大小进行排序。

执行结果

执行 du -h | sort -rh 后,你将看到当前目录下所有文件和目录的磁盘使用情况,按从大到小的顺序排列。这对于找出占用空间最大的文件或目录非常有用。

四. 查看硬盘分区 fdisk -l

fdisk 是一个在 Linux 系统中用于分区管理的命令。-l 选项用于列出所有磁盘的分区表信息。这个命令可以帮助你查看系统中所有磁盘的详细分区信息。

使用场景

当你需要查看系统中所有磁盘的分区情况时,可以使用 fdisk -l 命令。这在以下情况下特别有用:

  • 安装新操作系统前查看现有分区情况。
  • 准备对磁盘进行重新分区前查看当前分区布局。
  • 查找某个磁盘是否存在以及其分区情况。

5,挂载分区****mount 命令概述

mount 命令在 Linux 中用于挂载文件系统。文件系统可以是本地设备(如硬盘、USB 设备)或者远程文件系统(如 NFS)。挂载之后,这些文件系统的内容就可以像访问本地目录一样进行访问。

常用选项和参数

  1. 基本语法

mount [-t vfstype] [-o options] device dir

    • -t vfstype: 指定文件系统类型。- -o options: 指定挂载选项。- device: 要挂载的设备或文件。- dir: 挂载点,即设备或文件系统要挂载到的目录。
  1. 常用选项- -a: 挂载 /etc/fstab 中定义的所有文件系统。- -t type: 指定文件系统类型,如 ext4, xfs, nfs 等。- -o: 指定挂载选项,如 ro (只读), rw (读写), loop (将文件作为循环设备挂载) 等。- -L label: 挂载具有特定标签的文件系统。- -U UUID: 挂载具有特定 UUID 的文件系统。

示例用法

  1. 挂载一个设备

sudo mount /dev/sdb1 /mnt

将 /dev/sdb1 设备挂载到 /mnt 目录。

  1. 以只读模式挂载一个设备

sudo mount -o ro /dev/sdb1 /mnt

将 /dev/sdb1 设备以只读模式挂载到 /mnt 目录。

  1. 挂载一个 ISO 文件

sudo mount -o loop /path/to/image.iso /mnt

将 ISO 文件作为循环设备挂载到 /mnt 目录。

  1. 挂载所有在 /etc/fstab 中定义的文件系统

sudo mount -a

注意事项

  • 挂载文件系统时,需要确保你有足够的权限。通常,你需要使用 sudo 或以 root 用户身份运行 mount 命令。
  • 在挂载设备或文件系统之前,确保目标挂载点(目录)已经存在。如果不存在,你需要先创建它。
  • 如果在使用 mount 命令时遇到错误,比如 command not found,这可能意味着你的系统中没有安装 mount 命令。你可以通过包管理器(如 apt-get, yum, dnf)来安装它。

基本网络枚举

  • 基本网络工具

ifconfig

ifconfig 命令在 Linux 和 Unix 系统中用于查看和配置网络接口。它能够显示网络接口的详细信息,包括 IP 地址、MAC 地址、子网掩码、广播地址等。此外,ifconfig 还可以用来启用或禁用特定的网络接口,以及配置网络参数。

主要功能和用途

  1. 查看网络接口信息

ifconfig

运行上述命令将显示当前系统中所有的网络接口信息,包括 IP 地址、MAC 地址、子网掩码、广播地址等。

  1. 配置网络接口

ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up

这个命令将 eth0 网络接口配置为 IP 地址 192.168.0.1,子网掩码 255.255.255.0,并启用该接口。

  1. 启用或禁用网络接口

ifconfig eth0 up

ifconfig eth0 down

这些命令分别用于启用和禁用 eth0 网络接口。

  1. 设置网卡的硬件地址(MAC 地址)

ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx

这个命令将 eth0 网络接口的 MAC 地址更改为指定的地址。

输出结果解释

ifconfig 命令的输出结果通常包含以下信息:

  • 网络接口名称:如 eth0 表示第一块以太网卡。
  • IP 地址:inet 后面的数字表示该网卡的 IP 地址。
  • 子网掩码:netmask 后面的值表示该网卡的子网掩码。
  • 广播地址:broadcast 后面的值表示广播地址。
  • 接收和发送的数据包数量:RX packets 和 TX packets 分别表示接收到的数据包数量和发送的数据包数量。
  • 错误数量:RX errors 和 TX errors 分别表示接收和发送过程中发生的错误数量。

注意事项

  • 使用 ifconfig 命令配置的网络接口信息在网卡重启或机器重启后会失效。如果需要永久保存配置信息,需要修改网络接口的配置文件。
  • ifconfig 命令只能由 root 用户或具有适当权限的用户执行。
  • 在某些现代 Linux 发行版中,ifconfig 命令可能已经被 ip 命令所取代,但仍然广泛使用。

****ip addr ****

ip addr 命令是 Linux 系统中用于查看和管理网络接口 IP 地址的命令。它是 ip 命令集的一部分,属于 iproute2 套件,用于替代传统的 ifconfig 命令。ip addr 提供了更强大和灵活的功能,适用于现代 Linux 系统中的网络配置和管理。

主要功能和用途

  1. 查看网络接口的 IP 地址

ip addr show

这个命令将显示系统中所有网络接口的 IP 地址信息,包括 IP 地址、子网掩码、广播地址等。

  1. 查看特定网络接口的 IP 地址

ip addr show eth0

这个命令仅显示 eth0 网络接口的 IP 地址信息。

  1. 添加 IP 地址

sudo ip addr add 192.168.0.1/24 dev eth0

这个命令将在 eth0 网络接口上添加 IP 地址 192.168.0.1,子网掩码 255.255.255.0。

  1. 删除 IP 地址

sudo ip addr del 192.168.0.1/24 dev eth0

这个命令将从 eth0 网络接口上删除 IP 地址 192.168.0.1,子网掩码 255.255.255.0。

  1. 显示网络接口的详细信息

ip addr show eth0

这个命令将显示 eth0 网络接口的详细 IP 地址信息,包括 IP 地址、子网掩码、广播地址等。

输出结果解释

ip addr 命令的输出结果通常包含以下信息:

  • 网络接口名称:如 eth0 表示第一块以太网卡。
  • IP 地址:inet 后面的数字表示该网卡的 IP 地址。
  • 子网掩码:/24 表示子网掩码为 255.255.255.0。
  • 广播地址:brd 后面的值表示广播地址。
  • 状态信息:如 UP 表示接口已启用,LOWER_UP 表示接口已连接。

注意事项

  • 使用 ip addr 命令配置的网络接口信息在网卡重启或机器重启后会失效。如果需要永久保存配置信息,需要修改网络接口的配置文件。
  • ip addr 命令只能由 root 用户或具有适当权限的用户执行。
  • 在某些情况下,ip addr 命令可能需要配合 ip link 命令一起使用,以实现更复杂的网络配置。

ifdown eth0

ifup eth0

解决方案

  1. 检查网络接口名称 使用 ip link 或 ifconfig 命令查看系统中所有网络接口的名称。如果发现 eth0 已经变为其他名称,可以手动修改网络接口的配置文件,将旧的接口名称改为新的接口名称。
  2. 恢复或重建网络接口配置文件 如果网络接口的配置文件丢失或损坏,可以尝试从备份中恢复,或者重新创建一个新的配置文件。配置文件的内容通常包括网络接口的名称、IP 地址、子网掩码、网关等信息。
  3. 重启网络服务 在某些情况下,重启网络服务可以解决问题。

二、网络配置

/etc/network/interfaces

该文件是网络配置的主要文件之一。该文件用于描述主机中所有的网络接口的信息,不论 Linux 主机中作为 DHCP 客户端还是配置使用静态 IP 地址,都需要对该文件进行修改

在修改完 /etc/network/interfaces 文件后,需要重启网络服务以使配置生效

Networking Manager

在 Linux 中,Networking Manager 是一个用于管理和配置网络连接的工具。它通常用于桌面环境中,以便用户能够轻松地管理和切换不同的网络连接。以下是使用 Networking Manager 的一些基本步骤:

1. 打开 Networking Manager

在大多数桌面环境中,Networking Manager 的图标会显示在系统托盘中。用户只需点击图标即可访问网络连接设置和管理界面。

2. 查看当前活动的网络连接

在 Networking Manager 的主界面中,用户可以看到当前活动的网络连接列表。这些连接可能包括 Wi-Fi、以太网、VPN 等。

3. 添加新的网络连接

要添加新的网络连接,用户可以点击“添加”按钮,然后选择要添加的连接类型(例如,Wi-Fi、以太网、VPN 等)。接下来,用户需要输入连接的详细信息,例如 SSID、密码、IP 地址等。

4. 删除不再使用的网络连接

要删除不再使用的网络连接,用户可以选中要删除的连接,然后点击“删除”按钮。

5. 设置网络配置参数

在 Networking Manager 中,用户可以设置 IP 地址、子网掩码、网关和 DNS 服务器等网络配置参数。要进行这些设置,用户需要选中要配置的连接,然后点击“编辑”按钮。

6. 监控网络连接状态

Networking Manager 可以实时监控网络连接状态,并在连接断开时通知用户。用户可以在主界面中查看当前网络连接的状态。

三,网络连接状态查看

netstat -natup

  • -n:显示数字形式的地址和端口号,而不是尝试解析主机名和服务名称。
  • -a:显示所有连接及其状态,包括监听和非监听的套接字。
  • -t:显示 TCP 连接。
  • -u:显示 UDP 连接。
  • -p:显示与每个连接关联的程序的 PID(进程 ID)和名称。

ss -natup

ss是一个强大的工具,用于获取socket统计信息。它比传统的netstat命令更快、更高效,特别是在处理大量socket连接时。ss命令可以显示TCP、UDP等各类socket的状态,并提供详细信息,如内存使用、进程信息等。

基本用法

  1. 显示所有网络连接

ss

这个命令会列出当前所有的网络连接信息,包括本地地址、远程地址、状态、协议、PID等信息。

  1. 显示特定端口的连接

ss -tlnp | grep 80

这个命令会列出所有正在监听80端口的TCP连接。其中,-t表示只显示TCP连接,-l表示只显示监听状态的连接,-n表示不进行DNS解析,而-p则显示每个连接对应的进程ID。

高级用法

  1. 显示所有TCP连接的详细信息

ss -t -a -e

这个命令会列出所有的TCP连接,并显示每个连接的缓冲区大小、拥塞窗口、发送和接收的数据量等信息。

  1. 查看特定进程的网络连接情况

ss -t -p -o | grep firefox

这个命令会列出所有由Firefox浏览器建立的TCP连接,并显示每个连接对应的进程ID、重传计时器、延迟计时器等信息。

其他用途

  1. 端口扫描

ss -t -l -n | grep :80

这个命令可以扫描一个主机的开放端口,例如,扫描192.168.1.1主机的前1000个端口。

  1. 连接跟踪

ss -t -o state connected

这个命令可以实时跟踪某个连接的状态,例如,跟踪本地地址为192.168.1.2、远程地址为192.168.1.1的TCP连接。

  1. 防火墙管理

ss -t -n -o "state == CLOSED and (sport == :ssh or dport == :ssh)"

这个命令可以列出所有在iptables中被DROP的TCP连接。

四,OSI二层地址查看工具

arp -en

  • arp: 这是 Address Resolution Protocol 的缩写,用于管理和显示 IP 地址和 MAC 地址之间的映射关系。
  • -e: 这个选项表示以易读的格式显示 ARP 缓存中的条目。它会显示 IP 地址、MAC 地址、设备名称等信息。
  • -n: 这个选项表示不解析域名,只显示数值形式的 IP 地址。这样可以加快命令的执行速度,特别是在网络较慢或 DNS 解析较慢的情况下。

在此图中:

  • Address: 表示 IP 地址。
  • HWtype: 表示硬件类型,通常为 ether,表示以太网。
  • HWaddress: 表示 MAC 地址。
  • Flags: 表示标志位,C 表示这个条目是有效的。
  • Mask: 表示子网掩码。
  • Iface: 表示网络接口名称,例如 eth0。

五,路由信息及其查看工具

route

查看帮助命令

参数解释

  • -v, --verbose: 提供详细信息。
  • -n, --numeric: 不解析名字,显示数字形式的地址。
  • -e, --extend: 显示额外的信息。
  • -F, --fib: 显示转发信息库(默认)。
  • -C, --cache: 显示路由缓存而不是转发信息库。

地址族选项

  • <AF>: 指定地址族,默认是 inet(DARPA Internet)。其他可能的地址族包括 inet6(IPv6)、ax25(AMPR AX.25)、netrom(AMPR NET/ROM)、rose(AMPR ROSE)、ipx(Novell IPX)、ddp(Appletalk DDP)、x25(CCITT X.25)。

修改路由表

  • add: 添加路由。
  • del: 删除路由。
  • flush: 清空路由表。

ip route

命令格式

ip route show table all

ip route get 192.168.1.1

ip route add default via 192.168.1.1 dev eth0

ip route del default via 192.168.1.1 dev eth0

ip route flush cache

参数解释

  • show: 显示路由表。
  • get: 获取特定目标的路由信息。
  • add: 添加路由。
  • del: 删除路由。
  • flush: 清空路由缓存。

ip route add 10.1.1.0/24 dev eth0

  • ip route add: 这是ip命令的一部分,用于添加路由。
  • 10.1.1.0/24: 这是目标网络的IP地址和子网掩码。10.1.1.0是网络地址,/24表示子网掩码为255.255.255.0,即有24位用于网络部分。
  • dev eth0: dev是设备(device)的缩写,eth0是网络接口的名称。这个参数指定了数据包应该通过哪个网络接口发送出去。

执行效果

执行这个命令后,系统将会把目标网络10.1.1.0/24的所有数据包通过eth0接口发送出去。这意味着,如果系统需要与10.1.1.0/24网络中的任何设备通信,它将使用eth0接口来发送和接收数据包。

路由跟踪工具

****traceroute ****www.baidu.com

这个命令会跟踪从你的主机到www.baidu.com 所经过的路由器,并显示每个路由器的响应时间。

输出解释

traceroute命令的输出通常包括以下信息:

  • 跳数(hop number): 数据包经过的路由器数量。
  • 路由器IP地址: 每个路由器的IP地址。
  • 响应时间: 数据包从源主机到该路由器并返回所需的时间,通常以毫秒为单位。

注意事项

  • traceroute命令可能会因为网络防火墙或其他安全设置而无法完成追踪。这是因为一些网络设备可能会阻止ICMP数据包。
  • 在Windows系统中,traceroute命令的等效命令是tracert。

traceroute 选项 目标地址

参数解释

  • 目标地址: 这是你要追踪的目标主机的IP地址或域名。例如,www.baidu.com

ssh服务

systemctl start ssh

  • systemctl: 这是用于管理系统服务的命令,通常在Linux系统中使用。它可以启动、停止、重启、启用或禁用系统服务。
  • start: 这是systemctl命令的一个子命令,用于启动指定的服务。
  • ssh: 这是要启动的服务名称。在大多数Linux发行版中,SSH服务通常被称为sshd或ssh。

使用场景

当你需要远程连接到另一台计算机时,首先需要确保目标计算机上的SSH服务正在运行。如果SSH服务未启动,你可以使用systemctl start ssh命令来启动它。

ssh root@127.0.0.1

  • ssh: 这是用于启动SSH客户端程序的命令。
  • root: 这是指定要以哪个用户身份登录到远程主机。在这个例子中,root是用户身份。
  • 127.0.0.1: 这是目标主机的IP地址。127.0.0.1是本地主机的IP地址,意味着你将尝试登录到当前计算机。

使用场景

这个命令通常用于以下情况:

  1. 测试SSH服务是否正常工作。
  2. 需要在同一台计算机上使用不同的用户账户进行操作。
  3. 设置SSH密钥认证或进行其他SSH配置测试。

ssh的配置文件 /etc/ssh/sshd_config

  • sshd_config:这是OpenSSH SSH服务器守护进程的配置文件。它主要用于设置SSH服务器服务的相关参数,包括监听地址、监听端口、允许验证次数、是否允许root账户登录等等。参数以“关键字=参数”形式出现,每行一对。参数可以用双引号括起来,以表示包含空格的参数。只有root账户或者拥有root权限的账户才能配置和修改这个文件,修改后需要重启SSH服务才能生效。
  • ssh_config:这是一个全局配置文件,影响所有用户的所有SSH连接。它包含了各种SSH客户端的配置选项,比如默认连接的端口、使用的加密算法、是否启用GSSAPI认证等。
  • ~/.ssh/config:这是一个用户级别的SSH配置文件,优先级高于全局配置文件/etc/ssh/ssh_config。每个用户可以在自己的家目录中创建这个文件,以定义自己的SSH客户端配置选项。

ssh客户端配置文件 /root/.ssh/know_hosts

known_hosts文件是SSH客户端配置文件的一部分,它存储了用户曾经连接过的远程主机的公钥。这个文件的主要作用是:

  1. 验证远程主机的真实性:当用户首次通过SSH连接到一个新的远程主机时,远程主机的公钥会被添加到known_hosts文件中。以后每次连接时,SSH客户端都会检查这个文件中的公钥是否与远程主机提供的公钥匹配。如果匹配,就认为这个主机是真实的;如果不匹配,就会发出警告,提示可能存在中间人攻击的风险。
  2. 防止中间人攻击:通过验证远程主机的公钥,known_hosts文件有助于防止一种称为“中间人攻击”的安全威胁。在这种攻击中,攻击者会拦截并篡改用户与远程主机之间的通信,试图冒充远程主机来窃取用户的敏感信息。

known_hosts文件的内容通常由SSH客户端自动管理,用户不需要手动编辑这个文件。每一行代表一个已知的主机,格式如下:

[hostname][keytype][key]

其中,hostname是远程主机的名称或IP地址,keytype是公钥的类型(如RSA、DSA等),key是公钥的内容。

ssh的密钥认证

客户端生成密钥对

  1. 对称加密:两公钥/两私钥
  2. 非对称加密:一公钥一私钥(默认是rsa非)

客户端将公钥上传给服务器

客户端使用私钥和服务器的公钥进行匹配

5,在服务端禁用root登录

修改配置文件

修改第38行被注释的命令

重启sshd服务

在客户端上测试登录服务端

ssh远程拷贝

主机文件上传与下载

下载 scp [可选参数] file_source file_target

SCP命令还支持一些高级选项,例如:

  • -C:在传输过程中压缩文件。
  • -P:指定SSH端口(默认是22)。
  • -r:递归复制目录及其内容。
  • -p:保留文件的访问和修改时间。
  1. 将本地文件复制到远程主机:

scp /path/to/local/file user@remote_host:/path/to/remote/directory

  1. 将远程主机上的文件复制到本地:

scp user@remote_host:/path/to/remote/file /path/to/local/directory

  1. 将本地目录复制到远程主机:

scp -r /path/to/local/directory user@remote_host:/path/to/remote/directory

****scp local_file remote_username@remote_ip:remote_folder ****

** **11,history命令

标签: linux 安全 运维

本文转载自: https://blog.csdn.net/2401_85701185/article/details/143820368
版权归原作者 余束束 所有, 如有侵权,请联系我们删除。

“Linux基础操作与安全实践指南”的评论:

还没有评论