安全常用的Linux命令总结

admin 2025年1月9日22:05:36评论13 views字数 35421阅读118分4秒阅读模式

 

openssl

openssl是一个开源的加密工具包,提供了各种加密、解密、签名、验证等功能

openssl passwd -1 123

password表示这个命令用于处理密码相关的操作,-1参数指定使用MD5加密算法对密码“123”进行加密处理。MD5是一种常用的哈希算法,它将任意长度的输入数据转换为固定长度的输出(通常是128位的哈希值)。使用这个命令可以将“123”生成为MD5加密后的密文

openssl passwd -5 123

-5参数表示使用SHA-256哈希算法对密码“123”进行哈希加密处理。SHA-256是一种更安全的哈希算法。它生成的哈希值长度为256位。每次对相同的密码进行SHA-256加密时,由于加密过程中通常会引入随机因素(如盐值等),所以每次生成的密文都是不一样的,这增加了密码的安全性,即使攻击者获得了密文,也很难通过逆向计算得到原始密码。安全常用的Linux命令总结

文件管理

stat

  • 显示文件的详细信息,包括时间戳
stat filenam

touch

主要用于更新文件的访问时间和修改时间(时间戳)。如果指定的文件不存在,touch 命令会创建一个新的空文件。

touch newfile

参数

-t 更新文件的修改时间为特地的值,也会一起更新访问时间,和修改时间相等
-a 仅更新文件的访问时间
-r 使用参考文件的时间戳更新目标文件
-m 仅更新修改时间
  1. 创建多个新文件:
touch file1.txt file2.txt

安全常用的Linux命令总结

  1. 更新文件的修改时间为特定时间:
touch -t 202310121530 file.txt
  1. 使用参考文件的时间戳更新目标文件:
 touch -r referencefile.txt targetfile.txt

安全常用的Linux命令总结

  1. 仅更新文件的访问时间:
touch -a file.txt

安全常用的Linux命令总结

  1. 仅更新文件的修改时间:
touch -m file.txt

安全常用的Linux命令总结

  1. 使用自然语言描述的日期和时间:
touch -d "yesterday 12:00" file.txt
访问时间和修改时间设置为昨天中午12点

安全常用的Linux命令总结

rm

rm newfile

删除多个文件

rm 1.txt 2.txt

安全常用的Linux命令总结删除目录

rm -r newdir 递归删除所有文件目录及其内容
rm -rf newdir 递归强制删除所有目录及其内容

安全常用的Linux命令总结

mkdir

mkdir newdir
mkdir adir bdir 创建多个目录
mkdir -p path/to/directory 递归创建多级目录。如果中间的某个目录不存在,mkdir会自动创建这些目录

安全常用的Linux命令总结

-v 显示详细信息
-vp 递归创建显示详细信息

安全常用的Linux命令总结设置目录权限

mkdir -m 755 mydir

创建一个名为 mydir 的目录,并将其权限设置为 755(即所有者有读、写、执行权限,组用户和其他用户有读和执行权限)。安全常用的Linux命令总结

rmdir

与 rm 命令不同,rmdir 只能删除空目录,不能删除包含文件或子目录的目录

rmdir newdir
rmdir dir1 dir2 dir3 删除多个目录
rmdir -p path/to/directory 递归删除多级空目录。如果父目录变为空,也会被删除

安全常用的Linux命令总结

mv

用于移动文件和目录,也可以用来重命名文件和目录

mv file1.txt file2.txt

这条命令将当前目录下的 file1.txt 重命名为 file2.txt。如果 file2.txt 已经存在,它会被覆盖安全常用的Linux命令总结

  1. 不覆盖模式移动文件:
 mv -n file1.txt file2.txt

如果 file2.txt 已经存在,不会覆盖,也不会提示。

  1. 强制移动文件:
mv -f file1.txt file2.txt

即使 file2.txt 已经存在,也会直接覆盖,不会提示确认。

  1. 更新模式移动文件:
 mv -u file1.txt file2.txt

只有当 file1.txt 比 file2.txt 新或 file2.txt 不存在时,才会移动。参数-i: 交互模式,如果目标文件或目录已经存在,会提示确认是否覆盖-v: 显示详细信息,显示移动或重命名的每个文件或目录

cp

cp file.txt newwdir.txt

cp [选项]... 源文件 目标文件 
cp [选项]... 源文件... 目录

参数

  • -i 或 --interactive:在覆盖已存在的文件之前提示用户。
  • -r-R--recursive:递归地复制目录及其子目录下的所有文件。如果目标是一个目录,则会将源目录下的所有内容复制到该目录下。
  • -u--update:仅当目标文件比源文件旧,或目标文件不存在时才进行复制。
  • -v--verbose:显示详细的处理信息,比如复制了哪些文件。
  • -a--archive:归档模式,等同于 -dR --preserve=all,用于保持原始文件的所有属性(如权限、时间戳等)。
  • -f--force:如果目标文件无法打开或写入,则删除它并尝试再次复制。
  • -p:保留源文件或目录的属性(如修改时间、访问时间和权限)。
  1. 复制多个文件到一个目录
cp file1.txt file2.txt /path/to/destination/

这里,file1.txt 和 file2.txt 都会被复制到 /path/to/destination/ 目录下。安全常用的Linux命令总结

  1. 递归复制目录
cp -r directory/ newdirectory/

这个命令将 directory/ 及其所有内容复制到新的 newdirectory/ 中。安全常用的Linux命令总结

  1. 更新模式复制
cp -u source.txt destination.txt

只有当 source.txt 比 destination.txt 新或 destination.txt 不存在时,才会执行复制操作。安全常用的Linux命令总结

ln

链接分为两种类型:硬链接(hard link)和符号链接(symbolic link,也称软链接)。下面详细介绍 ln 命令的用法和选项。

基本语法

ln [选项]... 源文件 目标文件
ln [选项]... 源文件... 目标目录

参数

  • -s--symbolic:创建符号链接(软链接)而不是硬链接。
  • -f--force:如果目标文件已经存在,则删除目标文件后创建链接。
  • -i--interactive:在覆盖已存在的文件之前提示用户。
  • -v--verbose:显示详细的处理信息。
  • -n--no-dereference:当目标是一个符号链接时,不会跟随符号链接的目标,而是直接替换符号链接本身。

链接类型

  1. 硬链接
    • 硬链接是指向同一个 inode(索引节点)的多个文件名。每个硬链接都是一个独立的文件名,但它们共享相同的数据。
    • 硬链接不能跨文件系统创建,也不能指向目录。
  2. 符号链接(软链接)

    -软连接是一个特殊的文件,它包含了一个路径,指向另一个文件或目录。-软连接可以跨文件系统创建,并且可以指向目录。

软连接

ln -s original.txt symlink.txt

安全常用的Linux命令总结

注意事项

  • 软连接可以跨文件系统创建。
  • 软连接可以指向目录。
  • 删除源文件会使符号链接失效(成为“断链”)。

硬链接

ln ~/offsec123.txt hardlink.txt

~/offsec123.txt:源文件的路径。~ 表示当前用户的主目录。hardlink.txt:创建的硬链接的名称。安全常用的Linux命令总结

主要事项

  • 硬链接不能跨文件系统创建。
  • 硬链接不能指向目录。
  • 删除源文件不会影响硬链接,因为它们共享同一个 inode。

示例

  1. 创建硬链接
ln file.txt hardlink.txt

这条命令将在当前目录下创建一个名为 hardlink.txt 的硬链接,指向 file.txt

  1. 创建符号链接
ln -s /path/to/file.txt symlink.txt

这条命令将在当前目录下创建一个名为 symlink.txt 的符号链接,指向 /path/to/file.txt

  1. 强制创建符号链接
ln -sf /path/to/file.txt existing_symlink.txt

如果 existing_symlink.txt 已经存在,这条命令会先删除它,然后创建一个新的符号链接。

  1. 在目录中创建多个链接
ln file1.txt file2.txt /path/to/directory/

这条命令将在 /path/to/directory/ 目录下创建 file1.txt 和 file2.txt 的硬链接。安全常用的Linux命令总结

  1. 创建指向目录的符号链接
ln -s /path/to/source_directory /path/to/link_directory
  • 连接文件夹需要自己创建这条命令将在 /path/to/link_directory 创建一个符号链接,指向 /path/to/source_directory安全常用的Linux命令总结

文件读取

cat

首先是最常见的,那就是cat了,用于连接文件并打印到标准输出设备上,用法为:

cat /f*

不需要完整文件名

tac

用于将文件以行为单位的反序输出,用法为:

tac /f*

不需要完整文件名

more/bzmore

类似cat命令,会以一页一页的显示,方便使用者逐页阅读,用法为

more /f* 
bzmore /f*

不需要完整文件名

less/bzless

作用与more类似,都用来浏览文本文件中的内容,不同之处在于,使用 more 命令浏览文件内容时,只能不断向后翻看,而使用 less 命令浏览,既可以向后翻看,也可以向前看。用法为:

less /f*
bzless /f*

不需要完整文件名

head

head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。用法为:

head /f*

不需要完整文件名

tail

作用和head相似,但它默认显示最后 10 行。用法为:

tail /f*

不需要完整文件名

nl

可以为输出列加上编号。用法为:

nl /f*

不需要完整文件名

sed

Sed 代表流编辑器Stream Editor,常用于 Linux 中基本的文本处理.用法为:

sed p /f*

不需要完整文件名

sort

用于将文本文件内容加以排序。用法为:

sort /f*

不需要完整文件名

uniq

删除文件中的连续重复行 如果你在不使用任何参数的情况下使用 uniq 命令,它将删除所有连续的重复行,只显示唯一的行。用法为:

uniq /f*

不需要完整文件名

rev

反转一个或多个文件的行。用法为

rev /f*

不需要完整文件名,获得的是逆序的flag当然,我们可以使用rev /f* | rev获得正序的flag:

od

od(Octal Dump)命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或 ASCII 编码字符方式显示,系统默认的显示方式是八进制。用法为:

od -c /f*

不需要完整文件名你可能会奇怪中间那个0000020是啥,我们可以看到这个命令在linux里的运行结果:左边一列其实是它的地址,记得把地址0000020删了就是文件内容了,当然直接f12也可以看到linux里那样的运行结果:

vim/vi

这俩都是Linux里的文件编辑器,我们在网页直接用system("vim /f*");虽然不会进入编辑模式但还是可以看到里面的内容。用法为:

vim /f* 
vi /f*

不需要完整文件名

man

man 命令是 Linux 下的帮助指令,通过 man 指令可以查看 Linux 中的指令帮助、配置文件帮助和编程帮助等信息,类似于vim/vi,直接对文本运行可以看到文本内容。用法为:

man /f*

不需要完整文件名

paste

使用paste命令可以将每个指定文件里的每一行整合到对应一行里写到标准输出,之间用制表符分隔。用法为:

paste /f*

不需要完整文件名

grep

查找文件里符合条件的字符串。用法为:

grep { /f*

不需要完整文件名

file

查看文件信息或类型。用法为:

file -f /f*

不需要完整文件名

dd

用于读取、转换并输出数据。用法为:

dd if=/flag

需要完整文件名

date

使用指定格式显示时间,或者设置系统时间,有时用于suid提权。用法为:

date -f /f*

不需要完整文件名。但他本质上是一种报错读取,直接system传值是没回显的,我们要读取报错才行:

a=$(date -f /f* 2>&1);echo $a;

然后再编一下码:

a%3D%24(date%20-f%20%2Ff*%202%3E%261)%3Becho%20%24a%3B

报错读取

linux里可以用点号执行shell脚本,同样,我们也可以用这种方法报错读取文件内容,前提是你的用户组有读取文件的权限

a=$(. /f* 2>&1);echo $a;   #a%3D%24(.%20%2Ff*%202%3E%261)%3Becho%20%24a%3B

如果你的用户组有执行文件的权限,你可以直接/f*获得文件内容:

a=$(/f* 2>&1);echo $a;  #a%3D%24(%2Ff*%202%3E%261)%3Becho%20%24a%3B

diff

用于比较文件的内容,我们可以把想读取的文件内容和一个已知的文件进行比较,获得差集也就是我们想要的内容了,如:

diff /f* /etc/passwd

不需要完整文件名

搜索文件

which

which 命令是Linux系统中用于查找并显示给定命令的绝对路径的一个工具。它通过检查环境变量 PATH 中列出的目录来确定可执行文件的位置。这对于了解某个命令是否已安装以及其具体位置非常有用。下面是关于 which 命令的一些重要细节:

基本语法

which [选项] [命令]

参数

  • -a:显示所有匹配的可执行文件路径。默认情况下,which 只显示第一个匹配项。
  • --skip-alias:跳过别名,直接显示实际命令的路径。
  • -V 或 --version:显示 which 命令的版本信息。

使用示例

  1. 查找单个命令的位置
which java

这条命令将返回 java 命令的完整路径安全常用的Linux命令总结

如果使用which命令返回,证明可能文件有同名加上-a参数即可

shell built-in command

安全常用的Linux命令总结

  1. 查找多个命令的位置
which man java python

这条命令会分别显示 manjava, 和 python 命令的路径。安全常用的Linux命令总结

  1. 显示所有匹配的路径如果一个命令在多个路径中有副本,可以使用 -a 选项来显示所有副本的位置。
which -a ls

安全常用的Linux命令总结

  1. 查找别名的位置如果你为某个命令设置了别名,which 会显示别名的定义。
which ll

也可以使用
type ll

安全常用的Linux命令总结

  1. 查找并忽略别名使用 --skip-alias 选项可以跳过别名,直接获取命令的实际路径。
which --skip-alias ll

如果不能使用,可以先

which ll 或者 type ll 
得到别名命令来源,这里是ls -l
之后
which -a ls 即可
  1. 查看 which 自身的位置
    which  -a which

    这条命令显示 which 命令本身的路径。安全常用的Linux命令总结

注意事项

  • which 命令只能用于查找可执行文件,对于其他类型的文件(如文档或源代码文件),应该使用 whereis 或 find 命令。
  • 如果 which 没有找到指定的命令,那么它将不会有任何输出,这表示该命令不在 PATH 环境变量指定的任何目录中。
  • which 的搜索结果受到 PATH 环境变量的影响,不同的用户可能会有不同的 PATH 设置,因此即使是相同的命令,在不同的用户环境下也可能得到不同的搜索结果。

通过这些基本信息,你应该能够有效地使用 which 命令来查找Linux系统中命令的具体位置。

locate (local.db)

locate 命令是 Linux 系统中用于快速查找文件和目录的工具。它通过搜索预先构建的数据库来查找文件,而不是实时搜索文件系统。这使得 locate 命令比 find 命令更快,但前提是数据库必须是最新的。

基本语法

locate [选项] [模式]

选项

wh

  • -b:仅匹配基础文件名(即不包括路径)。
  • -c:仅显示找到的文件数量。
  • -i:忽略大小写。
  • -n <数目>:最多显示指定数量的匹配项。
  • -P 或 --no-check-existing:不检查文件是否存在。
  • -r:使用正则表达式进行匹配。
  • -S:显示数据库统计信息。
  • -u:更新数据库(通常由 updatedb 命令完成)。
  • -0:以空字符分隔结果,适合用于脚本处理。

使用示例

  1. 基本使用
locate whoami.exe

查找whoami.exe的位置安全常用的Linux命令总结

  1. 忽略大小写
locate Whoami.exe

这条命令会查找包含 Whoami.exe 的文件,忽略大小写。安全常用的Linux命令总结

  1. 限制结果数量
locate -n 5 example

这条命令最多显示 5 个匹配项。安全常用的Linux命令总结

  1. 使用正则表达式
locate -r -n 5 '/home/kali.*.txt$'

这条命令会查找 /home 目录下所有以 .txt 结尾的文件。安全常用的Linux命令总结

  1. 仅匹配基础文件名
locate -b -n 5 user

这条命令会查找基础文件名为 user 的文件,不包括路径。安全常用的Linux命令总结

  1. 显示找到的文件数量
locate -c ls

这条命令会显示找到的 ls 文件的数量。安全常用的Linux命令总结

更新数据库

locate 命令依赖于一个预先构建的数据库,该数据库通常由 updatedb 命令定期更新。你可以手动运行 updatedb 来更新数据库。

sudo updatedb

注意事项

  • 数据库更新locate 命令的速度优势来自于预构建的数据库。如果文件系统发生了变化,而数据库没有及时更新,locate 的结果可能不准确。因此,建议定期运行 updatedb
  • 权限问题updatedb 通常需要 root 权限来访问所有目录和文件。
  • 性能:虽然 locate 很快,但如果文件系统非常大,updatedb 的运行时间可能会较长。

find

find 命令是 Linux 系统中一个非常强大且灵活的文件查找工具。它可以基于多种条件(如文件名、文件类型、修改时间、文件大小等)来查找文件和目录。下面是对 find 命令的详细解释,包括其基本语法、常用选项和一些实用示例。

基本语法

find [路径] [表达式]

文件名和路径

  • -name <pattern>:按文件名查找,支持通配符 *? 和 [ ]
  • -iname <pattern>:按文件名查找,忽略大小写。
  • -path <pattern>:按路径查找,支持通配符。
  • -ipath <pattern>:按路径查找,忽略大小写。
  • -user 用户  :选项指定要查找的文件必须属于指定用户

文件类型

  • -type <type>:按文件类型查找。
    • f:普通文件
    • d:目录
    • l:符号链接
    • c:字符设备
    • b:块设备
    • p:命名管道(FIFO)
    • s:套接字

文件大小

  • -size <size>:按文件大小查找。
    • +n:大于 n 字节
    • -n:小于 n 字节
    • n:恰好 n 字节
    • nK:n 千字节
    • nM:n 兆字节
    • nG:n 吉字节

修改时间

-mtime 以天为单位
-mmin 以分钟为单位
参数都是一样的,这里以-mtime举例
  • -mtime <n>:按文件修改时间查找。
    • +n:n 天前修改过的文件
    • -n:n 天内修改过的文件
    • n:恰好 n 天前修改过的文件
  • -atime <n>:按文件访问时间查找。
  • -ctime <n>:按文件状态改变时间查找。

执行操作

  • -exec <command> {} ;:对找到的每个文件执行命令。
  • -ok <command> {} ;:类似 -exec,但会提示用户确认。
  • -delete:删除找到的文件。

实用示例

  1. 按文件名查找
find ~ -name "flag*"

这条命令会在家目录及其子目录中查找以flag开头的文件安全常用的Linux命令总结

  1. 忽略大小写查找
find /home/user -iname "example.txt"

这条命令会在家目录及其子目录中查找以flag开头的文件,且忽略大小写安全常用的Linux命令总结

  1. 按路径查找
find /home/user -path "*/logs/*.log"

这条命令会在家目录及其子目录中查找路径中包含 logs 且文件名以 .log 结尾的文件。安全常用的Linux命令总结

  1. 按文件类型查找
find  -type d

这条命令会在当前目录及其子目录中查找所有的目录安全常用的Linux命令总结

  1. 按文件大小查找
find ~ -size +100M

这条命令会在家目录及其子目录中查找大于 100MB 的文件。安全常用的Linux命令总结

  1. 按修改时间查找
find ~ -mmin -30

查找家目录及其子目录中在过去 30 分钟内被修改过的所有文件和目录。安全常用的Linux命令总结

  1. 执行命令
find ~ -name  "*.txt" -mtime 10 -exec cat {} ;
  • ~:指定要搜索的目录路径为家目录。
  • -name "*.txt":按文件名查找,匹配所有扩展名为 .txt 的文件。
    • *:通配符,匹配任意字符序列。
    • *.txt:匹配所有以 .txt 结尾的文件。
  • -exec cat {} ;:对找到的每个文件执行 cat 命令。
    • {}:占位符,表示当前找到的文件路径。
    • ;:表示 -exec 命令的结束。安全常用的Linux命令总结
  1. 删除文件
find -name "*.txt" -delete

在当前目录及其子目录中查找所有 .txt 文件并删除它们。

组合使用

find ~ -mtime 2 -ls | sort -k9 -k10 | more
  1. find ~ -mtime 2 -ls
    • ~:表示当前用户的家目录。
    • -mtime 2:查找恰好在 2 天前被修改的文件。
    • -ls:显示找到的文件的详细信息,输出格式类似于 ls -l,包括文件权限、链接数、所有者、组、文件大小、修改日期和时间、文件路径等。
  2. sort -k9 -k10
    • sort:对输入进行排序。
    • -k9:按第 9 列排序,一般是日期的那一列
    • -k10:按第 10 列排序,一般是时间的那一列
    • 这两个选项结合起来可以按文件名进行排序。安全常用的Linux命令总结
  3. more
    • more:分页显示输出,方便查看大量输出内容。安全常用的Linux命令总结
find ~ -type f -iname '*.sh' -mmin -30 -ls
  1. -type f
    • 查找普通文件(不包括目录、符号链接等)。
  2. -iname '*.sh'
    • 按文件名查找,支持通配符 *,并且不区分大小写。
    • *.sh:匹配所有以 .sh 结尾的文件。
    • -iname:不区分大小写。
  3. -mmin -30
    • 按分钟数查找文件的最后修改时间。
    • -30:表示在过去 30 分钟内被修改的文件。
  4. -ls
    • 显示找到的文件的详细信息,类似于 ls -l 命令的输出,包括文件权限、链接数、所有者、组、文件大小、修改日期和时间、文件路径等。安全常用的Linux命令总结
find -name '*.svn' -exec rm -rf {} ;
  1. find .
    • 从当前目录(.)开始搜索。
  2. -name '.svn'
    • 查找所有名为 .svn 的目录。
  3. -exec rm -rf {} ;
    • 对每个找到的 .svn 目录执行 rm -rf 命令,递归删除这些目录及其内容。安全常用的Linux命令总结
find ~ -user kali -type f -perm -o=w -name '*.sh' 2>/dev/null

-user kali:    - 这个选项指定要查找的文件必须属于用户 kali。只有那些所有者为 kali 的文件才会被选中。-type f:    - 这个选项指定要查找的文件类型为普通文件(即不是目录、符号链接等)。只有普通文件会被考虑。-perm -o=w:    - 这个选项指定要查找的文件必须具有其他用户(other)的写权限。    - -o=w 表示文件至少具有其他用户的写权限,可能还包含其他权限。    - 具体来说,-o=w 查找的是权限位中 others 部分包含 w(写权限)的文件。-name '*.sh':    - 这个选项指定要查找的文件名必须以 .sh 结尾。这通常表示这些文件是 shell 脚本。2>/dev/null:    - 这是一个重定向操作,将标准错误输出(文件描述符 2)重定向到 /dev/null。    - /dev/null 是一个特殊的文件,任何写入它的内容都会被丢弃。这样做的目的是忽略 find 命令执行过程中产生的任何错误信息,例如由于权限不足而无法访问某些目录时产生的“Permission denied”消息。安全常用的Linux命令总结

注意事项

  • 性能find 命令会实时搜索文件系统,因此在大型文件系统中可能会比较慢。
  • 权限find 命令可能无法访问某些受权限保护的目录或文件,可以使用 sudo 提升权限。
  • 递归find 默认会递归搜索子目录,可以在路径后加上 -maxdepth 1 限制搜索深度。

账号相关

用户账号数据库相关文件

/etc/password 存储系统中所有用户账户的基本信息
/etc/shadow 用于存储用户账户的密码和其他安全相关信息
/etc/gshdow 用于存储用户组的密码和其他安全相关信息

/etc/passwd:

username:password:UID:GID:GECOS:home_directory:shell

字段解释

  • username: 用户名。
  • password: 用户的密码。在现代系统中,这个字段通常包含一个占位符(如 x 或 *),实际的密码信息存储在 /etc/shadow 文件中。
  • UID: 用户的唯一标识符(User ID)。
  • GID: 用户的主要组的唯一标识符(Group ID)。
  • GECOS: 用户的全名或其他注释信息,通常包含用户的全名、办公室位置、电话号码等。
  • home_directory: 用户的家目录路径。
  • shell: 用户的登录 shell。示例
root:x:0:0:root:/root:/bin/bash
alice:x:1000:1000:Alice Smith,,,:/home/alice:/bin/bash
bob:x:1001:1001:Bob Johnson,,,:/home/bob:/bin/bash

解释:

  • root: 用户名。
  • x: 密码字段,表示密码存储在 /etc/shadow 文件中。
  • 0: 用户的 UID。
  • 0: 用户的主要 GID。
  • root: GECOS 字段,通常包含用户的全名或其他注释信息。
  • /root: 用户的家目录路径。
  • /bin/bash: 用户的登录 shell。安全常用的Linux命令总结/etc/shadow:这个文件也与用户账号相关,主要存储用户密码的加密信息以及密码的一些属性,如密码最后一次修改时间、密码最短使用期限、密码最长使用期限等。只有具有足够权限的用户(通常是root)才能读取这个文件,以提高密码的安全性。每行代表一个用户,格式如下:
username:password:last_changed:min_age:max_age:warn_inactive:expire_date:reserved_field

字段解释

  • username: 用户名。
  • password: 加密后的密码。如果为空,表示没有设置密码;如果包含 ! 或 *,表示账户被锁定。
  • last_changed: 密码上次更改的日期,以 Julian 日期表示(从 1970 年 1 月 1 日算起的天数)。
  • min_age: 密码最短使用期限(天数),在这段时间内用户不能更改密码。
  • max_age: 密码最长使用期限(天数),超过这段时间后用户必须更改密码。
  • warn_inactive: 密码过期前多少天开始警告用户。
  • expire_date: 账户过期日期,以 Julian 日期表示。
  • reserved_field: 保留字段,目前未使用。示例
alice:$6$hashvalue$anotherhashvalue:18999:0:99999:7:::

解释:

  • alice: 用户名。
  • $6$hashvalue$anotherhashvalue: 加密后的密码(使用 SHA-512 算法)。
  • 18999: 密码上次更改的 Julian 日期。
  • 0: 密码最短使用期限为 0 天。
  • 99999: 密码最长使用期限为 99999 天。
  • 7: 密码过期前 7 天开始警告用户。
  • :::: 保留字段,目前未使用。安全常用的Linux命令总结/etc/gshadow/etc/gshadow 文件用于存储用户组的密码和其他安全相关信息。它也是一个只读文件,通常只有 root 用户可以读取和写入。
group_name:password:admin_list:member_list

字段解释

  • group_name: 用户组的名称。
  • password: 用户组的密码。通常为空或包含 !,表示没有设置密码。
  • admin_list: 用户组的管理员列表,用逗号分隔。
  • member_list: 用户组的成员列表,用逗号分隔。示例
root:!::alice,bob
users:!::alice,bob,carol
sudo:!::alice

解释:

  • root: 用户组名。
  • !: 没有设置密码。
  • ::: 管理员列表为空。
  • alice,bob: 成员列表,包含 alice 和 bob安全常用的Linux命令总结

组账号相关命令

cat /etc/group

用于显示系统中的用户组信息。/etc/group 文件包含了系统中所有用户组的定义

每个用户组一行,每一行的格式如下:

group_name:password:GID:user_list
  • group_name: 用户组的名称。
  • password: 用户组的密码(在现代系统中,这个字段通常为空或包含 x,表示密码存储在 /etc/gshadow 文件中)。
  • GID: 用户组的标识号(Group ID)。
  • user_list: 属于该用户组的用户列表,用逗号分隔。示例输出假设 /etc/group 文件的内容如下:
root:x:0:alice,bob
users:x:100:alice,bob,carol
sudo:x:27:alice

解释:

  • root: 用户组名为 root,密码字段为 x(表示密码存储在 /etc/gshadow 中),GID 为 0,成员包括 alice 和 bob
  • users: 用户组名为 users,密码字段为 x,GID 为 100,成员包括 alicebob 和 carol
  • sudo: 用户组名为 sudo,密码字段为 x,GID 为 27,成员包括 alice安全常用的Linux命令总结

/etc/passwd、/etc/shadow、/etc/group之间的关系

它们之间的关系可以这样理解,即先在 /etc/group 文件中查询用户组的 GID 和组名;然后在 /etc/passwd 文件中查找该 GID 是哪个用户的初始组,同时提取这个用户的用户名和 UID;最后通过 UID 到 /etc/shadow 文件中提取和这个用户相匹配的密码。

禁用账号相关命令

sudo passwd -l username  用于锁定指定用户的账户,使其无法登录
chage -E YYYY-MM-DD username 用于设置用户的账户过期日期,超过该日期后,用户将无法登录
passwd -S username  显示指定用户的密码状态信息,包括账户是否已锁定、密码是否过期等
passwd username 更改username的密码

安全常用的Linux命令总结

文件系统权限相关

linux系统中一切都是文件查看权限

Is -la /etc/passwd

更改文件所有者

chown root file

修改文件权限

sudo chmod u=rwx,g+rw,o-r file
sudo chmod u+x,gtw,o-r file
chmod 400 <file>

一、Linux系统中一切都是文件

在Lⅰux系统中,几乎所有的资源都被抽象为文件,包括硬件设备(如硬盘、网卡等)、进程间通信、网络连接等。这种设计理念使得对各种资源的管理可以通过统一的文件操作方式来进行,大大简化了系统的架构和管理。

二、查看权限

ls -la 文件或目录
ls -la /etc/passwd
  • ls: 列出文件或目录的信息。
  • -l: 使用长格式列出信息,即为每个文件(或目录)提供详细的权限、链接数、所有者、组、大小和修改日期等信息。
  • -a: 显示所有文件,包括以点(.)开头的隐藏文件。安全常用的Linux命令总结

这个输出表示:

  • -rw-r--r--: 这部分表示文件的权限设置。具体来说:
    • rw- 表示文件所有者(root)具有读取和写入权限。
    • r-- 表示文件所属组(root)具有只读权限。
    • r-- 表示其他用户也具有只读权限。
    • 第一个字符 - 表示这是一个普通文件(如果这里是 d,则表示是一个目录)。
    • 接下来的9个字符分为三组,每组3个字符,分别表示文件所有者、文件所属组和其他用户对文件的访问权限。
  • 1: 这表示文件的硬链接数。硬链接是指向同一文件的不同文件名。这里的1表示没有其他文件名指向这个文件。
  • root: 这是文件的所有者,即拥有该文件的用户。在这个例子中,文件的所有者是 root
  • root: 这是文件所属的组。在这个例子中,文件所属的组也是 root
  • 3171: 这是文件的大小,以字节为单位。这里表示 /etc/passwd 文件的大小为 3171 字节。
  • 2024年 4月15日: 这是文件的最后修改日期。这里表示文件最后一次被修改是在2024年的4月15日。
  • /etc/passwd: 这是文件的完整路径。/etc/passwd 是一个重要的系统文件,用于存储用户账户的基本信息。安全常用的Linux命令总结
  • drwxr-xr-x: 这部分表示目录的权限设置。具体来说:
    • rwx 表示文件所有者(kali)具有读取、写入和执行权限。
    • r-x 表示文件所属组(kali)具有读取和执行权限。
    • r-x 表示其他用户也具有读取和执行权限。
    • 第一个字符 d 表示这是一个目录(如果这里是 -,则表示是一个普通文件)。
    • 接下来的9个字符分为三组,每组3个字符,分别表示文件所有者、文件所属组和其他用户对目录的访问权限。
  • 2: 这表示目录的硬链接数。硬链接是指向同一文件的不同文件名。对于目录,这个数字通常表示该目录下的子目录数量加上2(因为每个目录都包含两个特殊条目:. 和 ..)。这里的2表示该目录下只有一个子目录或文件。
  • kali: 这是目录的所有者,即拥有该目录的用户。在这个例子中,目录的所有者是 kali
  • kali: 这是目录所属的组。在这个例子中,目录所属的组也是 kali
  • 4096: 这是目录的大小,以字节为单位。这里表示该目录占用的磁盘空间为 4096 字节。实际上,目录的大小通常是一个固定值,因为它主要用于存储目录项的元数据。
  • 11月 6日 23:22: 这是目录的最后修改日期和时间。这里表示目录最后一次被修改是在11月6日的23:22。
  • .: 这表示当前目录。在 ls -la 命令的输出中,. 代表当前目录,而 .. 代表父目录。

三、更改文件所有者,chown

用于更改文件或目录的所有者和所属组

chown [选项] 新所有者[:新组] 文件...

选项

  • -c 或 --changes:显示更改的文件名。
  • -f 或 --silent 或 --quiet:忽略错误信息。
  • -v 或 --verbose:显示处理的文件名。
  • -R 或 --recursive:递归地处理目录及其子目录中的文件。
  • --dereference:影响符号链接指向的目标文件,而不是符号链接本身。
  • --no-dereference:仅更改符号链接的属性,而不是其目标文件的属性。
  • --from=当前所有者:当前组:仅当文件的所有者和组匹配指定的当前所有者和组时才进行更改。更改用户
chown username filename
chown root aaa
  • chown是改变文件所有者的命令。
  • root是新的所有者用户名,☒里表示将文件的所有者改为“root”用户。
  • fiIe是要更改所有者的文件名称。执行这个命令后,文件的所有者将变为“root”用户。安全常用的Linux命令总结更改文件所属组
chown :新组 文件
chown :root bbb

安全常用的Linux命令总结同时更改文件所有者和所属组

chown 新所有者:新组 文件
chown root:root ccc

安全常用的Linux命令总结

递归更改

chown -R root:root ../bbb

安全常用的Linux命令总结

四、修改文件权限,chmod

chmod 命令在 Linux 和类 Unix 操作系统中用于更改文件或目录的权限。权限可以分为三类:用户(所有者)、组和其他用户(其他人)。每类权限又可以细分为读(r)、写(w)和执行(x)权限。

符合模式

符号模式使用字母和符号来表示权限的变化。基本格式如下:

[who][operator][permissions]
  • who:指定哪些用户类别的权限要改变。可以是以下一个或多个字母的组合:
    • u:用户(所有者)
    • g:组
    • o:其他用户(其他人)
    • a:所有用户(等同于 ugo
  • operator:指定如何改变权限。可以是以下一个符号:
    • +:添加权限
    • -:移除权限
    • =:设置权限
  • permissions:指定具体的权限。可以是以下一个或多个字母的组合:
    • r:读权限
    • w:写权限
    • x:执行权限

符号模式实例

sudo chmod u=rwx,g+rw,o-r file
  • sudo:以超级用户(root)权限执行命令。这通常用于需要更高权限的操作。
  • chmod:更改文件或目录的权限。
  • u=rwx,g+rw,o-r:这是权限设置的具体部分,分为三个部分:
    • u=rwx:设置用户(所有者)的权限为读(r)、写(w)和执行(x)。
    • g+rw:给组增加读(r)和写(w)权限。
    • o-r:从其他用户(其他人)那里移除读(r)权限。
  • file:要更改权限的文件名。安全常用的Linux命令总结
sudo chmod u+x,g+w,o-r file
  • u+x,g+w,o-r:这是权限设置的具体部分,分为三个部分:
    • u+x:给用户(所有者)增加执行权限。
    • g+w:给组增加写权限。
    • o-r:从其他用户(其他人)那里移除读权限。安全常用的Linux命令总结

八进制模式

八进制模式使用数字来表示权限。每个权限类别(用户、组、其他用户)可以用一个八进制数字表示,范围从 0 到 7。每个数字的含义如下:

  • 4:读权限(r
  • 2:写权限(w
  • 1:执行权限(x)权限的组合可以通过将相应的数字相加得到:
  • 0:无权限
  • 1:执行权限(x
  • 2:写权限(w
  • 3:写和执行权限(wx
  • 4:读权限(r
  • 5:读和执行权限(rx
  • 6:读和写权限(rw
  • 7:读、写和执行权限(rwx

八进制模式实例

chmod 400 file
  • chmod:更改文件或目录的权限。
  • 400:权限模式,使用八进制数字表示。
  • file:要更改权限的文件名。
  • 用户(所有者):r(读权限)
  • 组:-(无权限)
  • 其他用户(其他人):-(无权限)安全常用的Linux命令总结
chmod 777 file

权限变为对所有用户都完全开放

  • 用户(所有者):rwx(读、写、执行)
  • 组:rwx(读、写、执行)
  • 其他用户(其他人):rwx(读、写、执行)安全常用的Linux命令总结

日志相关

一、系统日志相关命令

ls -l /var/log
  • ls: 这是一个基本的列表命令,用于列出目录内容。
  • -l: 这是一个选项,表示使用长格式(long format)列出文件信息。长格式会显示更多的细节,包括文件权限、所有者、组、大小、修改时间和文件名等。
  • /var/log: 这是要列出内容的目录路径。/var/log 目录通常包含系统的各种日志文件。

安全常用的Linux命令总结

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

sudo tail -3 /var/log/auth.log

/var/log/auth.log或/var/log/secure
记录认证和授权信息,内容有登录尝试、SSH 连接、sudo 命令执行等
  • sudo: 用于临时提升当前用户的权限,以便以超级用户(root)的身份执行命令。
  • tail: 用于显示文件的末尾部分。
  • -3: 指定要显示文件的最后 3 行。
  • /var/log/auth.log: 要查看的文件路径。/var/log/auth.log 通常是系统认证日志文件,记录了系统登录、权限验证等相关信息。

三、二进制日志相关命令

who /var/log/wtmp | tail -5
  1. who /var/log/wtmp:
    • who 命令用于显示当前登录到系统的用户信息。
    • /var/log/wtmp 是一个特殊的二进制文件,记录了所有用户的登录和注销信息。
    • 通过指定 /var/log/wtmp 作为参数,who 命令会从这个文件中读取登录记录。
  2. |:
    • 管道符 | 用于将前一个命令的输出作为后一个命令的输入。
  3. tail -5:
    • tail 命令用于显示文件的末尾部分。
    • -5 选项表示显示最后 5 行。安全常用的Linux命令总结详细解释
  • 用户名 (kali):
    • 这是登录到系统的用户名。在这个例子中,用户名是 kali
  • 终端 (tty7):
    • tty7 是一个虚拟终端,通常用于图形界面。在 Linux 系统中,tty1 到 tty6 通常用于文本模式的登录,而 tty7 通常用于第一个图形会话。
  • 日期 (2024-11-06):
    • 这是用户登录的日期。在这个例子中,用户在 2024 年 11 月 6 日登录。
  • 时间 (10:40):
    • 这是用户登录的时间。在这个例子中,用户在 10:40 登录。
  • 附加信息 ((:0)):
    • 这个信息表示图形会话的显示编号。(:0) 表示这是第一个图形会话。在多显示器或多用户环境中,可能会有多个显示编号,如 :1:2 等。

四、dmesg

用于显示内核环缓冲区(kernel ring buffer)的内容。这个缓冲区包含了系统启动时和运行过程中内核生成的各种消息,包括硬件检测、驱动程序加载、错误信息等。安全常用的Linux命令总结

五、systemd日志相关命令,journalctl

  • systemd是Linux系统的初始化系统和服务管理器, 使用 journald 来收集和存储系统日志。journalctl 是 systemd 提供的一个强大工具,用于查询和显示 journald 日志。journald 是 systemd 的日志管理服务,负责收集和存储系统日志。以下是对 journalctl 命令的详细解释和常用选项。
journalctl --since "today"
  • 显示今天所有日志安全常用的Linux命令总结

1. 显示所有日志

journalctl

这个命令会显示 journald 中的所有日志条目。

2. 实时监控日志

journalctl -f

这个命令会实时显示新的日志条目,类似于 tail -f

3. 按时间范围过滤

  • 显示最近 10 分钟的日志
    journalctl --since "10 minutes ago"
  • 显示今天的所有日志
    journalctl --since "today"
  • 显示昨天的所有日志
    journalctl --since "yesterday" --until "today"
  • 显示特定日期范围的日志
    journalctl --since "2023-10-01" --until "2023-10-05"

4. 按服务过滤

  • 显示特定服务的日志(例如 sshd):
    journalctl -u sshd
  • 显示多个服务的日志
    journalctl -u sshd -u nginx

5. 按优先级过滤

  • 显示错误级别及以上的日志
    journalctl -p err
  • 支持的优先级
    • emerg(紧急)
    • alert(警报)
    • crit(严重)
    • err(错误)
    • warning(警告)
    • notice(通知)
    • info(信息)
    • debug(调试)

6. 按用户过滤

  • 显示特定用户的日志
    journalctl _UID=1000

7. 按机器过滤

  • 显示特定机器的日志
    journalctl --machine=hostname

8. 按进程 ID 过滤

  • 显示特定进程的日志
    journalctl _PID=1234

9. 按单元过滤

  • 显示特定单元的日志
    journalctl _SYSTEMD_UNIT=sshd.service

10. 显示日志条目的详细信息

  • 显示每条日志的详细信息
    journalctl -o verbose

11. 导出日志

  • 将日志导出为 JSON 格式
    journalctl -o json > logs.json
  • 将日志导出为短格式
    journalctl -o short > logs.txt

12. 按字段过滤

  • 显示包含特定字段的日志
    journalctl MESSAGE="failed to start"

13. 显示特定数量的日志条目

  • 显示最近 10 条日志
    journalctl -n 10

14. 显示日志的简短格式

  • 显示日志的简短格式
    journalctl -o short

15. 显示日志的机器可读格式

  • 显示日志的机器可读格式
    journalctl -o json-pretty

显示 sshd 服务的最近 10 条日志

journalctl -u sshd -n 10

实时监控 sshd 服务的日志

journalctl -u sshd -f

显示昨天到今天的 sshd 服务日志

journalctl -u sshd --since "yesterday" --until "today"

显示错误级别及以上的日志

journalctl -p err

导出 sshd 服务的日志为 JSON 格式

journalctl -u sshd -o json > sshd_logs.json

存储管理

一、内存使用量,free

free 命令是一个用于显示系统中物理内存(RAM)和交换空间(swap)使用情况的工具

free -m
free -m -s 5

参数-b

  • 功能: 以字节(bytes)为单位显示内存使用情况。
  • 说明: 这个选项适用于需要精确到字节的情况。-k
  • 功能: 以千字节(kilobytes,KB)为单位显示内存使用情况。
  • 说明: 这是 free 命令的默认单位,适用于大多数情况。-m
  • 功能: 以兆字节(megabytes,MB)为单位显示内存使用情况。
  • 说明: 适用于需要以更大的单位显示内存使用情况的情况。-g
  • 功能: 以千兆字节(gigabytes,GB)为单位显示内存使用情况。
  • 说明: 适用于内存容量较大的系统,以更简洁的方式显示内存使用情况。-h
  • 功能: 以人类可读的格式显示内存使用情况,自动选择合适的单位(KB、MB、GB)。
  • 说明: 这个选项会根据内存的实际大小自动选择最合适的单位,使输出更易于阅读。-l
  • 功能: 显示低内存(low memory)和高内存(high memory)的使用情况。
  • 说明: 主要用于 32 位系统,现代 64 位系统通常不需要这个选项。低内存是指可以直接由内核管理的内存,高内存是指需要通过ZONE_HIGHMEM管理的内存。-s <interval>
  • 功能: 持续显示内存使用情况,每隔指定的时间间隔(秒)显示一次。
  • 说明: 适用于需要实时监控内存使用情况的场景。-t
  • 功能: 在输出中添加一行总结,显示总内存、已用内存、空闲内存、共享内存、缓冲区和缓存。
  • 说明: 这个选项会在输出的末尾添加一行总结,方便快速查看总体内存使用情况。-o
  • 功能: 不显示缓冲区和缓存的内存使用情况。
  • 说明: 适用于只需要查看基本内存使用情况,而不关心缓冲区和缓存的情况。-V
  • 功能: 显示 free 命令的版本信息。
  • 说明: 适用于需要检查 free 命令版本的情况。安全常用的Linux命令总结结果解释
  • 物理内存:
    • 总量:3888 MB
    • 已用:1108 MB
    • 空闲:2327 MB
    • 共享:12 MB
    • 缓冲/缓存:685 MB
    • 可用:2779 MB
  • 交换空间:
    • 总量:974 MB
    • 已用:0 MB
    • 空闲:974 MB

二、磁盘使用量,df

df 命令用于显示文件系统的磁盘空间使用情况

df
df -hT
  • 显示文件系统的磁盘使用情况,并以人类可读的格式(自动选择合适的单位 KB、MB、GB)显示,同时显示每个文件系统的类型参数参数和free命令类似,没有-b(以字节为单位)参数,多了一些其他参数,比如-T(显示每个系统文件的类型)-k
  • 功能: 以千字节(1K 字节)为单位显示磁盘使用情况。
  • 说明: 这是默认的单位,但明确指定 -k 可以确保输出单位一致。-m
  • 功能: 以兆字节(1M 字节)为单位显示磁盘使用情况。
  • 说明: 适用于需要以更大的单位显示磁盘使用情况的情况。-h
  • 功能: 以人类可读的格式显示磁盘使用情况,自动选择合适的单位(KB、MB、GB)。
  • 说明: 这个选项会根据磁盘的实际大小自动选择最合适的单位,使输出更易于阅读。-B <size>
  • 功能: 以指定的块大小显示磁盘使用情况。
  • 说明<size> 可以是 1(字节)、1K(千字节)、1M(兆字节)等。-T
  • 功能: 在输出中添加一列,显示每个文件系统的类型(例如 ext4、xfs、btrfs 等)。
  • 说明: 适用于需要查看文件系统类型的场景。-P
  • 功能: 以 POSIX 格式输出,不显示标题行。
  • 说明: 适用于需要标准格式输出的脚本或自动化任务。-a
  • 功能: 显示所有文件系统,包括那些通常不显示的 dummy 文件系统。
  • 说明: 适用于需要查看所有文件系统的详细信息的情况。-x <filesystem_type>
  • 功能: 排除指定类型的文件系统。
  • 说明: 例如,排除 tmpfs 文件系统。-t <filesystem_type>
  • 功能: 只显示指定类型的文件系统。
  • 说明: 例如,只显示 ext4 文件系统。-l
  • 功能: 只显示本地文件系统。
  • 说明: 适用于需要区分本地和网络文件系统的情况。-i
  • 功能: 显示 inode 信息而不是块使用情况。
  • 说明: 适用于需要查看文件系统中 inode 使用情况的情况。-h --si
  • 功能: 以人类可读的格式显示磁盘使用情况,使用 1000 为基数(而不是 1024)。
  • 说明: 适用于需要符合国际单位制的情况。-x <filesystem_type> -t <filesystem_type>
  • 功能: 结合使用 -x 和 -t 选项,可以同时排除和包含特定类型的文件系统。
  • 说明: 例如,排除 tmpfs 文件系统,只显示 ext4 文件系统。安全常用的Linux命令总结

三、文件或目录大小,du

du 命令用于显示文件和目录的磁盘使用情况。它可以递归地显示目录下每个文件和子目录的大小,也可以显示单个文件的大小。

sudo du ./* -hsc

参数-k

  • 功能: 以千字节(1K 字节)为单位显示磁盘使用情况。
  • 说明: 这是默认的单位,但明确指定 -k 可以确保输出单位一致。-m
  • 功能: 以兆字节(1M 字节)为单位显示磁盘使用情况。
  • 说明: 适用于需要以更大的单位显示磁盘使用情况的情况。-h
  • 功能: 以人类可读的格式显示磁盘使用情况,自动选择合适的单位(KB、MB、GB)。
  • 说明: 这个选项会根据磁盘的实际大小自动选择最合适的单位,使输出更易于阅读。-b
  • 功能: 以字节为单位显示磁盘使用情况。
  • 说明: 适用于需要精确到字节的情况。-s
  • 功能: 显示总和,不显示每个文件和子目录的详细信息。
  • 说明: 适用于只需要知道总磁盘使用情况的情况。-a
  • 功能: 显示所有文件和目录,包括隐藏文件和目录。
  • 说明: 适用于需要查看所有文件和目录的详细信息的情况。-d <depth>
  • 功能: 限制递归的深度。
  • 说明<depth> 是一个整数,表示递归的层数。例如,-d 1 只显示当前目录下的子目录。-S
  • 功能: 显示每个目录的大小,不包括子目录的大小。
  • 说明: 适用于需要单独查看每个目录的大小的情况。-c
  • 功能: 在输出中添加一行总结,显示总磁盘使用情况。
  • 说明: 适用于需要查看总和的情况。--exclude=<pattern>
  • 功能: 排除匹配特定模式的文件或目录。
  • 说明<pattern> 是一个通配符模式,例如 *.log 会排除所有 .log 文件。-x
  • 功能: 仅显示同一文件系统上的文件和目录。
  • 说明: 适用于需要区分不同文件系统的情况。-l
  • 功能: 计算所有文件,即使它们有多个硬链接。
  • 说明: 适用于需要准确计算所有文件大小的情况,即使有硬链接。-H
  • 功能: 以 1000 为基数(而不是 1024)显示人类可读的格式。
  • 说明: 适用于需要符合国际单位制的情况。-L
  • 功能: 跟踪符号链接指向的文件。
  • 说明: 适用于需要计算符号链接指向的文件的实际大小的情况。-X <file>
  • 功能: 从指定文件中读取排除模式。
  • 说明<file> 是一个包含排除模式的文件,每行一个模式。安全常用的Linux命令总结

五、挂载分区,mount

mount 命令用于将文件系统(如硬盘分区、USB驱动器、网络文件系统等)挂载到指定的挂载点,使其可以被访问,一般需要root权限

mount 显示挂载信息

安全常用的Linux命令总结

sudo mount <device> <mount_point>

sudo mount /dev/sdb1 /mnt/usb
  • sudo: 以超级用户权限执行 mount 命令。
  • mount: 将文件系统挂载到指定的挂载点。
  • /dev/sdb1: 要挂载的设备,通常是硬盘或USB驱动器的分区。
  • /mnt/usb: 挂载点,即设备将被挂载到的目录。参数-t <type>
  • 功能: 指定文件系统的类型。
  • 说明: 用于指定要挂载的文件系统的类型,例如 ext4ntfsvfat 等。-o <options>
  • 功能: 指定挂载选项。
  • 说明: 用于指定挂载时的各种选项,常见的挂载选项包括:
    • ro: 以只读方式挂载。
    • rw: 以读写方式挂载。
    • noexec: 不允许在挂载点上执行文件。
    • nosuid: 忽略文件的 setuid 和 setgid 位。
    • nodev: 不允许访问设备文件。
    • sync: 以同步方式写入数据。
    • async: 以异步方式写入数据。
    • uid=<user_id>: 指定文件系统的拥有者。
    • gid=<group_id>: 指定文件系统的所属组。
    • umask=<mask>: 设置文件系统的权限掩码。
    • fmask=<mask>: 设置文件的权限掩码。
    • dmask=<mask>: 设置目录的权限掩码。
    • codepage=<codepage>: 指定代码页(主要用于 FAT 文件系统)。
    • iocharset=<charset>: 指定字符集(主要用于 FAT 文件系统)。
    • shortname=<mode>: 设置短文件名模式(主要用于 FAT 文件系统)。
    • utf8: 使用 UTF-8 编码(主要用于 FAT 文件系统)。
    • errors=<mode>: 指定错误处理模式,例如 errors=remount-ro(出错时重新以只读方式挂载)。-a
  • 功能: 挂载 /etc/fstab 文件中定义的所有文件系统。
  • 说明: 适用于需要一次性挂载所有配置文件中定义的文件系统的情况。-v
  • 功能: 显示详细信息。
  • 说明: 适用于需要查看挂载过程中的详细信息的情况。-r
  • 功能: 以只读方式挂载文件系统。
  • 说明: 等同于 -o ro-w
  • 功能: 以读写方式挂载文件系统。
  • 说明: 等同于 -o rw-L <label>
  • 功能: 按标签挂载文件系统。
  • 说明: 适用于需要按文件系统的标签(label)挂载的情况。-U <uuid>
  • 功能: 按 UUID 挂载文件系统。
  • 说明: 适用于需要按文件系统的 UUID 挂载的情况。-n
  • 功能: 不使用 /etc/mtab 文件记录挂载信息。
  • 说明: 适用于需要临时挂载且不希望记录到 /etc/mtab 的情况。-R
  • 功能: 递归挂载文件系统。
  • 说明: 适用于需要递归挂载文件系统及其子文件系统的情况。-i
  • 功能: 不执行任何实际操作,仅显示将要执行的挂载命令。
  • 说明: 适用于需要模拟挂载操作的情况。-f
  • 功能: 强制挂载,即使设备不可用也尝试挂载。
  • 说明: 适用于需要强制挂载的情况。-F <file>
  • 功能: 从指定文件中读取挂载选项。
  • 说明: 适用于需要从文件中读取挂载选项的情况。

基本网络枚举

一、基本网络工具

ifconfig

ifconfig

是一个用于配置和显示网络接口信息的命令行工具。它可以显示网络接口的P地址、子网掩码、MC地址等信息,还可以用于启动、停止或配置网络接口。安全常用的Linux命令总结

ip

ip

也是用于查看和管理网络接口的命令。它提供了比ifconfig更详细和灵活的网络接口信息显示,包括接口的状态、IP地址、子网码、广播地址等。

  • 查看所有网络接口的状态
ip addr show
可以简写为
ip a

安全常用的Linux命令总结

  • 查看特定网络接口的状态
ip addr show [interface_name]

例如,查看eth0接口的状态:

ip addr show eth0

安全常用的Linux命令总结

  • 启用网络接口
ip link set [interface_name] up

例如,启用eth0接口:

ip link set eth0 up
  • 禁用网络接口
ip link set [interface_name] down

例如,禁用eth0接口:

ip link set eth0 down
  • 设置网络接口的IP地址
ip addr add [ip_address]/[prefix_length] dev [interface_name]

例如,为eth0接口设置IP地址192.168.1.100/24

ip addr add 192.168.1.100/24 dev eth0
  • 删除网络接口的IP地址
ip addr del [ip_address]/[prefix_length] dev [interface_name]

例如,删除eth0接口的IP地址192.168.1.100/24

ip addr del 192.168.1.100/24 dev eth0
  • 查看路由表
ip route show

或者简写为:

ip r

安全常用的Linux命令总结

  • 添加默认网关
ip route add default via [gateway_ip]

例如,设置默认网关为192.168.1.1

ip route add default via 192.168.1.1
  • 删除默认网关
sudo ip route del default via <网关地址> dev <接口>

假设你的默认网关是 192.168.1.1,并且使用的是 eth0 接口,你可以使用以下命令删除默认网关:

sudo ip route del default via 192.168.1.1 dev eth0
  • 添加静态路由
    ip route add [destination_network] via [gateway_ip] dev [interface_name]

    例如,添加一个到10.0.0.0/8网络的路由,通过192.168.1.1网关,使用eth0接口:

ip route add 10.0.0.0/8 via 192.168.1.1 dev eth0
  • 查看ARP缓存
ip neigh show
可以简写为
ip n

安全常用的Linux命令总结

  • 刷新ARP缓存
ip neigh flush all
  • 查看网络统计信息
ip -s link show [interface_name]

例如,查看eth0接口的统计信息:

ip -s link show eth0

安全常用的Linux命令总结

ifdown

ifdown 命令用于禁用网络接口。它通常与 ifup 命令一起使用,用于启动和停止网络接口,上面的ip命令也可以实现网络接口管理

sudo ifdown [interface_name]

sudo ifdown eth0  禁用eth0接口

参数

  • -f, --force:强制禁用网络接口,即使出现错误也会继续执行。
ifdown -f eth0
  • -n, --noact:模拟操作,显示将要执行的操作,但不实际执行。

ifup

ifup [选项] 接口名

sudo ifup eth0  启动eth0网络接口

参数

  • -a 或 --all:启动所有网络接口。
  • -v 或 --verbose:显示详细的输出信息,有助于调试。
  • -n 或 --no-act:模拟操作而不实际执行,用于测试配置是否正确。
  • -f 或 --force:强制启动接口,即使该接口已经在运行中。
  • -i FILE 或 --interfaces=FILE:指定一个不同于默认的接口配置文件。
  • --no-carrier-wait[=SECONDS]:在没有物理连接的情况下尝试启动接口,可选参数为等待的时间(秒)。

二、网络配置

/etc/network/interfaces

/etc/network/interfaces

这是一个系统文件,用于配置网络接口的静态IP地址、子网掩码、网关等信息。在一些Liux发行版中,通过编辑这个文件可以实现网络接口的手动配置。安全常用的Linux命令总结

source /etc/network/interfaces.d/*
  • 这一行表示从 /etc/network/interfaces.d/ 目录中读取所有的配置文件。这样可以将不同的网络接口配置分散到多个文件中,便于管理和维护。
# The loopback network interface
auto lo
iface lo inet loopback
  • auto lo:表示在系统启动时自动激活 lo 回环接口。
  • iface lo inet loopback:定义 lo 接口为回环接口,并使用 inet 地址族。

NetworkManager

NetworkManager 作为一个系统服务,可以通过 systemd 进行管理。配置文件NetworkManager 的配置文件通常位于 /etc/NetworkManager/ 目录下,主要包括以下几个文件和目录:

  • /etc/NetworkManager/NetworkManager.conf:主配置文件,用于配置 NetworkManager 的全局设置。
  • /etc/NetworkManager/system-connections/:存储各个网络连接的配置文件。
  • /etc/NetworkManager/conf.d/:用于存放额外的配置文件,可以覆盖主配置文件中的设置。

检测是否启用NetworkManager服务

systemctl status NetworkManager

如果状态显示为"active"或者"running",那么网络管理器已经成功启动了。安全常用的Linux命令总结

  1. 启动 NetworkManager 服务
sudo systemctl start NetworkManager
  1. 停止 NetworkManager 服务
sudo systemctl stop NetworkManager
  1. 启用 NetworkManager 服务(开机自启):
sudo systemctl enable NetworkManager
  1. 禁用 NetworkManager 服务
sudo systemctl disable NetworkManager

nmcli

nmcli 是 NetworkManager 的主要命令行工具,提供了丰富的命令和选项来管理网络连接。

基本用法
  1. 查看网络状态
nmcli general status

安全常用的Linux命令总结

  1. 列出所有网络设备
nmcli device

安全常用的Linux命令总结

  1. 列出所有网络连接
nmcli connection show

安全常用的Linux命令总结

  1. 连接到特定网络
nmcli connection up id "Your Connection Name"
  1. 断开特定网络
nmcli connection down id "Your Connection Name"
  1. 创建新的网络连接
nmcli connection add type ethernet con-name "New Connection" ifname eth0
  1. 编辑现有网络连接
nmcli connection modify "Your Connection Name" ipv4.addresses 192.168.1.100/24
  1. 删除网络连接
nmcli connection delete "Your Connection Name"

nmtui

nmtui 是一个基于文本的用户界面,适用于没有图形界面的环境。

  1. 启动 nmtui
nmtui
  1. 连接到网络
    • 选择 "Activate a connection" 选项。
    • 选择要连接的网络设备和连接。
  2. 编辑网络连接
    • 选择 "Edit a connection" 选项。
    • 选择要编辑的连接并进行修改。
  3. 设置主机名和 DNS
    • 选择 "Set system hostname" 选项。
    • 输入新的主机名并保存。安全常用的Linux命令总结

网络连接

一、网络连接状态查看工具

netstat

netstat [选项]

选项

  • -a:显示所有连接和监听端口。
  • -n:显示数字形式的地址和端口号,而不是尝试解析成主机名或服务名。
  • -t:显示 TCP 连接。
  • -u:显示 UDP 连接。
  • -p:显示每个连接的进程 ID (PID) 和程序名称。
  • -r:显示路由表。
  • -i:显示网络接口统计信息。
  • -s:显示每个协议的统计信息。
  • -l:显示监听的端口。
  • -e:显示扩展信息。
  • -c:连续显示网络连接信息,每秒刷新一次。
netstat -natup
  • -n:显示数字形式的地址和端口号,而不是尝试解析成主机名或服务名。
  • -a:显示所有连接和监听端口,包括 TCP 和 UDP。
  • -t:显示 TCP 连接。
  • -u:显示 UDP 连接。
  • -p:显示每个连接的进程 ID (PID) 和程序名称。安全常用的Linux命令总结输出字段解释
  • Proto:协议类型(TCP 或 UDP)。
  • Recv-Q:接收队列中的数据包数量。
  • Send-Q:发送队列中的数据包数量。
  • Local Address:本地地址和端口号。
  • Foreign Address:远程地址和端口号。
  • State:连接状态(仅适用于 TCP 连接)。
  • PID/Program name:进程 ID 和程序名称。由于权限不足,这里显示为 -

ss

ss(Socket Statistics)是一个用于显示套接字统计信息的命令行工具,它比传统的 netstat 更高效,提供了更丰富的网络连接信息。ss 是 iproute2 包的一部分,在大多数现代 Linux 发行版中都预装了这个工具。

ss [选项] [地址:端口]

常用选项

  • -a:显示所有连接,包括监听和非监听的。
  • -t:显示 TCP 连接。
  • -u:显示 UDP 连接。
  • -n:显示数字形式的地址和端口号,而不是尝试解析成主机名或服务名。
  • -p:显示每个连接的进程 ID (PID) 和程序名称。
  • -l:显示监听的端口。
  • -i:显示网络接口统计信息。
  • -s:显示每个协议的统计信息。
  • -e:显示扩展信息。
  • -r:显示路由信息。
  • -m:显示内存使用情况。
  • -o:显示定时器信息。
  • -z:显示零计数的连接。
  • -A:指定要显示的地址族,可以是 allinetunixpacketnetlink 等。
  • -4:只显示 IPv4 连接。
  • -6:只显示 IPv6 连接。
  • -f:指定地址族,如 inet(IPv4 和 IPv6),unixpacket 等。
sudo ss -natup

安全常用的Linux命令总结解释

  1. UDP 连接
    • Local Address:Port192.168.80.136%eth0:68 — 本地 IP 地址 192.168.80.136,端口 68,通过 eth0 网络接口。
    • Peer Address:Port192.168.80.254:67 — 远程 IP 地址 192.168.80.254,端口 67。这通常是 DHCP 服务器的地址和端口。
    • ProcessNetworkManager 进程(PID 680)正在使用这个连接,文件描述符为 27。
  2. TCP 连接
    • Local Address:Port127.0.0.1:36065 — 本地回环地址 127.0.0.1,端口 36065
    • Peer Address:Port0.0.0.0:* — 没有远程地址和端口,表示这是一个监听端口,可以接受来自任何地址的连接。
    • Processcontainerd 进程(PID 992)正在使用这个连接,文件描述符为 9。

二、二层地址查看工具

arp

arp [选项] [主机名或IP地址]

常用选项

  • -a:显示所有接口的 ARP 缓存条目。
  • -n:以数字形式显示地址,不进行域名解析。
  • -d:删除指定的 ARP 缓存条目。
  • -s:添加静态 ARP 缓存条目。
  • -i:指定网络接口。
  • -v:显示详细信息。
  • -e:以易于阅读的格式显示 ARP 缓存条目。
sudo arp -en

选项 -e 表示以更易于阅读的格式显示 ARP 缓存中的条目,而 -n 则表示以数字形式显示地址,而不是尝试解析主机名。安全常用的Linux命令总结

  • Address: 192.168.80.2
    • 这是设备的 IP 地址。
  • HWtype: ether
    • 这表示硬件类型为以太网(Ethernet)。
  • HWaddress: 00:50:56:ff:b0:85
    • 这是设备的 MAC 地址。
  • Flags: C
    • 这个标志表示该 ARP 条目是动态创建的(Committed)。这意味着该条目是由系统自动添加的,并且会在一段时间后自动老化并删除。
  • Mask: (空)
    • 子网掩码,通常为空。
  • Iface: eth0
    • 这表示该 ARP 条目是通过 eth0 接口获取的。eth0 通常是系统中的第一个以太网接口。

三、路由信息相关工具

route

route 命令用于显示和操作 IP 路由表。路由表决定了数据包如何从一个网络传输到另一个网络。通过 route 命令,可以查看当前的路由表、添加新的路由条目、删除现有的路由条目等。

route [选项] [命令] [目标] [网关] [接口]

常用选项

  • -n:以数字形式显示地址,不进行域名解析。
  • -v:显示详细信息。
  • -A 或 -4:使用 IPv4 地址族。
  • -6:使用 IPv6 地址族。常用命令
  • add:添加新的路由条目。
  • del 或 delete:删除现有的路由条目。
  • change:更改现有的路由条目。
  • replace:替换现有的路由条目。实例显示当前的路由表
route -n

查看详细的路由信息

route -v

安全常用的Linux命令总结

  • Destination:目标网络或主机的地址。
  • Gateway:到达目标网络或主机的下一跳网关地址。
  • Genmask:子网掩码。
  • Flags
    • U:路由是活动的(Up)。
    • G:目标是网关。
    • H:目标是主机。
    • D:路由是动态添加的。
    • M:路由是修改过的。
  • Metric:路由的度量值,用于选择最佳路径。
  • Ref:路由引用计数。
  • Use:路由使用计数。
  • Iface:使用的网络接口。添加新的路由条目
route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.254 dev eth0
  • -net:指定目标是一个网络。
  • 192.168.2.0:目标网络的地址。
  • netmask 255.255.255.0:子网掩码。
  • gw 192.168.1.254:网关地址。
  • dev eth0:指定使用的网络接口。

删除现有的路由条目

route del -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.254 dev eth0

添加默认路由

route add default gw 192.168.1.1 dev eth0
  • default:表示默认路由。
  • gw 192.168.1.1:网关地址。
  • dev eth0:指定使用的网络接口。

ip route

  • 显示当前的 IP 路由表ip route 、ip route show、ip r之间的关系ip route show 是 ip route 的完整形式,明确指定了显示路由表的操作。虽然 ip route 和 ip route show 在大多数情况下是等价的,但 ip route show 更加明确,更容易理解。ip r是简写
ip route show
ip route
可以简写为
ip r

安全常用的Linux命令总结

sudo ip route add/del

添加

sudo ip route add 10.13.37.0/24 dev eth0
  • sudo:以超级用户权限执行命令。添加或删除路由条目通常需要超级用户权限。
  • ip:调用 ip 命令,这是一个多功能的网络配置工具。
  • route add:指定要添加一个新路由条目。
  • 10.13.37.0/24:目标网络的地址和子网掩码。10.13.37.0/24 表示目标网络是 10.13.37.0,子网掩码是 255.255.255.0
  • dev eth1:指定使用的网络接口。eth0 是目标网络 10.13.37.0/24 所在的网络接口。安全常用的Linux命令总结可以已经加了到eth0中了删除
sudo ip route del  10.13.37.0/24 dev eth0

安全常用的Linux命令总结

四、路由跟踪工具

traceroute:是一个用于跟踪数据包从本地主机到目标主机所经过的路由路径的工具。

traceroute [选项] 目标主机

常用选项

  • -I:使用 ICMP 协议(默认使用 UDP)。
  • -T:使用 TCP 协议。
  • -m:设置最大跳数(默认为 30)。
  • -w:设置超时时间(默认为 5 秒)。
  • -q:设置每次探测的次数(默认为 3 次)。
  • -f:设置第一个探测的 TTL 值(默认为 1)。
  • -p:设置 UDP 或 TCP 探测的端口号。
  • -n:以数字形式显示地址,不进行域名解析。
  • -g:指定中间网关(用于源路由)。
  • -z:设置两次探测之间的等待时间(以秒为单位)。
traceroute wwwww.offsec.com
traceroute -I www.offsec.com

安全常用的Linux命令总结

ssh服务

ssh(Secure Shell)命令用于安全地远程登录到另一台计算机,并执行命令和传输文件。ssh 提供了加密的通信通道,确保数据传输的安全性。

ssh [选项] [用户@]主机 [命令]

常用选项

  • -V:显示 ssh 版本信息。
  • -v:增加调试信息的详细程度,最多可以使用三次(-v -v -v)。
  • -i:指定用于身份验证的私钥文件。
  • -p:指定远程主机的 SSH 服务端口(默认为 22)。
  • -l:指定登录用户名。
  • -X 或 -Y:启用 X11 转发,用于图形界面应用程序。
  • -N:不执行远程命令,仅建立连接(常用于端口转发)。
  • -f:在后台运行 ssh
  • -C:启用压缩。
  • -o:指定配置选项。
  • -L:本地端口转发。
  • -R:远程端口转发。
  • -D:动态端口转发(SOCKS 代理)。

一、启动服务

sudo systemctl start ssh  命令用于启动 SSH 服务,使得其他设备可以通过SSH协议连接到这台主机

systemctl status ssh 检测是否开启ssh服务

二、连接主机

ssh root@localhost

1. 基本用法

ssh user@hostname
  • user:远程主机的用户名。
  • hostname:远程主机的地址(可以是 IP 地址或主机名)。

2. 指定端口

ssh -p 2222 user@hostname
  • -p 2222:指定远程主机的 SSH 服务端口为 2222。

3. 使用私钥文件

ssh -i /path/to/private_key user@hostname

4. 多跳连接

ssh -t user1@host1 ssh user2@host2
  • -t:强制分配一个伪终端,用于多跳连接。

5. 代理命令

ssh -o ProxyCommand="nc %h %p" user@hostname
  • -o ProxyCommand="nc %h %p":使用 nc(Netcat)作为代理命令。
  • -i /path/to/private_key:指定用于身份验证的私钥文件。

三、配置文件

/etc/ssh/sshd_config

/etc/ssh/sshd_config 是 SSH 服务器(sshd)的配置文件,用于控制 SSH 服务的行为。这个文件包含了许多配置选项,可以通过编辑这些选项来调整 SSH 服务的各种行为。安全常用的Linux命令总结Port

  • 描述:指定 SSH 服务监听的端口号。
  • 默认值:22
  • 示例
Port 2222

ListenAddress

  • 描述:指定 SSH 服务监听的 IP 地址。可以指定多个地址,每行一个。
  • 默认值:监听所有可用的 IP 地址
  • 示例
ListenAddress 0.0.0.0
ListenAddress ::1

HostKey

  • 描述:指定 SSH 服务使用的主机密钥文件。
  • 默认值:通常包括 ssh_host_rsa_keyssh_host_dsa_keyssh_host_ecdsa_key 和 ssh_host_ed25519_key
  • 示例
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
  1. PermitRootLogin
  • 描述:控制是否允许 root 用户通过 SSH 登录。
  • 默认值prohibit-password
  • 可选值
    • yes:允许 root 登录
    • no:禁止 root 登录
    • without-password:允许 root 使用公钥认证登录,但不允许密码登录
    • prohibit-password:允许 root 使用公钥认证登录,但不允许密码登录
  • 示例
PermitRootLogin no

PasswordAuthentication

  • 描述:控制是否允许使用密码进行身份验证。
  • 默认值yes
  • 可选值
    • yes:允许密码认证
    • no:禁止密码认证
  • 示例
PasswordAuthentication no

ChallengeResponseAuthentication

  • 描述:控制是否允许使用挑战-响应认证机制。
  • 默认值yes
  • 可选值
    • yes:允许挑战-响应认证
    • no:禁止挑战-响应认证
  • 示例
ChallengeResponseAuthentication no

PubkeyAuthentication

  • 描述:控制是否允许使用公钥进行身份验证。
  • 默认值yes
  • 可选值
    • yes:允许公钥认证
    • no:禁止公钥认证
  • 示例
PubkeyAuthentication yes

AuthorizedKeysFile

  • 描述:指定公钥文件的位置。
  • 默认值%h/.ssh/authorized_keys
  • 示例
AuthorizedKeysFile .ssh/authorized_keys

四、客户端配置

hash knownHosts yes

在 SSH 客户端配置文件中,HashKnownHosts 选项用于控制是否对 known_hosts 文件中的主机名和 IP 地址进行哈希处理。哈希处理可以增强安全性,因为即使 known_hosts 文件被泄露,攻击者也无法直接从中获取实际的主机名或 IP 地址。

客户端配置文件

SSH 客户端的配置文件通常位于 ~/.ssh/config,每个用户可以有自己的配置文件。系统范围的配置文件位于 /etc/ssh/ssh_config

配置 HashKnownHosts

要启用 HashKnownHosts 选项,你需要在 ~/.ssh/config 文件中添加或修改相应的配置。

示例配置

  1. 打开配置文件
    nano ~/.ssh/config
  2. 添加或修改 HashKnownHosts 选项
    # ~/.ssh/config
    Host *
        HashKnownHosts yes
    • Host *:表示此配置适用于所有主机。
    • HashKnownHosts yes:启用对 known_hosts 文件中的主机名和 IP 地址进行哈希处理。

保存并应用配置

  1. 保存配置文件:编辑完配置文件后,保存并退出编辑器。
  2. 测试配置
ssh -o HashKnownHosts=yes user@hostname

你也可以直接使用 -o 选项在命令行中临时启用 HashKnownHosts

配置说明

  • HashKnownHosts yes:启用哈希处理。
  • HashKnownHosts no:禁用哈希处理(默认值)。

nano退出命令

  1. 保存更改并退出
    • 按 Ctrl + O(写入文件,即保存)。
    • 按 Enter 确认保存。
    • 按 Ctrl + X 退出 nano
  2. 不保存更改并退出
    • 按 Ctrl + X
    • 当提示是否保存修改时,按 N(不保存)。

远程拷贝,scp

scp(Secure Copy)命令用于在本地和远程主机之间安全地复制文件。scp 使用 SSH 协议进行加密传输,确保数据的安全性

scp [选项] [源文件] [目标文件]

常用选项

  • -P:指定远程主机的 SSH 服务端口(默认为 22)。
  • -p:保留文件的修改时间、访问时间和模式。
  • -q:静默模式,不显示传输进度。
  • -r:递归复制目录。
  • -C:启用压缩。
  • -i:指定用于身份验证的私钥文件。
  • -v:增加调试信息的详细程度。

示例

远程主机 1.1.1.1 上的 /home/kali/.bashrc 文件复制到本地当前目录下的 Copiedbashrc 文件

scp [email protected]:/home/kali/.bashrc Copiedbashrc
  • [email protected]:指定远程主机的用户名和 IP 地址。
    • root:远程主机的用户名。
    • 1.1.1.1:远程主机的 IP 地址。
  • /home/kali/.bashrc:远程主机上的源文件路径。
  • Copiedbashrc:本地目标文件名将本地文件 passwd 复制到远程主机的 /home/kali 目录下
scp -p passwd [email protected]:/home/kali/

详细解释

  • scp:命令本身,用于安全复制文件。
  • -p:保留文件的修改时间、访问时间和模式。
  • passwd:本地文件的路径。
  • [email protected]:/home/kali/:远程主机的用户名、IP 地址和目标路径。

历史命令,history

history 命令用于查看和操作 shell 命令历史记录。不同的 shell(如 Bash、Zsh 等)可能有不同的历史记录功能,但大多数 shell 都提供了类似的功能。下面是对 history 命令的详细解释,包括基本用法、常用选项和示例。

history [选项]

常用选项

  • 无选项:默认情况下,history 命令会显示当前 shell 会话的历史记录。
  • -c:清除当前 shell 会话的历史记录。
  • -d 偏移量:删除指定偏移量的历史记录条目。
  • -a:将当前会话的新命令追加到历史记录文件中。
  • -r:从历史记录文件中读取命令并将其添加到当前会话的历史记录中。
  • -w:将当前会话的历史记录写入历史记录文件。
  • -n:从历史记录文件中读取新命令并将其添加到当前会话的历史记录中。

1. 查看历史记录

history
  • 输出:显示当前 shell 会话的历史记录,每行包括一个编号和一条命令。安全常用的Linux命令总结

2. 查看最近的 10 条命令

history 10
  • 输出:显示最近的 10 条命令。安全常用的Linux命令总结

3. 清除历史记录

history -c
  • 效果:清除当前 shell 会话的历史记录。

4. 删除指定偏移量的历史记录条目

history -d 5
  • 效果:删除编号为 5 的历史记录条目。

5. 将当前会话的新命令追加到历史记录文件中

history -a
  • 效果:将当前会话的新命令追加到历史记录文件中(通常是 ~/.bash_history)。

6. 从历史记录文件中读取命令并添加到当前会话

history -r
  • 效果:从历史记录文件中读取命令并将其添加到当前会话的历史记录中。

7. 将当前会话的历史记录写入历史记录文件

history -w
  • 效果:将当前会话的历史记录写入历史记录文件中。

8. 从历史记录文件中读取新命令并添加到当前会话

history -n
  • 效果:从历史记录文件中读取新命令并将其添加到当前会话的历史记录中。

历史记录文件

  • Bash:默认的历史记录文件是 ~/.bash_history
  • Zsh:默认的历史记录文件是 ~/.zsh_history

linux目录介绍

/bin 二进制可执行命令
/etc 系统管理和配置文件
/etc/rc.d 启动的配置文件和脚本
/home 用户主目录的基点
/lib 标准程序设计库,又叫动态链接共享库
/sbin 超级管理命令,这里存放的是系统管理员使用的管理程序
/tmp 公共的临时文件存储点
/root 系统管理员的主目录
/mnt 系统提供这个目录是让用户临时挂载的文件系统
/lost+foud 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件就在这里面
/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/var 某些大文件的溢出区,比方说各种服务器的日志文件
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序

基本命令详解

1.ls 显示当前目录的文件

2.clear(清屏)

3.cd(切换目录)
cd /
cd /home

4.pwd 显示你当前所在的目录

5.vim (文本编辑器)
vim 1.txt
i随便输入点字符,进人编辑模式
esc,进入预览模式
冒号wq!保存退出

6.touch(创建文件)
touch 2.txt

7.mkdir 123 创建一个名为123的目录

mkdir -p(-p参数遍历)
mkdir -p 123/1/2/3
cd 123
ls
cd 1/2/3

8.rm -r 123(删除123目录)
-i()
-r(递归删除,删除文件夹和它的所有内容)
-f(强制删除)

9.cp(copy的简写)
cp 1.txt ../1.txt
ls
cd../
ls

10.mv(move的简写移动文件的意思)
mv 1.txt home/1.txt
cd home/
ls
mv 1.txt 3.txt

11.cat (查看文件内容)
cat 3.txt (查看3.txt文件内容)

12.head (查看前半段文件内容,默认输出前10行)
head 3.txt
head -5 3.txt(显示前五行)

13.tail (查看后半段内容,默认输出后10行)
tail 3.txt
tail -5 3.txt (显示后五行)

14.more(查看文件内容并翻页)
more 3.txt

15.ssh

安全常用的Linux命令总结

1.chmod rwx -R(数字4代表读权限;2代表写权限;1代表执行权限;0代表没有相应的权限)
r(读)
w(写)
x(执行)

777(最高权限)
ls 查看一下当前目录有什么文件
ls -l 查看当前目录下文件的权限

2.chown(改变当前所处的用户和所处的用户组)
chown root:root 3.txt

useradd和adduser

adduser (会自动为创建的用户指定目录,系统shell版本,会在创建时输入用户密码)
useradd (需要使用参数选项指定上述基本设置,如果不使用任何参数,则创建的用户无密码,无主目录,没有指定shell版本)

useradd 命令

  • 功能useradd 是一个低级别的用户账户管理工具,它主要用于添加新的用户到系统中。
  • 特点
    • 它是一个命令行工具,通常没有提供交互式的提示。
    • 使用 useradd 创建的用户不会自动设置密码,需要通过 passwd 命令来设置用户的密码。
    • 可以通过命令行参数指定许多选项,如用户的主目录、登录 Shell、用户 ID (UID) 等。
  • 示例
sudo useradd -m -s /bin/bash newuser

上面的命令创建了一个名为 newuser 的新用户,同时创建了用户的主目录,并设置了登录 Shell 为 /bin/bash。

之后需要使用命令
sudo passwd cybc
设置密码

安全常用的Linux命令总结

adduser 命令

  • 功能adduser 实际上是 useradd 的一个包装脚本,它提供了更友好的用户界面来创建新的用户账户。
  • 特点
    • adduser 通常会提供更多的默认值,使得创建用户更加简单。
    • 它可以自动设置用户的密码,并且在创建过程中可能会询问一些关于用户的额外信息(比如全名等)。
    • 在某些发行版中,adduser 与 useradd 的行为完全相同,但在其他发行版中,它提供了更多的功能和更好的用户体验。
  • 示例
sudo adduser newuser

运行这个命令后,系统会提示你输入新用户的密码和其他可选信息。

可以发现创建的用户目录没有任何文件,可以使用exit退出安全常用的Linux命令总结总结

  • 如果你需要对创建的用户进行详细的配置,或者需要自动化脚本来创建用户,那么 useradd 可能更适合你。
  • 如果你想要一个更简单的、交互式的体验来创建用户,那么 adduser 是一个更好的选择。

userdel和deluser

deluser 和 userdel 命令在 Unix 或 Linux 系统中用于删除用户账户。虽然这两个命令的功能相似,但在实际使用中存在一些差异。

userdel 命令

  • 功能userdel 是一个低级别的用户账户管理工具,用于删除用户账户。
  • 特点
    • 它是一个命令行工具,通常没有提供交互式的提示。
    • 默认情况下,userdel 只删除用户账户,不会删除用户的主目录和邮件目录。
    • 可以通过命令行参数指定删除用户的主目录和邮件目录。
  • 示例
sudo userdel cybc
# 删除用户 cybc,但不删除其主目录和邮件目录。
sudo userdel -r cybc
# 删除用户 cybc 并删除其主目录和邮件目录。
  • 删除用户
sudo deluser cybc

安全常用的Linux命令总结这个时候还没有完全删除,还存在他的目录安全常用的Linux命令总结使用彻底删除

sudo rm -rf cybc

deluser 命令

  • 功能deluser 是 userdel 的一个包装脚本,提供了更友好的用户界面来删除用户账户。
  • 特点
    • deluser 通常会提供更多的默认值,使得删除用户更加简单。
    • 它可以自动处理删除用户的主目录和邮件目录。
    • 在某些发行版中,deluser 与 userdel 的行为完全相同,但在其他发行版中,它提供了更多的功能和更好的用户体验。
  • 示例
sudo deluser cybc
# 删除用户 cybc,但不删除其主目录和邮件目录。
可以使用删除,或者使用--remove-home参数直接删除
sudo rm -rf cybc

安全常用的Linux命令总结

sudo deluser --remove-home cybc
# 删除用户 cybc 并删除其主目录和邮件目录。

总结

  • userdel
    • 适用于需要低级别控制的情况。
    • 需要显式指定删除主目录和邮件目录的选项。
    • 通常在大多数 Linux 发行版中都可用。
  • deluser
    • 提供更友好的用户界面和更多的默认选项。
    • 自动处理删除主目录和邮件目录的选项。
    • 在某些发行版(如 Debian 和 Ubuntu)中更为常见。

使用 userdel 删除用户并删除主目录

sudo userdel -r cybc

使用 deluser 删除用户并删除主目录

sudo deluser --remove-home cybc

Linux资源耗尽病毒

使用alert或notify-send等工具发送通知。

#!/bin/bash
while true
do
 notify-send "无限弹窗" "这是一个无限循环的弹窗"
 sleep 2
done

解释:#!/bin/bash

  • 它告诉操作系统这个脚本应该用 /bin/bash 解释器来执行。/bin/bash 是 Bash 命令解释器的路径。

while语法

while true
do
...
done

这是一个无限循环。while true 会一直执行循环体中的代码,直到手动中断(例如按 Ctrl+C)。

notify-send 是一个命令行工具,用于发送桌面通知。它通常在 GNOME 桌面环境中可用。这里有两个参数:

  • 第一个参数 "无限弹窗" 是通知的标题。
  • 第二个参数 "这是一个无限循环的弹窗" 是通知的内容。

sleep 2 命令会让脚本暂停 2 秒钟。

保存这个脚本到一个文件中,比如无尽弹窗.sh,然后给它执行权限

chmod +x 无尽弹窗.sh
或者
chmod 777 无尽弹窗.sh

运行这个脚本
./无尽弹窗.sh

安全常用的Linux命令总结

 

原文始发于微信公众号(泷羽Sec-后半生):安全常用的Linux命令总结

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月9日22:05:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   安全常用的Linux命令总结https://cn-sec.com/archives/3612003.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息