查看权限:ls -la /etc/passwd
-rw-r--r--:表示文件的权限。
- 第一个字符 -:表示这是一个普通文件(如果是目录则会显示为d)。
- 接下来的三个字符 rw-:表示文件拥有者(在这里是root)的权限,表示可读(r)和可写(w),但不可执行(-)。
- 再接下来的三个字符 r--:表示与文件拥有者同一组的用户的权限,只有读取权限。
- 最后三个字符 r--:表示其他用户的权限,也只有读取权限。
在Linux中几乎所有的资源都被抽象为文件,包括硬件设备、进程间通信、网络连接等。这样跟利于管理。
ls是列出目录内容的命令。
-l选项以长格式显示文件信息,包括文件的权限、所有者、所属组、文件大小、修改时间等。
-a:显示所有文件,包括隐藏文件(以.开头的文件)。
/etc/passwd:指向要查看的文件的路径。
更改文件所有者:sudo chown root file
- sudo:这用于以超级用户权限执行命令,这是将文件所有权更改为 所必需的。root
- chown:更改所有权的命令本身。
- root:文件的新所有者。这里表示将文件的所有者改为“root”用户
- filename:要更改其所有权的文件的名称。
重要说明:
- 您需要具有运行和更改文件所有权所需的权限。sudo
- 更改文件所有权时要小心,尤其是对于系统文件,因为它可能会影响系统功能。
这是失败的
修改文件权限:sudo chmod u=rwx,g+rw,o-r file
- u=rwx:将文件的所有者(user)权限设置为可读(r)、可写(w)和可执行(x)(rwx)。
- g+rw:将文件的所属组(group)权限添加可读和可写权限(rw),不改变原有的权限。
- o-r:将其他用户(other)从文件权限中去掉可读权限(-r)。
- file: 要修改的文件名称
因此,这个命令的整体效果是:
- 文件的所有者将拥有完全的读、写和执行权限。
- 文件的所属组将具有读和写权限,但没有执行权限(如果原来有执行权限不会受影响)。
- 其他用户将失去读权限,但如果原来他们有写或执行权限,那些不会受到影响
sudo chmod u+x,g+w,o-r file
- sudo:这代表 “superuser do”。它允许允许的用户以超级用户或其他用户身份执行命令,如安全策略所指定。通常,它会要求用户提供密码以授予提升的权限。
- chmod:此命令用于更改文件和目录的访问权限。
- u+x:这意味着“为文件的用户(所有者)添加执行权限”。表示拥有该文件的用户,并添加 execute () 权限。u+x
- g+w:这意味着“为拥有该文件的组添加写入权限”。这表示拥有该文件的组,并添加写入 () 权限。g+w
- o-r:这意味着“删除其他人的读取权限”。这表示不是用户或拥有该文件的组中的其他人,并删除 read () 权限。o-r
- file:这是您正在修改其权限的文件的名称。您将替换为目标文件的实际名称。file
- 向文件的用户(所有者)授予执行权限。
- 向拥有该文件的组授予写入权限。
- 删除所有其他读取权限。
sudo chmod 400 <file>这个命令的含义是将指定文件的权限更改为仅允许文件的拥有者读取,而不允许其他用户读取、写入或执行该文件。
- chmod:表示更改文件权限的命令。
- 400:这是一个八进制数,表示权限设置。其中:
- 第一位(4):表示文件拥有者的权限,这里的 4 代表只读权限(r--),即允许文件拥有者读取文件。
- 第二位(0):表示与文件拥有者同组的用户的权限,这里的 0 代表没有权限(---),即不允许同组用户读取、写入或执行该文件。
- 第三位(0):表示其他用户的权限,这里的 0 也代表没有权限(---),即不允许其他用户读取、写入或执行该文件。
注意事项
- 文件拥有者:只有文件的拥有者可以更改文件的权限,普通用户不能修改其他用户文件的权限。
- 安全性:将文件权限设置为 400 是一种保护敏感文件的方式,确保只有特定用户可以访问文件内容。
系统日志
ls -l /var/log
ls 命令用于列出目录内容
-l 选项表示以长格式显示文件信息,包括文件权限、所有者、所属组、大小、最后修改时间等。
当您执行 ls -l /var/log 命令时,会列出 /var/log 目录下的文件和子目录,并显示它们的详细信息,例如文件权限、所有者、所属组、大小、最后修改时间等。这样的输出可以帮助您了解目录中文件的具体情况。
认证信息日志
sudo tail -3 /var/log/auth.log
命令用于显示 /var/log/auth.log 文件的最后三行内容。sudo 用于以超级用户权限来执行命令
tail 用于显示文件末尾内容
-3 选项表示显示最后三行。
通过执行这个命令,您可以查看 /var/log/auth.log 文件的最后三行日志,通常这些日志记录了系统授权认证相关的信息,比如用户登陆、权限变更等。
二进制日志
who /var/log/wtmp | tail -5
- who:此命令用于显示当前登录系统的用户。
- /var/log/wtmp:这是一个二进制文件,用于记录系统上的所有登录和注销活动。
- tail -5:此命令显示通过管道输入的任何数据的最后 5 行。
dmsg
是一个用于查看和控制内核环形缓冲区的命令。这个缓冲区存储了系统启动时内核生成的消息,包括硬件检测、设备初始化以及内核可能遇到的任何潜在问题的重要信息
。这些消息对于诊断内核或硬件问题非常有用。
dmesg 命令的基本用法是直接在终端中输入 dmesg,这将显示内核环形缓冲区中的所有消息。输出中的每一行代表来自内核的一条消息,并且它们按照记录的顺序显示。此外,dmesg 命令还支持多种参数和选项,例如:
- -c:在显示信息后,清除环形缓冲区中的内容。
- -s <缓冲区大小>:设置缓冲区的大小,默认为8196,等于ring buffer的大小。
- -n:设置记录信息的层级。
- -H:使用人类友好的时间戳。
- -T:显示标准日期和时间。
- -L:强制彩色输出。
- --follow:监视实时日志
- 。
dmesg 命令在所有主流的Linux发行版中都是可用的,包括但不限于Debian。Ubuntu、Alpine、Arch Linux、Kali Linux、RedHat/CentOS、Fedora和Raspbian。由于 dmesg 是内核的一部分,所以它在所有使用Linux内核的系统上都应该可用。
systemd
是 Linux 系统中的一个系统和服务管理器,它在 2011 年首次被引入,旨在替代传统的 init 系统。systemd 提供了一种统一的方式来管理系统进程和服务,包括启动、停止、重启、维护以及监控服务状态等。
以下是 systemd 的一些主要特点:
并行启动:systemd 支持并行启动服务,这可以加快系统的启动速度。
依赖管理:systemd 能够处理服务之间的依赖关系,确保服务按照正确的顺序启动和关闭。
日志管理:systemd 集成了日志管理功能,可以通过 journalctl 命令来查看和管理日志。
socket 和 D-Bus 激活:systemd 支持基于 socket 和 D-Bus 的服务激活,这意味着服务可以在需要时动态启动,而不是在系统启动时就启动所有服务。
易用的配置文件:systemd 使用易于理解和配置的 .service 文件来定义服务。透明性和可调试性:systemd 提供了丰富的工具和命令,如 systemctl 和 journalctl,使得系统和服务的管理和调试变得更加透明和容易。
系统状态管理:systemd 管理着系统的运行级别(runlevels),并能够控制系统的启动、重启和关闭。
时间同步:systemd 还负责网络时间同步,通过 systemd-timesyncd 服务。
容器支持:systemd 提供了对容器技术的支持,如 Docker 和 LXC。
systemd 的主要命令包括:
- systemctl:用于控制 systemd 系统和服务管理器,例如启动、停止、重启服务,查看服务状态等。
- journalctl:用于查看和管理系统日志。
- systemd-analyze:用于分析系统启动时间,找出启动过程中的瓶颈。
- loginctl:用于管理用户会话。
openssl
是一个开源的软件库,它包含了一个通用的加密库(OpenSSL Library),以及一个命令行工具(OpenSSL program),用于使用这个库实现各种加密操作。OpenSSL 支持多种加密算法,包括但不限于:
- SSL/TLS 协议:用于实现安全的网络通信,包括网站加密(HTTPS)。
- 密码算法:包括对称加密算法(如 AES、DES、Blowfish 等)和非对称加密算法(如 RSA、DSA、ECC 等)。
- 哈希算法:如 SHA-1、SHA-2、MD5 等,用于生成数据的摘要。
- 随机数生成器:用于生成加密操作所需的随机数。
OpenSSL 的命令行工具提供了许多实用的功能,包括:
- 证书管理:生成密钥、证书签名请求(CSR)、自签名证书、CA 证书等。
- 加密和解密:对文件和数据进行加密和解密。
- 哈希计算:计算文件或数据的哈希值。
- 密码算法测试:测试不同的密码算法。
- SSL/TLS 测试:测试 SSL/TLS 连接和配置。
openssl passwd -1 123
openssl passwd 命令是 OpenSSL 提供的一个用于生成密码哈希的工具。这个命令可以生成一个加密的密码哈希,通常用于验证用户的密码。
-1 选项指定使用 MD5 算法来生成哈希。
openssl passwd -5 123
openssl passwd -5 命令用于生成使用 SHA-256 算法的密码哈希,其中 -5 选项指定使用 SHA-256 算法。这个命令是 OpenSSL 提供的,用于生成一个加密的密码哈希,通常用于验证用户的密码。
文件管理
创建两个空文件
touch new file
删除文件
rm new file
新建目录
mkdir newdir
删除新目录
rmdir newdir
重命名文件
mv file.txt new.txt
移动文件
mv newfile newdir2
拷贝文件
cp file.txt newwdir.txt
软连接
ln -s file.txt newwdir.txt
硬连接
ln ~/offsec123.txt hardlink.txt
搜索文件
- Which
which 是一个常用的命令行工具,用于在系统的环境变量 PATH 指定的目录中查找可执行文件的路径。当你想要知道某个命令的可执行文件位于何处时,which 命令就非常有用。
用法:which 命令名
这个命令会返回指定命令的完整路径。如果该命令不在 PATH 环境变量中,或者没有找到对应的可执行文件,which 命令将不会返回任何输出。
- -p:指定路径,which 将只在该路径中搜索可执行文件,而不是在 PATH 环境变量中。
- -a:显示所有匹配的文件,而不仅仅是第一个找到的。
echo $PATH
在 Linux 中,$PATH 是一个环境变量,它包含了一系列目录路径,这些路径告诉系统在执行命令时从哪些目录中查找可执行程序。当你在命令行中输入一个命令时,系统会依次在这些指定的目录中搜索对应的可执行文件。
基本概念
- 路径:多个用冒号 (:) 分隔的目录。例如:
bash复制代码
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- 如何查看 $PATH: 在终端中运行以下命令,可以查看当前设置的 $PATH:
bash复制代码
echo $PATH
如何工作
当你输入一个命令,比如 ls 或 python,系统将按以下步骤工作:
- 查看 $PATH 环境变量中的每个目录。
- 从左到右依次检查这些目录,寻找与输入的命令匹配的可执行文件。
- 如果找到,执行该文件;如果没有找到,则返回 command not found 错误。
修改 $PATH
如果你想要将新目录添加到 $PATH 中,可以使用以下命令:
bash复制代码
export PATH=$PATH:/新目录路径
例如,如果你要添加 /opt/bin 到 $PATH,可以这样做:
bash复制代码
export PATH=$PATH:/opt/bin
要永久修改 $PATH,可以将上述 export 命令添加到你的 shell 配置文件(如 .bashrc、.bash_profile 或 .profile)中。
locate (local.db)
sudo updatedb
,用于更新 locate 命令所使用的数据库。这个数据库包含了系统中所有文件的路径信息,使得 locate 命令能够快速地搜索文件。
功能
- 更新数据库:updatedb 命令会扫描整个文件系统(或者指定的部分),并更新 locate 数据库,以便 locate 命令能够找到最新的文件和目录。
- 提高搜索效率:定期运行 updatedb 可以确保 locate 命令的搜索结果包含最新的文件变动,提高搜索效率。
基本用法
bash
sudo updatedb
这个命令会更新整个文件系统的数据库。
选项
- -U 目录:只更新指定目录下的数据库。
- -D:不更新数据库,只打印出将要执行的命令。
- -n:不使用数据库,只扫描文件系统。
- -v:显示详细的扫描信息。
- -o 文件:将更新的数据库写入指定的文件。
示例
- 更新特定目录(例如 /home/user/documents)的数据库:
bash
sudo updatedb -U /home/user/documents
- 显示将要执行的命令而不实际更新数据库:
bash
sudo updatedb -D
- 扫描文件系统但不更新数据库:
bash
sudo updatedb -n
- 显示详细的扫描信息:
bash
sudo updatedb -v
- 将更新的数据库写入指定的文件:
bash
sudo updatedb -o /path/to/custom/locate.db
注意事项
- 权限要求:由于 updatedb 需要访问整个文件系统,通常需要 sudo 权限来运行。
- 耗时:在大型文件系统上,updatedb 可能会花费较长时间来完成数据库的更新。
- 定期更新:根据文件系统的变动频率,可能需要定期运行 updatedb 来保持数据库的更新。
find ~ -mtime 2 -ls | sort -k9 -k10 | more
- find ~ -mtime 2 -ls:
- find:查找命令。
- ~:代表当前用户的主目录。
- -mtime 2:查找在过去2天内修改过的文件。mtime 表示文件内容上次修改的时间。
- -ls:对匹配的文件执行 ls -l 命令,输出文件的详细信息。
- | sort -k9 -k10:
- |:管道符,将前一个命令的输出作为后一个命令的输入。
- sort:排序命令。
- -k9 -k10:指定排序的键值。这里 -k9 表示以第9个字段(通常是文件大小)为第一排序键,-k10 表示以第10个字段(通常是文件名)为第二排序键。注意,字段编号是从1开始的。
- | more:
- |:管道符。
- more:分页显示命令。如果输出超过一屏,它会一页一页地显示,允许用户逐页查看。
综上所述,整个命令的作用是:
- 在当前用户的主目录及其子目录中查找在过去2天内修改过的文件。
- 对这些文件执行 ls -l 命令,获取它们的详细信息。
- 按照文件大小和文件名对这些信息进行排序。
- 使用 more 命令分页显示排序后的结果。
这个命令可以帮助用户快速查看最近修改过的文件,并根据文件大小和名称进行排序,
find . -type f -iname ‘*.sh’ -mmin -30 -ls
- find:这是用来在文件系统中搜索文件的命令。
- .:指定搜索的起始目录,. 代表当前目录。
- -type f:指定只查找文件(不包括目录)。
- -iname '*.sh':查找文件名不区分大小写的匹配模式 *.sh 的文件。-iname 选项使得搜索对大小写不敏感。
- -mmin -30:查找在过去30分钟内修改过的文件。-mmin 选项后面跟的数字表示分钟数,-30 表示文件修改时间距离现在不超过30分钟。
- -ls:对匹配的文件执行 ls -l 命令,输出文件的详细信息,包括文件权限、链接数、所有者、组、大小、最后修改时间等。
综上所述,整个命令的作用是:
- 在当前目录及其子目录中查找所有在过去30分钟内修改过的、文件名不区分大小写匹配 *.sh(即Shell脚本文件)的文件。
- 对这些文件执行 ls -l 命令,获取它们的详细信息。
find . -name ‘*.svn’ -exec rm -rf {} \;
- find:这是用来在文件系统中搜索文件和目录的命令。
- .:指定搜索的起始目录,. 代表当前目录。
- -name '*.svn':查找文件名匹配模式 *.svn 的文件或目录。这里的 .svn 是 Subversion 版本控制系统用来存放版本控制信息的目录。
- -exec:对 find 命令找到的每个匹配项执行后面的命令。
- rm -rf:这是 remove 命令的缩写,用于删除文件和目录。-r 选项表示递归删除目录及其内容,-f 选项表示强制删除,不提示确认。
- {}:这是一个占位符,代表 find 命令找到的每个匹配项。
- \;:这是 -exec 选项的结束标志。在 -exec 命令的末尾使用 \; 来表示命令的结束。
综上所述,整个命令的作用是:
- 在当前目录及其子目录中查找所有名为 .svn 的目录。
- 对这些 .svn 目录执行 rm -rf 命令,递归地强制删除它们
它会删除所有 .svn 目录及其包含的所有文件,而且不会提示任何确认。
find / -user root -type f -perm -o=w -name '*.sh' 2>/dev/null
find:这是用来在文件系统中搜索文件和目录的命令。
/:指定搜索的起始目录,/ 代表根目录,意味着搜索将从整个文件系统开始。
-user root:查找所有者为root的文件。
-type f:指定只查找文件(不包括目录)。
-perm -o=w:查找文件权限中至少包含“其他用户可写”权限的文件。-perm -o=w 表示“其他用户(o)具有写(w)权限”。
-name '*.sh':查找文件名以 .sh 结尾的文件,即Shell脚本文件。
2>/dev/null:将标准错误(stderr)重定向到 /dev/null,这意味着任何错误信息都不会显示在终端上。
综上所述,整个命令的作用是:
在整个文件系统中查找所有者为root、具有其他用户写权限、文件名以 .sh 结尾的文件。
将错误信息重定向,不显示在终端上。
警告:这个命令可能会返回敏感的系统文件
用户账户数据库
/etc/passwd
文件内容
文件中的每行都包含了一个用户账户的信息,这些信息由冒号(:)分隔,通常包含以下字段:
用户名:账户的登录名。
密码:在早期的系统中,这里存储的是加密后的密码,但现在通常是x或*,表示密码被存储在/etc/shadow文件中。
用户ID(UID):用户的数字标识符。
组ID(GID):用户的主要组的数字标识符。
用户信息:用户的全名或描述。
主目录:用户的主目录路径。
登录Shell:用户登录后默认使用的Shell。
/etc/shadow
- 用户名:与 /etc/passwd 文件中的用户名相对应。
- 加密密码:用户的密码经过加密处理后的字符串,通常是使用 SHA-512 算法进行加密的。
- 最后一次修改时间:表示用户最后一次修改密码的时间,以从1970年1月1日开始的天数表示。
- 密码最小有效期:密码在多少天后才能被更改。
- 密码最大有效期:密码在多少天后必须被更改。
- 密码到期前的警告天数:在密码到期前的多少天开始警告用户。
- 密码过期后的宽限天数:密码过期后,用户还可以登录的天数。
- 账号失效日期:账号在多少天后失效,以从1970年1月1日开始的天数表示。如果此字段为空,则表示账号永不过期。
- 保留字段:未使用,通常为空
组账号
cat /etc/group
- 组名:组的名称。
- 加密的组密码:通常为空或包含一个x,表示组密码存储在 /etc/gshadow 文件中,或者没有设置组密码。
- 组ID(GID):组的唯一数字标识符。
- 组成员列表:属于该组的用户列表,用户之间用逗号分隔。
禁用账号
sudo passwd -l username
命令用于锁定指定用户的密码
- sudo:以超级用户(root)的权限执行后面的命令。由于修改用户密码通常需要较高的权限,所以这里使用 sudo。
- passwd:用于管理用户账户密码的命令。
- -l:这是 passwd 命令的一个选项,代表“lock”(锁定)。
- username:你想要锁定密码的用户的用户名。
执行效果
当你执行 sudo passwd -l username 命令后,系统会将指定用户的密码状态设置为锁定。这意味着即使用户知道正确的密码,也无法通过密码登录系统。这个状态可以通过查看 /etc/shadow 文件来确认,其中用户的密码字段会显示为两个感叹号 ! 或者一个感叹号 ! 加上一些字符,具体显示取决于系统配置。
chage -E 1990-01-01 kali
命令用于设置用户账户的过期日期。在这个命令中,-E 选项用于指定账户的过期日期,格式为 YYYY-MM-DD。这里的 1990-01-01 表示将 kali 用户的账户设置为在1990年1月1日过期。一旦账户过期,该用户将无法登录系统。
具体来说,chage 命令用于更改与用户账户相关的密码过期信息。通过指定 -E 选项后跟一个日期,你可以设置账户的过期日期。这个日期之后,账户将被系统视为无效,用户将无法使用该账户登录系统。
passwd -S username
命令用于显示指定用户账户的密码状态信息。这个命令会输出用户的密码状态,包括密码是否已设置、密码的最后修改时间、密码到期时间等。
输出的信息通常包括以下几个部分:
- PS:表示密码已设置。
- NP:表示密码未设置。
- LK:表示账户被锁定。
- EXP:表示账户已过期。
- P:表示密码到期前的警告天数。
- W:表示密码过期后的宽限天数。
- S:表示账户失效日期。
- D:表示账户密码被禁用。
存储管理
内存使用量
free -m
命令详解
- free:这是命令的名称,用于显示内存状态。
- -m:这个选项告诉 free 命令以兆字节(MB)为单位显示内存使用情况。
输出内容
执行 free -m 命令后,你会得到类似于以下的输出:
total used free shared buff/cache available
Mem: 3217 1256 56 199 1905 1148
Swap: 999 68 931
这里的各个列表示:
- total:系统总内存量。
- used:已被使用的内存量。
- free:当前未使用的内存量。
- shared:多个进程共享的内存量。
- buff/cache:被系统用作缓冲和缓存的内存量。这部分内存可以被快速回收用于其他用途。
- available:估计的可用内存量,考虑到缓存和缓冲区可以被回收。
- Swap:总交换空间、已使用交换空间和空闲交换空间。
注意事项
- 缓冲和缓存:buff/cache 部分的内存虽然被标记为已使用,但实际上是可以被系统随时回收的,以供其他进程使用。
- 可用内存:available 列提供了一个更准确的可用内存估计,因为它考虑了缓冲和缓存可以被回收的事实。
磁盘使用量
df -hT
df 是一个用于显示文件系统的磁盘空间使用情况的命令。-h 和 -T 是 df 命令的两个选项:
- -h 或 --human-readable:以易读的格式显示大小(例如 KB、MB、GB),而不是以字节为单位。
- -T 或 --print-type:显示文件系统的类型。
所以,df -hT 这个命令会显示文件系统的磁盘使用情况,包括文件系统的类型,并且以易读的格式显示大小。这是一个查看磁盘空间和文件系统类型的有用命令。
你可以在终端中输入 df -hT 来执行这个命令。输出结果将类似于:
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 190G 18G 172G 10% /
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/sdb1 ext4 931G 85G 846G 10% /data
在这个例子中,你可以看到每个文件系统的类型(例如 ext4),大小(Size),已用空间(Used),可用空间(Avail),使用百分比(Use%),以及它们被挂载的位置(Mounted on)。
复制再试一次分享
文件或目录大小
sudo du ./* -hsc
- 查-h 或 --human-readable:以易读的格式显示磁盘使用情况(例如 KB、MB、GB)。
- -s 或 --summarize:显示每个参数的总计大小,而不是每个子目录的大小。
命令 sudo du ./* -hsc 的意图是检查当前目录下所有文件和子目录的磁盘使用情况,并以易读的格式(如KB、MB、GB)显示。这个命令包含以下参数:
- sudo:以超级用户权限运行命令。
- du:磁盘使用情况(Disk Usage)的命令。
- ./*:表示当前目录下的所有文件和目录。
- -c 或 --total:在最后显示所有参数的总计大小。
看硬盘分区
sudo fdisk -l
fdisk 是一个在 Linux 系统中用于管理磁盘分区的工具。命令 sudo fdisk -l 用于列出系统中所有可用的磁盘和分区的列表。这里的 -l(小写的 L)选项告诉 fdisk 列出所有磁盘的信息,而不是进入交互式分区编辑模式。
当你在终端中运行 sudo fdisk -l 时,你需要具有相应的权限,因此使用了 sudo 来获取超级用户权限。这个命令会显示所有磁盘的分区表,包括磁盘的名称、大小、分区类型、分区大小等信息。
输出结果将类似于:
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 976773119 488386560 83 Linux
/dev/sda2 976773120 976773631 488386 82 Linux swap / Solaris
在这个例子中,/dev/sda 是一个磁盘设备,有两个分区:/dev/sda1 和 /dev/sda2。/dev/sda1 是一个 Linux 分区,而 /dev/sda2 是一个 Linux swap 分区。
挂载分区
sudo mount /dev/sdb1/mnt/usb
命令 sudo mount /dev/sdb1 /mnt/usb 用于将 /dev/sdb1 分区挂载到 /mnt/usb 目录。这里是命令的详细解释:
- sudo:以超级用户权限执行命令,因为挂载文件系统通常需要管理员权限。
- mount:挂载命令。
- /dev/sdb1:要挂载的设备或分区。在这个例子中,sdb1 是第二个SCSI硬盘的第一个分区。
- /mnt/usb:挂载点,即文件系统中的一个目录,用于访问挂载的设备或分区的内容。
然而,你的命令中有一个斜杠 / 错误地放在了 /dev/sdb1 和 /mnt/usb 之间。正确的命令应该是:
bash
sudo mount /dev/sdb1 /mnt/usb
在执行这个命令之前,请确保:
- /dev/sdb1 确实存在,并且是一个有效的分区。
- /mnt/usb 目录已经存在。如果不存在,你需要先创建它,可以使用 sudo mkdir -p /mnt/usb 命令。
基本网络工具
Ifconfig
用于配置和显示系统网络接口的信息。这个工具可以帮助用户查看和修改网络接口的配置,包括 IP 地址、子网掩码、广播地址等。
以下是一些基本的 ifconfig 命令用法:
- 查看所有网络接口的状态:
bash
ifconfig
- 查看特定网络接口的状态:
bash
ifconfig eth0
这里 eth0 是一个示例接口名称,你应该替换为你的实际接口名称。
- 启用一个禁用的网络接口:
bash
ifconfig eth0 up
- 禁用一个已启用的网络接口:
bash
ifconfig eth0 down
- 为网络接口分配一个 IP 地址:
bash
ifconfig eth0 192.168.1.100 netmask 255.255.255.0
这里 192.168.1.100 是分配给 eth0 接口的 IP 地址,255.255.255.0 是子网掩码。
- 添加或删除 ARP 表中的条目:
bash
ifconfig eth0 arp 192.168.1.100 hw ether 00:11:22:33:44:55
这将添加一个 ARP 表条目,将 IP 地址 192.168.1.100 映射到 MAC 地址 00:11:22:33:44:55。
Ip addr
- 显示所有网络接口的 IP 地址:
bash
ip addr
或者
bash
ip addr show
- 显示特定网络接口的 IP 地址:
bash
ip addr show eth0
这里 eth0 是一个示例接口名称,你应该替换为你的实际接口名称。
- 添加一个新的 IP 地址到网络接口:
bash
sudo ip addr add 192.168.1.100/24 dev eth0
这里 192.168.1.100/24 是要添加的 IP 地址和子网掩码,dev eth0 指定了要修改的网络接口。
- 删除一个 IP 地址从网络接口:
bash
sudo ip addr del 192.168.1.100/24 dev eth0
- 显示所有网络接口的详细信息:
bash
ip -d link show
这里 -d 选项表示显示详细信息。
- 显示路由表:
bash
ip route show
- 显示网络邻居(ARP 表):
bash
ip -s -s neigh show
这里 -s 选项表示显示更详细的统计信息。
sudo ifdown eth0
ifdown 命令用于关闭指定的网络接口。当你执行 sudo ifdown eth0 命令时,你正在请求系统关闭名为 eth0 的网络接口。
这里是命令的详细解释:
- sudo:以超级用户权限执行命令,因为关闭网络接口通常需要管理员权限。
- ifdown:用于关闭网络接口的命令。
- eth0:指定要关闭的网络接口名称。
请注意,eth0 是一个常见的命名约定,用于表示第一个以太网接口。在现代 Linux 系统中,网络接口可能有不同的命名,例如 enp0s3、eno1 或 ens33 等,这取决于系统和硬件配置。你可以使用 ip link 或 ifconfig 命令来查看所有可用的网络接口及其当前状态。
在执行 ifdown 命令之前,请确保:
- 你确实想要关闭该网络接口,因为这可能会导致网络连接中断。
- 你有足够的权限执行该命令,通常需要超级用户权限。
- 你已经保存了所有重要数据,以防关闭网络接口导致数据丢失。
如果你不确定网络接口的名称,可以先使用以下命令查看:
bash
ip link show
或者:
bash复制
ifconfig -a
这些命令将列出所有网络接口及其状态,帮助你确定正确的接口名称。如果你正在使用的是较新的 Linux 发行版,建议使用 ip 命令套件中的 ip link set dev eth0 down 命令来关闭网络接口,因为 ifdown 命令可能不再被默认包含。
复制再试一次分享
sudo ifup eth0
ifup 命令用于启用(激活)指定的网络接口。当你执行 sudo ifup eth0 命令时,你正在请求系统启用名为 eth0 的网络接口。
这里是命令的详细解释:
- sudo:以超级用户权限执行命令,因为启用网络接口通常需要管理员权限。
- ifup:用于启用网络接口的命令。
- eth0:指定要启用的网络接口名称。
在使用 ifup 命令之前,请确保:
- 你确实想要启用该网络接口。
- 你有足够的权限执行该命令,通常需要超级用户权限。
- 网络接口配置正确,例如,如果接口配置为通过 DHCP 获取 IP 地址,确保 DHCP 客户端配置正确,并且服务器可用。
网络配置
/etc/network/interfaces
这个文件定义了系统的网络设备如何配置,包括 IP 地址、子网掩码、网关、DNS 服务器等信息。通过编辑这个文件,你可以手动设置静态 IP 地址或者配置设备以从 DHCP 服务器动态获取这些信息。
以下是 /etc/network/interfaces 文件的一些基本组成部分:
- lo(本地回环接口):
bash
auto lo
iface lo inet loopback
这表示自动启动本地回环接口,并将其配置为使用回环地址(127.0.0.1)。
- 以太网接口(例如 eth0):
bash
auto eth0
iface eth0 inet dhcp
这表示自动启动 eth0 接口,并配置它从 DHCP 服务器动态获取 IP 地址。
- 静态 IP 配置:
bash
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
这表示自动启动 eth0 接口,并为其分配一个静态 IP 地址 192.168.1.100,子网掩码 255.255.255.0,网关 192.168.1.1,以及 DNS 服务器 8.8.8.8 和 8.8.4.4。
- 无线接口:
bash
auto wlan0
iface wlan0 inet dhcp
wpa-ssid YOUR_SSID
wpa-psk YOUR_PASSWORD
这表示自动启动无线接口 wlan0,并使用 WPA/WPA2 密码连接到指定的无线网络。
编辑 /etc/network/interfaces 文件时,你应该使用超级用户权限,因为该文件通常受到保护。你可以使用 sudo 命令和文本编辑器(如 nano 或 vim)来编辑它:
bash
sudo nano /etc/network/interfaces
或者:
bash
sudo vim /etc/network/interfaces
编辑完成后,保存文件并退出编辑器。然后,你可以使用以下命令重新加载网络配置:
bash
sudo systemctl restart networking
或者,对于较旧的系统,可能需要使用:
bash复制
sudo /etc/init.d/networking restart
Networkmanager
是 Linux 系统中一个用于管理和监控网络设置的守护进程,它由 Red Hat 在 2004 年启动的项目,旨在简化 Linux 用户的现代网络需求处理,特别是无线网络的配置和管理。NetworkManager 服务的核心是一个运行于超级用户权限下的守护进程,负责实际的网络连接管理、状态报告和网络变化的监控。它能够自动发现网络接口卡并配置 IP 地址,管理网络服务和网络连接。
NetworkManager 提供了客户端程序,允许用户管理网络连接,包括命令行工具 nmcli 和图形界面工具。nmcli 是 NetworkManager 的命令行界面工具,提供了丰富的命令和选项,可以用于查看网络连接状态、配置和管理网络连接、设置 IP 地址、DNS 等。
NetworkManager 的网络配置文件通常位于 /etc/NetworkManager/ 目录下,具体的连接配置保存在 /etc/NetworkManager/system-connections/ 目录下,以 .nmconnection 文件的形式存在。
管理 NetworkManager 服务的一些常用命令包括:
- 查看 NetworkManager 状态:
bash
systemctl status NetworkManager
在 Debian 10 中,等效命令为:
bash
systemctl status network-manager
这将显示 NetworkManager 服务的状态。
- 使用 nmcli 命令: nmcli 命令可以用于查看和管理 NetworkManager 控制的网络。例如,查看网络状态:
bash
nmcli general status
管理主机名:
bash
nmcli general hostname
显示当前用户对网络管理器的操作权限:
bash
nmcli general permissions
获取和更改网络管理器日志记录级别和域:
bash
nmcli general logging
管理网络连接,例如启用或禁用网络:
bash
nmcli networking {on|off|connectivity}
这些命令提供了对 NetworkManager 的广泛控制。
- 重启 NetworkManager 服务: 如果需要重启 NetworkManager 服务,可以使用以下命令:
bash
systemctl restart NetworkManager
或者在某些系统中:
bash
systemctl restart network-manager
这将重启 NetworkManager 服务,应用任何更改的配置。
NetworkManager 提供了一个灵活且强大的网络管理框架,适用于需要动态网络配置的环境。
网络连接
netstat -natup
,用于显示网络连接、路由表、接口统计等网络相关信息。netstat -natup 命令是一个常用的组合,用于显示网络连接信息,包括 TCP 和 UDP 的端口及其状态。
以下是 netstat -natup 命令中各个选项的含义:
- -n 或 --numeric:显示数字形式的地址和端口号,不进行域名解析。
- -a 或 --all:显示所有连接和监听端口。
- -t 或 --tcp:仅显示 TCP 连接。
- -u 或 --udp:仅显示 UDP 连接。
- -p 或 --programs:显示哪个进程正在使用每个套接字。
因此,netstat -natup 命令将显示所有 TCP 和 UDP 端口的使用情况,包括每个端口的程序名称和进程 ID。这对于诊断网络问题和监控网络活动非常有用。
在现代 Linux 系统中,netstat 命令可能不预装,因为它属于 net-tools 包,而许多现代发行版已经转向使用更现代的 iproute2 工具集,特别是 ss 和 ifconfig 命令的替代品 ip。如果你的系统没有 netstat,你可以尝试使用 ss 命令来获取类似的信息:
bash
ss -natup
ss 命令是 socket statistics 的缩写,它是 iproute2 包的一部分,提供了与 netstat 类似的功能,但使用起来更高效、更现代。ss -natup 将显示所有 TCP 和 UDP 端口的使用情况,包括进程名称和进程 ID。
复制再试一次分享
ss -natup
是一个用于显示套接字统计信息的工具,它是 iproute2 包的一部分,在现代 Linux 系统中通常用来替代 netstat。ss -natup 命令用于显示 TCP 和 UDP 端口的使用情况,包括进程信息。下面是各个选项的含义:
- -n 或 --numeric:不解析服务名称,只显示数字。
- -a 或 --all:显示所有套接字(监听的、已连接的、已连接的、定时等待的等)。
- -t 或 --tcp:仅显示 TCP 套接字信息。
- -u 或 --udp:仅显示 UDP 套接字信息。
- -p 或 --processes:显示使用套接字的进程信息。
因此,ss -natup 命令将列出所有 TCP 和 UDP 端口,包括它们的状态、进程 ID 和进程名称。
这里是一个示例输出:
plaintext
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *:123 *:*
udp UNCONN 0 0 *:5353 *:*
tcp LISTEN 0 128 *:22 *:*
tcp LISTEN 0 128 127.0.0.1:631 *:*
tcp ESTAB 0 0 192.168.1.100:22 192.168.1.101:49667
在这个输出中,你可以看到:
- udp 和 tcp 行分别显示了 UDP 和 TCP 端口的使用情况。
- UNCONN 和 LISTEN 分别表示未连接和监听状态。
- Recv-Q 和 Send-Q 列显示接收和发送队列的长度。
- Local Address:Port 和 Peer Address:Port 分别显示本地和远程的地址和端口。
二层地址
arp -en
arp -en 命令用于显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表。在 Linux 系统中,arp 命令的 -e 选项用于显示 ARP 表,而 -n 选项用于以数字形式显示地址,不进行域名解析。因此,arp -en 命令会以数字形式显示 ARP 表,不将 IP 地址解析为主机名。
这个命令的输出通常会包括以下信息:
- IP 地址(以数字形式显示)
- 物理地址(MAC 地址)
- 接口(网络接口卡)
例如,输出可能如下所示:
plaintext
Address HWtype HWaddress Flags Mask Iface
192.168.1.1 ether 00:11:22:33:44:55 C eth0
192.168.1.2 ether 66:77:88:99:00:11 C eth0
在这个例子中,192.168.1.1 和 192.168.1.2 是两个 IP 地址,它们的物理地址(MAC 地址)分别是 00:11:22:33:44:55 和 66:77:88:99:00:11,并且它们都与 eth0 网络接口相关联。HWtype 表示硬件类型,HWaddress 表示硬件地址(即 MAC 地址),Flags 表示条目的状态,Mask 和 Iface 分别表示子网掩码和接口名称。
复制再试一次分享
路由信息
route
- 命令用于显示和修改系统的路由表。路由表包含了决定数据包如何通过网络发送的信息。显示路由表:
bash
route -n
使用 -n 选项可以避免域名解析,直接显示数字形式的 IP 地址。
- 添加路由:
bash
route add default gw <gateway-ip> dev <interface>
这将添加一个默认网关,使得所有非本地网络的数据包都通过指定的网关发送。<gateway-ip> 是网关的 IP 地址,<interface> 是网络接口的名称。
- 删除路由:
bash
route del -net <network-ip> netmask <netmask> gw <gateway-ip>
这将删除到特定网络的路由。<network-ip> 是目标网络的 IP 地址,<netmask> 是子网掩码,<gateway-ip> 是网关的 IP 地址。
- 添加特定网络的路由:
bash
route add -net <network-ip> netmask <netmask> gw <gateway-ip>
这将添加到特定网络的路由。
- 添加特定主机的路由:
bash
route add -host <host-ip> gw <gateway-ip>
这将添加到特定主机的路由。
请注意,使用 route 命令可能需要超级用户权限,因此你可能需要在命令前加上 sudo。
在现代 Linux 系统中,建议使用 ip route 命令来代替 route 命令,因为 ip 命令提供了更一致和强大的接口。以下是使用 ip 命令的一些等效用法:
- 显示路由表:
bash
ip route show
或者
bash
ip r
- 添加默认路由:
bash
ip route add default via <gateway-ip> dev <interface>
- 添加特定网络的路由:
bash
ip route add <network-ip>/24 via <gateway-ip> dev <interface>
- 删除路由:
bash复制
ip route del <network-ip>/24
iproute
是一个集成的网络配置工具,提供了 ip 命令,用于显示和操作路由、网络设备、接口等网络相关的设置。iproute 并不是一个单独的命令,而是 ip 命令的一个别名,通常用于引用 ip 命令的路由功能。
ip 命令是一个多功能的工具,它包括了以下几个主要的子命令:
- ip link:用于查看和操作网络设备(接口)的状态,比如启用或禁用接口。
- ip addr:用于显示和修改网络接口的 IP 地址。
- ip route:用于显示和修改路由表。
- ip rule:用于管理路由规则。
- ip neigh:用于显示和修改 ARP 表项(邻居解析)。
- ip tunnel:用于配置和显示 IP 隧道。
- ip maddr:用于管理多播地址。
- ip monitor:用于实时监控网络事件。
sudo ip route add 10.13.37.0/24 dev eth1
- sudo:以超级用户权限执行命令,因为修改路由表通常需要管理员权限。
- ip:这是 iproute2 包中的命令,用于操作网络设置。
- route add:添加一条新的路由规则。
- 10.13.37.0/24:指定要路由的目标网络。这里 10.13.37.0 是网络的起始地址,/24 表示子网掩码(255.255.255.0),意味着这个网络包含了 10.13.37.1 到 10.13.37.254 的 IP 地址。
- dev eth1:指定通过哪个网络设备(接口)发送到目标网络的数据包。这里 eth1 是网络接口的名称。
执行这条命令后,所有发送到 10.13.37.0/24 网络的数据包都将通过 eth1 接口发送。
traceroute dffensive-secur ity.com
要使用 traceroute 命令来追踪到 dffensive-security.com 的路由路径,你可以在终端中输入以下命令:
bash
traceroute dffensive-security.com
这个命令会显示数据包从你的计算机到 dffensive-security.com 所经过的每个路由器的路径。每个跃点(hop)的后面通常会显示该跃点的 IP 地址以及到达该跃点的时间延迟。这个工具对于诊断网络问题非常有用,比如确定数据包在网络中的哪个部分出现了延迟或丢失。
ssh服务
启动服务
sudo systemctl start ssh
- sudo:以超级用户权限执行命令,因为启动或停止服务通常需要管理员权限。
- systemctl:是 systemd 系统和服务管理器的命令行工具,用于控制 systemd 系统和服务管理器。
- start:是 systemctl 的一个参数,用于激活(启动)指定的服务。
- ssh:指定要启动的服务名称,这里是 SSH 服务。
执行这个命令后,SSH 服务会被启动,允许远程用户通过 SSH 协议安全地连接到你的系统进行管理和操作。
如果你想要检查 SSH 服务的状态,可以使用以下命令:
bash
sudo systemctl status ssh
这将显示 SSH 服务的当前状态,包括它是否正在运行、是否已启动、是否启用了自启动等信息。
如果你想要 SSH 服务在系统启动时自动启动,可以使用以下命令来启用它:
bash
sudo systemctl enable ssh
相反,如果你想要禁用 SSH 服务的自启动,可以使用以下命令:
bash
sudo systemctl disable ssh
请注意,如果你的系统中没有安装 SSH 服务,你可能需要先安装它。在大多数 Linux 发行版中,可以使用包管理器来安装 SSH 服务,例如在基于 Debian 的系统(如 Ubuntu)中,可以使用以下命令安装:
bash
sudo apt-get update
sudo apt-get install openssh-server
在基于 Red Hat 的系统(如 CentOS)中,可以使用以下命令安装:
bash
sudo yum install openssh-server
或者在新版本的 Red Hat 系统(如 Fedora)中使用 dnf:
bash复制
sudo dnf install openssh-server
ssh root@localhost
- ssh:是 Secure Shell 的缩写,一个用于在网络上加密方式远程登录和管理服务器的协议。
- root:是你要连接的远程主机上的用户名,在这种情况下是 root 用户。
- localhost:指定了你要连接的主机地址,localhost 指的是本机,即你当前工作的计算机。
执行这个命令时,系统会尝试使用你的本地 root 用户的私钥去认证远程主机上的 root 用户账户。如果 SSH 服务在本地主机上运行,并且你的用户具有 root 权限,这个命令将允许你通过 SSH 连接到本地系统。
请注意以下几点:
- 安全性:使用 root 用户进行 SSH 连接通常被认为是不安全的,因为 root 用户拥有完全的系统权限,如果连接过程中出现问题,可能会对系统安全造成风险。建议使用普通用户账户进行 SSH 连接,并在需要时使用 sudo 命令获取必要的权限。
- SSH 服务:在执行 ssh root@localhost 命令之前,确保 SSH 服务已经在本地主机上启动。你可以使用 sudo systemctl status ssh 命令检查 SSH 服务的状态,或者使用 sudo systemctl start ssh 命令启动它。
- 密钥认证:如果你的 SSH 客户端和服务器之间设置了密钥认证,你可能需要确保你的客户端有正确的私钥,并且服务器上的 ~/.ssh/authorized_keys 文件包含了对应的公钥。
- 防火墙和 SELinux:确保本地防火墙和 SELinux(如果启用)允许 SSH 连接。
- localhost 解析:在某些配置中,localhost 可能解析为 IPv6 地址,如果你的 SSH 服务没有配置为监听 IPv6,你可能需要使用 127.0.0.1 代替 localhost。
配置文件
/etc/ssh/sshd_config
是 SSH 守护进程(sshd)的主配置文件,它控制着 SSH 服务器的行为和设置。这个文件通常位于 /etc/ssh/ 目录下,并且在 SSH 服务启动时被读取。
以下是一些常见的配置选项和它们的说明:
- PermitRootLogin:控制是否允许 root 用户通过 SSH 登录。可能的值有 yes、no、without-password(不允许密码登录,但允许密钥登录)和 prohibit-password(允许登录,但禁止密码认证)。
- PubkeyAuthentication:是否允许公钥认证。通常设置为 yes 来启用。
- PasswordAuthentication:是否允许密码认证。通常设置为 yes 来启用,但也可以选择 no 来强制使用密钥认证。
- ChallengeResponseAuthentication:是否启用挑战响应认证,如一次性密码(OTP)。
- UsePAM:是否使用 PAM(可插拔认证模块)进行认证。
- X11Forwarding:是否允许 X11 转发,通常设置为 yes 来启用。
- AllowTcpForwarding:是否允许远程 TCP 端口转发。
- Port:SSH 服务监听的端口,默认是 22。
- AddressFamily:指定 sshd 应该使用哪种地址族,可以是 inet(IPv4)、inet6(IPv6)或 any。
- ListenAddress:指定 sshd 应该监听的网络接口的 IP 地址。
- HostKey:指定私钥文件的位置,用于服务器身份验证。
- LogLevel:设置日志记录级别,如 DEBUG、INFO、WARNING、ERROR、CRIT、QUIET。
- AuthorizedKeysFile:指定存放公钥的文件路径。
- ClientAliveInterval 和 ClientAliveCountMax:设置 SSH 连接的保活参数。
编辑 sshd_config 文件时,你应该使用超级用户权限,因为该文件通常受到保护。你可以使用 sudo 命令和文本编辑器(如 nano 或 vim)来编辑它:
bash
sudo nano /etc/ssh/sshd_config
或者:
bash
sudo vim /etc/ssh/sshd_config
编辑完成后,保存文件并退出编辑器。然后,你需要重新加载 SSH 服务以应用更改:
bash
sudo systemctl reload sshd
或者在某些系统中:
bash复制
sudo /etc/init.d/sshd reload
客户端配置
hashknownHosts yes
在 SSH 配置中,HashKnownHosts 是一个指令,用于控制 SSH 客户端如何处理已知的主机密钥。当设置为 yes 时,SSH 客户端会将 ~/.ssh/known_hosts 文件中的主机公钥哈希化,而不是存储主机的确切名称。
这里是 HashKnownHosts 指令的一些详细说明:
- HashKnownHosts yes:启用哈希化已知主机的功能。SSH 客户端将使用哈希值而不是主机的域名或IP地址来匹配 known_hosts 文件中的条目。这样做的好处是可以提高安全性,因为即使有人能够访问你的 known_hosts 文件,他们也无法轻易地识别出哪个哈希对应哪个主机。
- HashKnownHosts no:禁用哈希化功能。SSH 客户端将直接使用主机的域名或IP地址来匹配 known_hosts 文件中的条目。
- HashKnownHosts ask 或 HashKnownHosts never:这些选项允许用户选择是否接受未哈希的主机密钥,或者完全忽略哈希化设置。
启用 HashKnownHosts yes 的配置示例如下:
bash
Host *
HashKnownHosts yes
这表示对于所有 SSH 连接,都将启用哈希化已知主机的功能。
请注意,HashKnownHosts 是 SSH 客户端的配置选项,通常位于用户主目录下的 ~/.ssh/config 文件中。如果你想要修改这个设置,你需要编辑这个文件。如果你没有这个文件,你可以创建一个:
bash
touch ~/.ssh/config
chmod 600 ~/.ssh/config
然后使用文本编辑器编辑它,例如使用 nano:
bash复制
nano ~/.ssh/config
添加上述配置后,保存并退出编辑器。这样,你的 SSH 客户端就会按照新的配置处理已知主机了。
复制再试一次分享
~/.ssh
是一个目录,位于用户的主目录下,用于存放 SSH 相关的文件。这个目录通常用于存储以下文件:
- known_hosts:
- 这个文件用于存储你曾经连接过的 SSH 服务器的公钥。SSH 客户端会使用这个文件来验证服务器的身份,防止中间人攻击。
- 当你第一次连接到一个新的 SSH 服务器时,SSH 客户端会询问你是否信任该服务器的公钥,并将公钥添加到 known_hosts 文件中。
- id_rsa 或 id_dsa:
- 这是你的私钥,用于 SSH 认证。通常与同名的公钥文件配对使用。
- 私钥应该保持私密,只有你自己和需要授权访问的服务器应该知道这个文件的内容。
- id_rsa.pub 或 id_dsa.pub:
- 这是你的公钥,可以安全地分享给任何人或服务器。
- 公钥用于在 SSH 连接时验证你的身份。
- config:
- 这是一个可选的配置文件,用于自定义 SSH 客户端的行为。
- 你可以在 config 文件中设置特定的主机别名、指定密钥文件、设置端口转发、配置用户认证等。
- ssh_known_hosts:
- 这是一个旧的文件名,用于存储已知的主机公钥。在较新的 SSH 版本中,这个功能已经被 known_hosts 文件取代。
远程控制
scp [email protected]:/home/kali/ .bashrc Copisdbashrc
- 源路径:[email protected]:/home/kali/.bashrc 表示从远程主机 1.1.1.1 上的 root 用户的 /home/kali/.bashrc 文件复制。
- 目标路径:Copisdbashrc 看起来像是一个拼写错误。如果你的意图是将文件复制到当前目录并命名为 Copisdbashrc,那么这个部分是正确的。如果你想要复制到特定的目录或者使用不同的文件名,你需要指定完整的路径。
scp passwd -p kali ssh [email protected]
scp [OPTION] [user@]SRC_HOST:]file1 [user@]DEST_HOST:]file2
- [user@]SRC_HOST:]file1:指定源文件的位置。如果文件在本地,可以省略 user@SRC_HOST: 部分。
- [user@]DEST_HOST:]file2:指定目标位置,包括远程主机的用户名和主机地址。
纠正你的命令
- 源文件:passwd 应该是本地文件,所以不需要 kali 用户名。
- 目标主机:IP 地址 127.0.0.1 有一个小错误,应该是 127.0.0.1(一个数字 1,不是字母 l)。
- 目标路径:你需要指定目标文件的完整路径,包括文件名。
远程拷贝
scp [email protected]:/home/kali/.bashrc./Copiedbashrc
- scp:是安全复制命令,用于在本地与远程主机之间复制文件。
- [email protected]:指定远程主机的登录账号(这里是 root)和 IP 地址(1.1.1.1)。
- :/home/kali/.bashrc:这是远程主机上要复制的文件路径。
- ./Copiedbashrc:./ 表示本地当前目录,Copiedbashrc 就是要复制过来后给文件取的新名字。
在实际执行时,你还需要确保以下几点:
- 本地终端所在环境有执行 scp 命令的权限,一般在安装了 openssh-client 等相关软件包的系统中是可以正常执行的。
- 远程服务器开启了 ssh 服务并且允许 root 账号通过 ssh 登录(有些服务器出于安全考虑可能会限制 root 直接登录)。
- 你要知道 root 账号在远程服务器上的密码或者已经配置好了基于密钥的免密码登录方式,否则在执行命令时会提示你输入密码进行身份验证。
scp passwd -p ssh [email protected]
History
这个命令用于显示命令历史记录,即之前在当前终端会话中执行过的命令列表。
查看权限:ls -la /etc/passwd
-rw-r--r--:表示文件的权限。
- 第一个字符 -:表示这是一个普通文件(如果是目录则会显示为d)。
- 接下来的三个字符 rw-:表示文件拥有者(在这里是root)的权限,表示可读(r)和可写(w),但不可执行(-)。
- 再接下来的三个字符 r--:表示与文件拥有者同一组的用户的权限,只有读取权限。
- 最后三个字符 r--:表示其他用户的权限,也只有读取权限。
在Linux中几乎所有的资源都被抽象为文件,包括硬件设备、进程间通信、网络连接等。这样跟利于管理。
ls是列出目录内容的命令。
-l选项以长格式显示文件信息,包括文件的权限、所有者、所属组、文件大小、修改时间等。
-a:显示所有文件,包括隐藏文件(以.开头的文件)。
/etc/passwd:指向要查看的文件的路径。
更改文件所有者:sudo chown root file
- sudo:这用于以超级用户权限执行命令,这是将文件所有权更改为 所必需的。root
- chown:更改所有权的命令本身。
- root:文件的新所有者。这里表示将文件的所有者改为“root”用户
- filename:要更改其所有权的文件的名称。
重要说明:
- 您需要具有运行和更改文件所有权所需的权限。sudo
- 更改文件所有权时要小心,尤其是对于系统文件,因为它可能会影响系统功能。
这是失败的
修改文件权限:sudo chmod u=rwx,g+rw,o-r file
- u=rwx:将文件的所有者(user)权限设置为可读(r)、可写(w)和可执行(x)(rwx)。
- g+rw:将文件的所属组(group)权限添加可读和可写权限(rw),不改变原有的权限。
- o-r:将其他用户(other)从文件权限中去掉可读权限(-r)。
- file: 要修改的文件名称
因此,这个命令的整体效果是:
- 文件的所有者将拥有完全的读、写和执行权限。
- 文件的所属组将具有读和写权限,但没有执行权限(如果原来有执行权限不会受影响)。
- 其他用户将失去读权限,但如果原来他们有写或执行权限,那些不会受到影响
sudo chmod u+x,g+w,o-r file
- sudo:这代表 “superuser do”。它允许允许的用户以超级用户或其他用户身份执行命令,如安全策略所指定。通常,它会要求用户提供密码以授予提升的权限。
- chmod:此命令用于更改文件和目录的访问权限。
- u+x:这意味着“为文件的用户(所有者)添加执行权限”。表示拥有该文件的用户,并添加 execute () 权限。u+x
- g+w:这意味着“为拥有该文件的组添加写入权限”。这表示拥有该文件的组,并添加写入 () 权限。g+w
- o-r:这意味着“删除其他人的读取权限”。这表示不是用户或拥有该文件的组中的其他人,并删除 read () 权限。o-r
- file:这是您正在修改其权限的文件的名称。您将替换为目标文件的实际名称。file
- 向文件的用户(所有者)授予执行权限。
- 向拥有该文件的组授予写入权限。
- 删除所有其他读取权限。
sudo chmod 400 <file>这个命令的含义是将指定文件的权限更改为仅允许文件的拥有者读取,而不允许其他用户读取、写入或执行该文件。
- chmod:表示更改文件权限的命令。
- 400:这是一个八进制数,表示权限设置。其中:
- 第一位(4):表示文件拥有者的权限,这里的 4 代表只读权限(r--),即允许文件拥有者读取文件。
- 第二位(0):表示与文件拥有者同组的用户的权限,这里的 0 代表没有权限(---),即不允许同组用户读取、写入或执行该文件。
- 第三位(0):表示其他用户的权限,这里的 0 也代表没有权限(---),即不允许其他用户读取、写入或执行该文件。
注意事项
- 文件拥有者:只有文件的拥有者可以更改文件的权限,普通用户不能修改其他用户文件的权限。
- 安全性:将文件权限设置为 400 是一种保护敏感文件的方式,确保只有特定用户可以访问文件内容。
系统日志
ls -l /var/log
ls 命令用于列出目录内容
-l 选项表示以长格式显示文件信息,包括文件权限、所有者、所属组、大小、最后修改时间等。
当您执行 ls -l /var/log 命令时,会列出 /var/log 目录下的文件和子目录,并显示它们的详细信息,例如文件权限、所有者、所属组、大小、最后修改时间等。这样的输出可以帮助您了解目录中文件的具体情况。
认证信息日志
sudo tail -3 /var/log/auth.log
命令用于显示 /var/log/auth.log 文件的最后三行内容。sudo 用于以超级用户权限来执行命令
tail 用于显示文件末尾内容
-3 选项表示显示最后三行。
通过执行这个命令,您可以查看 /var/log/auth.log 文件的最后三行日志,通常这些日志记录了系统授权认证相关的信息,比如用户登陆、权限变更等。
二进制日志
who /var/log/wtmp | tail -5
- who:此命令用于显示当前登录系统的用户。
- /var/log/wtmp:这是一个二进制文件,用于记录系统上的所有登录和注销活动。
- tail -5:此命令显示通过管道输入的任何数据的最后 5 行。
dmsg
是一个用于查看和控制内核环形缓冲区的命令。这个缓冲区存储了系统启动时内核生成的消息,包括硬件检测、设备初始化以及内核可能遇到的任何潜在问题的重要信息
。这些消息对于诊断内核或硬件问题非常有用。
dmesg 命令的基本用法是直接在终端中输入 dmesg,这将显示内核环形缓冲区中的所有消息。输出中的每一行代表来自内核的一条消息,并且它们按照记录的顺序显示。此外,dmesg 命令还支持多种参数和选项,例如:
- -c:在显示信息后,清除环形缓冲区中的内容。
- -s <缓冲区大小>:设置缓冲区的大小,默认为8196,等于ring buffer的大小。
- -n:设置记录信息的层级。
- -H:使用人类友好的时间戳。
- -T:显示标准日期和时间。
- -L:强制彩色输出。
- --follow:监视实时日志
- 。
dmesg 命令在所有主流的Linux发行版中都是可用的,包括但不限于Debian。Ubuntu、Alpine、Arch Linux、Kali Linux、RedHat/CentOS、Fedora和Raspbian。由于 dmesg 是内核的一部分,所以它在所有使用Linux内核的系统上都应该可用。
systemd
是 Linux 系统中的一个系统和服务管理器,它在 2011 年首次被引入,旨在替代传统的 init 系统。systemd 提供了一种统一的方式来管理系统进程和服务,包括启动、停止、重启、维护以及监控服务状态等。
以下是 systemd 的一些主要特点:
并行启动:systemd 支持并行启动服务,这可以加快系统的启动速度。
依赖管理:systemd 能够处理服务之间的依赖关系,确保服务按照正确的顺序启动和关闭。
日志管理:systemd 集成了日志管理功能,可以通过 journalctl 命令来查看和管理日志。
socket 和 D-Bus 激活:systemd 支持基于 socket 和 D-Bus 的服务激活,这意味着服务可以在需要时动态启动,而不是在系统启动时就启动所有服务。
易用的配置文件:systemd 使用易于理解和配置的 .service 文件来定义服务。透明性和可调试性:systemd 提供了丰富的工具和命令,如 systemctl 和 journalctl,使得系统和服务的管理和调试变得更加透明和容易。
系统状态管理:systemd 管理着系统的运行级别(runlevels),并能够控制系统的启动、重启和关闭。
时间同步:systemd 还负责网络时间同步,通过 systemd-timesyncd 服务。
容器支持:systemd 提供了对容器技术的支持,如 Docker 和 LXC。
systemd 的主要命令包括:
- systemctl:用于控制 systemd 系统和服务管理器,例如启动、停止、重启服务,查看服务状态等。
- journalctl:用于查看和管理系统日志。
- systemd-analyze:用于分析系统启动时间,找出启动过程中的瓶颈。
- loginctl:用于管理用户会话。
openssl
是一个开源的软件库,它包含了一个通用的加密库(OpenSSL Library),以及一个命令行工具(OpenSSL program),用于使用这个库实现各种加密操作。OpenSSL 支持多种加密算法,包括但不限于:
- SSL/TLS 协议:用于实现安全的网络通信,包括网站加密(HTTPS)。
- 密码算法:包括对称加密算法(如 AES、DES、Blowfish 等)和非对称加密算法(如 RSA、DSA、ECC 等)。
- 哈希算法:如 SHA-1、SHA-2、MD5 等,用于生成数据的摘要。
- 随机数生成器:用于生成加密操作所需的随机数。
OpenSSL 的命令行工具提供了许多实用的功能,包括:
- 证书管理:生成密钥、证书签名请求(CSR)、自签名证书、CA 证书等。
- 加密和解密:对文件和数据进行加密和解密。
- 哈希计算:计算文件或数据的哈希值。
- 密码算法测试:测试不同的密码算法。
- SSL/TLS 测试:测试 SSL/TLS 连接和配置。
openssl passwd -1 123
openssl passwd 命令是 OpenSSL 提供的一个用于生成密码哈希的工具。这个命令可以生成一个加密的密码哈希,通常用于验证用户的密码。
-1 选项指定使用 MD5 算法来生成哈希。
openssl passwd -5 123
openssl passwd -5 命令用于生成使用 SHA-256 算法的密码哈希,其中 -5 选项指定使用 SHA-256 算法。这个命令是 OpenSSL 提供的,用于生成一个加密的密码哈希,通常用于验证用户的密码。
文件管理
创建两个空文件
touch new file
删除文件
rm new file
新建目录
mkdir newdir
删除新目录
rmdir newdir
重命名文件
mv file.txt new.txt
移动文件
mv newfile newdir2
拷贝文件
cp file.txt newwdir.txt
软连接
ln -s file.txt newwdir.txt
硬连接
ln ~/offsec123.txt hardlink.txt
搜索文件
- Which
which 是一个常用的命令行工具,用于在系统的环境变量 PATH 指定的目录中查找可执行文件的路径。当你想要知道某个命令的可执行文件位于何处时,which 命令就非常有用。
用法:which 命令名
这个命令会返回指定命令的完整路径。如果该命令不在 PATH 环境变量中,或者没有找到对应的可执行文件,which 命令将不会返回任何输出。
- -p:指定路径,which 将只在该路径中搜索可执行文件,而不是在 PATH 环境变量中。
- -a:显示所有匹配的文件,而不仅仅是第一个找到的。
echo $PATH
在 Linux 中,$PATH 是一个环境变量,它包含了一系列目录路径,这些路径告诉系统在执行命令时从哪些目录中查找可执行程序。当你在命令行中输入一个命令时,系统会依次在这些指定的目录中搜索对应的可执行文件。
基本概念
- 路径:多个用冒号 (:) 分隔的目录。例如:
bash复制代码
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- 如何查看 $PATH: 在终端中运行以下命令,可以查看当前设置的 $PATH:
bash复制代码
echo $PATH
如何工作
当你输入一个命令,比如 ls 或 python,系统将按以下步骤工作:
- 查看 $PATH 环境变量中的每个目录。
- 从左到右依次检查这些目录,寻找与输入的命令匹配的可执行文件。
- 如果找到,执行该文件;如果没有找到,则返回 command not found 错误。
修改 $PATH
如果你想要将新目录添加到 $PATH 中,可以使用以下命令:
bash复制代码
export PATH=$PATH:/新目录路径
例如,如果你要添加 /opt/bin 到 $PATH,可以这样做:
bash复制代码
export PATH=$PATH:/opt/bin
要永久修改 $PATH,可以将上述 export 命令添加到你的 shell 配置文件(如 .bashrc、.bash_profile 或 .profile)中。
locate (local.db)
sudo updatedb
,用于更新 locate 命令所使用的数据库。这个数据库包含了系统中所有文件的路径信息,使得 locate 命令能够快速地搜索文件。
功能
- 更新数据库:updatedb 命令会扫描整个文件系统(或者指定的部分),并更新 locate 数据库,以便 locate 命令能够找到最新的文件和目录。
- 提高搜索效率:定期运行 updatedb 可以确保 locate 命令的搜索结果包含最新的文件变动,提高搜索效率。
基本用法
bash
sudo updatedb
这个命令会更新整个文件系统的数据库。
选项
- -U 目录:只更新指定目录下的数据库。
- -D:不更新数据库,只打印出将要执行的命令。
- -n:不使用数据库,只扫描文件系统。
- -v:显示详细的扫描信息。
- -o 文件:将更新的数据库写入指定的文件。
示例
- 更新特定目录(例如 /home/user/documents)的数据库:
bash
sudo updatedb -U /home/user/documents
- 显示将要执行的命令而不实际更新数据库:
bash
sudo updatedb -D
- 扫描文件系统但不更新数据库:
bash
sudo updatedb -n
- 显示详细的扫描信息:
bash
sudo updatedb -v
- 将更新的数据库写入指定的文件:
bash
sudo updatedb -o /path/to/custom/locate.db
注意事项
- 权限要求:由于 updatedb 需要访问整个文件系统,通常需要 sudo 权限来运行。
- 耗时:在大型文件系统上,updatedb 可能会花费较长时间来完成数据库的更新。
- 定期更新:根据文件系统的变动频率,可能需要定期运行 updatedb 来保持数据库的更新。
find ~ -mtime 2 -ls | sort -k9 -k10 | more
- find ~ -mtime 2 -ls:
- find:查找命令。
- ~:代表当前用户的主目录。
- -mtime 2:查找在过去2天内修改过的文件。mtime 表示文件内容上次修改的时间。
- -ls:对匹配的文件执行 ls -l 命令,输出文件的详细信息。
- | sort -k9 -k10:
- |:管道符,将前一个命令的输出作为后一个命令的输入。
- sort:排序命令。
- -k9 -k10:指定排序的键值。这里 -k9 表示以第9个字段(通常是文件大小)为第一排序键,-k10 表示以第10个字段(通常是文件名)为第二排序键。注意,字段编号是从1开始的。
- | more:
- |:管道符。
- more:分页显示命令。如果输出超过一屏,它会一页一页地显示,允许用户逐页查看。
综上所述,整个命令的作用是:
- 在当前用户的主目录及其子目录中查找在过去2天内修改过的文件。
- 对这些文件执行 ls -l 命令,获取它们的详细信息。
- 按照文件大小和文件名对这些信息进行排序。
- 使用 more 命令分页显示排序后的结果。
这个命令可以帮助用户快速查看最近修改过的文件,并根据文件大小和名称进行排序,
find . -type f -iname ‘*.sh’ -mmin -30 -ls
- find:这是用来在文件系统中搜索文件的命令。
- .:指定搜索的起始目录,. 代表当前目录。
- -type f:指定只查找文件(不包括目录)。
- -iname '*.sh':查找文件名不区分大小写的匹配模式 *.sh 的文件。-iname 选项使得搜索对大小写不敏感。
- -mmin -30:查找在过去30分钟内修改过的文件。-mmin 选项后面跟的数字表示分钟数,-30 表示文件修改时间距离现在不超过30分钟。
- -ls:对匹配的文件执行 ls -l 命令,输出文件的详细信息,包括文件权限、链接数、所有者、组、大小、最后修改时间等。
综上所述,整个命令的作用是:
- 在当前目录及其子目录中查找所有在过去30分钟内修改过的、文件名不区分大小写匹配 *.sh(即Shell脚本文件)的文件。
- 对这些文件执行 ls -l 命令,获取它们的详细信息。
find . -name ‘*.svn’ -exec rm -rf {} \;
- find:这是用来在文件系统中搜索文件和目录的命令。
- .:指定搜索的起始目录,. 代表当前目录。
- -name '*.svn':查找文件名匹配模式 *.svn 的文件或目录。这里的 .svn 是 Subversion 版本控制系统用来存放版本控制信息的目录。
- -exec:对 find 命令找到的每个匹配项执行后面的命令。
- rm -rf:这是 remove 命令的缩写,用于删除文件和目录。-r 选项表示递归删除目录及其内容,-f 选项表示强制删除,不提示确认。
- {}:这是一个占位符,代表 find 命令找到的每个匹配项。
- \;:这是 -exec 选项的结束标志。在 -exec 命令的末尾使用 \; 来表示命令的结束。
综上所述,整个命令的作用是:
- 在当前目录及其子目录中查找所有名为 .svn 的目录。
- 对这些 .svn 目录执行 rm -rf 命令,递归地强制删除它们
它会删除所有 .svn 目录及其包含的所有文件,而且不会提示任何确认。
find / -user root -type f -perm -o=w -name '*.sh' 2>/dev/null
find:这是用来在文件系统中搜索文件和目录的命令。
/:指定搜索的起始目录,/ 代表根目录,意味着搜索将从整个文件系统开始。
-user root:查找所有者为root的文件。
-type f:指定只查找文件(不包括目录)。
-perm -o=w:查找文件权限中至少包含“其他用户可写”权限的文件。-perm -o=w 表示“其他用户(o)具有写(w)权限”。
-name '*.sh':查找文件名以 .sh 结尾的文件,即Shell脚本文件。
2>/dev/null:将标准错误(stderr)重定向到 /dev/null,这意味着任何错误信息都不会显示在终端上。
综上所述,整个命令的作用是:
在整个文件系统中查找所有者为root、具有其他用户写权限、文件名以 .sh 结尾的文件。
将错误信息重定向,不显示在终端上。
警告:这个命令可能会返回敏感的系统文件
用户账户数据库
/etc/passwd
文件内容
文件中的每行都包含了一个用户账户的信息,这些信息由冒号(:)分隔,通常包含以下字段:
用户名:账户的登录名。
密码:在早期的系统中,这里存储的是加密后的密码,但现在通常是x或*,表示密码被存储在/etc/shadow文件中。
用户ID(UID):用户的数字标识符。
组ID(GID):用户的主要组的数字标识符。
用户信息:用户的全名或描述。
主目录:用户的主目录路径。
登录Shell:用户登录后默认使用的Shell。
/etc/shadow
- 用户名:与 /etc/passwd 文件中的用户名相对应。
- 加密密码:用户的密码经过加密处理后的字符串,通常是使用 SHA-512 算法进行加密的。
- 最后一次修改时间:表示用户最后一次修改密码的时间,以从1970年1月1日开始的天数表示。
- 密码最小有效期:密码在多少天后才能被更改。
- 密码最大有效期:密码在多少天后必须被更改。
- 密码到期前的警告天数:在密码到期前的多少天开始警告用户。
- 密码过期后的宽限天数:密码过期后,用户还可以登录的天数。
- 账号失效日期:账号在多少天后失效,以从1970年1月1日开始的天数表示。如果此字段为空,则表示账号永不过期。
- 保留字段:未使用,通常为空
组账号
cat /etc/group
- 组名:组的名称。
- 加密的组密码:通常为空或包含一个x,表示组密码存储在 /etc/gshadow 文件中,或者没有设置组密码。
- 组ID(GID):组的唯一数字标识符。
- 组成员列表:属于该组的用户列表,用户之间用逗号分隔。
禁用账号
sudo passwd -l username
命令用于锁定指定用户的密码
- sudo:以超级用户(root)的权限执行后面的命令。由于修改用户密码通常需要较高的权限,所以这里使用 sudo。
- passwd:用于管理用户账户密码的命令。
- -l:这是 passwd 命令的一个选项,代表“lock”(锁定)。
- username:你想要锁定密码的用户的用户名。
执行效果
当你执行 sudo passwd -l username 命令后,系统会将指定用户的密码状态设置为锁定。这意味着即使用户知道正确的密码,也无法通过密码登录系统。这个状态可以通过查看 /etc/shadow 文件来确认,其中用户的密码字段会显示为两个感叹号 ! 或者一个感叹号 ! 加上一些字符,具体显示取决于系统配置。
chage -E 1990-01-01 kali
命令用于设置用户账户的过期日期。在这个命令中,-E 选项用于指定账户的过期日期,格式为 YYYY-MM-DD。这里的 1990-01-01 表示将 kali 用户的账户设置为在1990年1月1日过期。一旦账户过期,该用户将无法登录系统。
具体来说,chage 命令用于更改与用户账户相关的密码过期信息。通过指定 -E 选项后跟一个日期,你可以设置账户的过期日期。这个日期之后,账户将被系统视为无效,用户将无法使用该账户登录系统。
passwd -S username
命令用于显示指定用户账户的密码状态信息。这个命令会输出用户的密码状态,包括密码是否已设置、密码的最后修改时间、密码到期时间等。
输出的信息通常包括以下几个部分:
- PS:表示密码已设置。
- NP:表示密码未设置。
- LK:表示账户被锁定。
- EXP:表示账户已过期。
- P:表示密码到期前的警告天数。
- W:表示密码过期后的宽限天数。
- S:表示账户失效日期。
- D:表示账户密码被禁用。
存储管理
内存使用量
free -m
命令详解
- free:这是命令的名称,用于显示内存状态。
- -m:这个选项告诉 free 命令以兆字节(MB)为单位显示内存使用情况。
输出内容
执行 free -m 命令后,你会得到类似于以下的输出:
total used free shared buff/cache available
Mem: 3217 1256 56 199 1905 1148
Swap: 999 68 931
这里的各个列表示:
- total:系统总内存量。
- used:已被使用的内存量。
- free:当前未使用的内存量。
- shared:多个进程共享的内存量。
- buff/cache:被系统用作缓冲和缓存的内存量。这部分内存可以被快速回收用于其他用途。
- available:估计的可用内存量,考虑到缓存和缓冲区可以被回收。
- Swap:总交换空间、已使用交换空间和空闲交换空间。
注意事项
- 缓冲和缓存:buff/cache 部分的内存虽然被标记为已使用,但实际上是可以被系统随时回收的,以供其他进程使用。
- 可用内存:available 列提供了一个更准确的可用内存估计,因为它考虑了缓冲和缓存可以被回收的事实。
磁盘使用量
df -hT
df 是一个用于显示文件系统的磁盘空间使用情况的命令。-h 和 -T 是 df 命令的两个选项:
- -h 或 --human-readable:以易读的格式显示大小(例如 KB、MB、GB),而不是以字节为单位。
- -T 或 --print-type:显示文件系统的类型。
所以,df -hT 这个命令会显示文件系统的磁盘使用情况,包括文件系统的类型,并且以易读的格式显示大小。这是一个查看磁盘空间和文件系统类型的有用命令。
你可以在终端中输入 df -hT 来执行这个命令。输出结果将类似于:
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 190G 18G 172G 10% /
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/sdb1 ext4 931G 85G 846G 10% /data
在这个例子中,你可以看到每个文件系统的类型(例如 ext4),大小(Size),已用空间(Used),可用空间(Avail),使用百分比(Use%),以及它们被挂载的位置(Mounted on)。
复制再试一次分享
文件或目录大小
sudo du ./* -hsc
- 查-h 或 --human-readable:以易读的格式显示磁盘使用情况(例如 KB、MB、GB)。
- -s 或 --summarize:显示每个参数的总计大小,而不是每个子目录的大小。
命令 sudo du ./* -hsc 的意图是检查当前目录下所有文件和子目录的磁盘使用情况,并以易读的格式(如KB、MB、GB)显示。这个命令包含以下参数:
- sudo:以超级用户权限运行命令。
- du:磁盘使用情况(Disk Usage)的命令。
- ./*:表示当前目录下的所有文件和目录。
- -c 或 --total:在最后显示所有参数的总计大小。
看硬盘分区
sudo fdisk -l
fdisk 是一个在 Linux 系统中用于管理磁盘分区的工具。命令 sudo fdisk -l 用于列出系统中所有可用的磁盘和分区的列表。这里的 -l(小写的 L)选项告诉 fdisk 列出所有磁盘的信息,而不是进入交互式分区编辑模式。
当你在终端中运行 sudo fdisk -l 时,你需要具有相应的权限,因此使用了 sudo 来获取超级用户权限。这个命令会显示所有磁盘的分区表,包括磁盘的名称、大小、分区类型、分区大小等信息。
输出结果将类似于:
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 976773119 488386560 83 Linux
/dev/sda2 976773120 976773631 488386 82 Linux swap / Solaris
在这个例子中,/dev/sda 是一个磁盘设备,有两个分区:/dev/sda1 和 /dev/sda2。/dev/sda1 是一个 Linux 分区,而 /dev/sda2 是一个 Linux swap 分区。
挂载分区
sudo mount /dev/sdb1/mnt/usb
命令 sudo mount /dev/sdb1 /mnt/usb 用于将 /dev/sdb1 分区挂载到 /mnt/usb 目录。这里是命令的详细解释:
- sudo:以超级用户权限执行命令,因为挂载文件系统通常需要管理员权限。
- mount:挂载命令。
- /dev/sdb1:要挂载的设备或分区。在这个例子中,sdb1 是第二个SCSI硬盘的第一个分区。
- /mnt/usb:挂载点,即文件系统中的一个目录,用于访问挂载的设备或分区的内容。
然而,你的命令中有一个斜杠 / 错误地放在了 /dev/sdb1 和 /mnt/usb 之间。正确的命令应该是:
bash
sudo mount /dev/sdb1 /mnt/usb
在执行这个命令之前,请确保:
- /dev/sdb1 确实存在,并且是一个有效的分区。
- /mnt/usb 目录已经存在。如果不存在,你需要先创建它,可以使用 sudo mkdir -p /mnt/usb 命令。
基本网络工具
Ifconfig
用于配置和显示系统网络接口的信息。这个工具可以帮助用户查看和修改网络接口的配置,包括 IP 地址、子网掩码、广播地址等。
以下是一些基本的 ifconfig 命令用法:
- 查看所有网络接口的状态:
bash
ifconfig
- 查看特定网络接口的状态:
bash
ifconfig eth0
这里 eth0 是一个示例接口名称,你应该替换为你的实际接口名称。
- 启用一个禁用的网络接口:
bash
ifconfig eth0 up
- 禁用一个已启用的网络接口:
bash
ifconfig eth0 down
- 为网络接口分配一个 IP 地址:
bash
ifconfig eth0 192.168.1.100 netmask 255.255.255.0
这里 192.168.1.100 是分配给 eth0 接口的 IP 地址,255.255.255.0 是子网掩码。
- 添加或删除 ARP 表中的条目:
bash
ifconfig eth0 arp 192.168.1.100 hw ether 00:11:22:33:44:55
这将添加一个 ARP 表条目,将 IP 地址 192.168.1.100 映射到 MAC 地址 00:11:22:33:44:55。
Ip addr
- 显示所有网络接口的 IP 地址:
bash
ip addr
或者
bash
ip addr show
- 显示特定网络接口的 IP 地址:
bash
ip addr show eth0
这里 eth0 是一个示例接口名称,你应该替换为你的实际接口名称。
- 添加一个新的 IP 地址到网络接口:
bash
sudo ip addr add 192.168.1.100/24 dev eth0
这里 192.168.1.100/24 是要添加的 IP 地址和子网掩码,dev eth0 指定了要修改的网络接口。
- 删除一个 IP 地址从网络接口:
bash
sudo ip addr del 192.168.1.100/24 dev eth0
- 显示所有网络接口的详细信息:
bash
ip -d link show
这里 -d 选项表示显示详细信息。
- 显示路由表:
bash
ip route show
- 显示网络邻居(ARP 表):
bash
ip -s -s neigh show
这里 -s 选项表示显示更详细的统计信息。
sudo ifdown eth0
ifdown 命令用于关闭指定的网络接口。当你执行 sudo ifdown eth0 命令时,你正在请求系统关闭名为 eth0 的网络接口。
这里是命令的详细解释:
- sudo:以超级用户权限执行命令,因为关闭网络接口通常需要管理员权限。
- ifdown:用于关闭网络接口的命令。
- eth0:指定要关闭的网络接口名称。
请注意,eth0 是一个常见的命名约定,用于表示第一个以太网接口。在现代 Linux 系统中,网络接口可能有不同的命名,例如 enp0s3、eno1 或 ens33 等,这取决于系统和硬件配置。你可以使用 ip link 或 ifconfig 命令来查看所有可用的网络接口及其当前状态。
在执行 ifdown 命令之前,请确保:
- 你确实想要关闭该网络接口,因为这可能会导致网络连接中断。
- 你有足够的权限执行该命令,通常需要超级用户权限。
- 你已经保存了所有重要数据,以防关闭网络接口导致数据丢失。
如果你不确定网络接口的名称,可以先使用以下命令查看:
bash
ip link show
或者:
bash复制
ifconfig -a
这些命令将列出所有网络接口及其状态,帮助你确定正确的接口名称。如果你正在使用的是较新的 Linux 发行版,建议使用 ip 命令套件中的 ip link set dev eth0 down 命令来关闭网络接口,因为 ifdown 命令可能不再被默认包含。
复制再试一次分享
sudo ifup eth0
ifup 命令用于启用(激活)指定的网络接口。当你执行 sudo ifup eth0 命令时,你正在请求系统启用名为 eth0 的网络接口。
这里是命令的详细解释:
- sudo:以超级用户权限执行命令,因为启用网络接口通常需要管理员权限。
- ifup:用于启用网络接口的命令。
- eth0:指定要启用的网络接口名称。
在使用 ifup 命令之前,请确保:
- 你确实想要启用该网络接口。
- 你有足够的权限执行该命令,通常需要超级用户权限。
- 网络接口配置正确,例如,如果接口配置为通过 DHCP 获取 IP 地址,确保 DHCP 客户端配置正确,并且服务器可用。
网络配置
/etc/network/interfaces
这个文件定义了系统的网络设备如何配置,包括 IP 地址、子网掩码、网关、DNS 服务器等信息。通过编辑这个文件,你可以手动设置静态 IP 地址或者配置设备以从 DHCP 服务器动态获取这些信息。
以下是 /etc/network/interfaces 文件的一些基本组成部分:
- lo(本地回环接口):
bash
auto lo
iface lo inet loopback
这表示自动启动本地回环接口,并将其配置为使用回环地址(127.0.0.1)。
- 以太网接口(例如 eth0):
bash
auto eth0
iface eth0 inet dhcp
这表示自动启动 eth0 接口,并配置它从 DHCP 服务器动态获取 IP 地址。
- 静态 IP 配置:
bash
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
这表示自动启动 eth0 接口,并为其分配一个静态 IP 地址 192.168.1.100,子网掩码 255.255.255.0,网关 192.168.1.1,以及 DNS 服务器 8.8.8.8 和 8.8.4.4。
- 无线接口:
bash
auto wlan0
iface wlan0 inet dhcp
wpa-ssid YOUR_SSID
wpa-psk YOUR_PASSWORD
这表示自动启动无线接口 wlan0,并使用 WPA/WPA2 密码连接到指定的无线网络。
编辑 /etc/network/interfaces 文件时,你应该使用超级用户权限,因为该文件通常受到保护。你可以使用 sudo 命令和文本编辑器(如 nano 或 vim)来编辑它:
bash
sudo nano /etc/network/interfaces
或者:
bash
sudo vim /etc/network/interfaces
编辑完成后,保存文件并退出编辑器。然后,你可以使用以下命令重新加载网络配置:
bash
sudo systemctl restart networking
或者,对于较旧的系统,可能需要使用:
bash复制
sudo /etc/init.d/networking restart
Networkmanager
是 Linux 系统中一个用于管理和监控网络设置的守护进程,它由 Red Hat 在 2004 年启动的项目,旨在简化 Linux 用户的现代网络需求处理,特别是无线网络的配置和管理。NetworkManager 服务的核心是一个运行于超级用户权限下的守护进程,负责实际的网络连接管理、状态报告和网络变化的监控。它能够自动发现网络接口卡并配置 IP 地址,管理网络服务和网络连接。
NetworkManager 提供了客户端程序,允许用户管理网络连接,包括命令行工具 nmcli 和图形界面工具。nmcli 是 NetworkManager 的命令行界面工具,提供了丰富的命令和选项,可以用于查看网络连接状态、配置和管理网络连接、设置 IP 地址、DNS 等。
NetworkManager 的网络配置文件通常位于 /etc/NetworkManager/ 目录下,具体的连接配置保存在 /etc/NetworkManager/system-connections/ 目录下,以 .nmconnection 文件的形式存在。
管理 NetworkManager 服务的一些常用命令包括:
- 查看 NetworkManager 状态:
bash
systemctl status NetworkManager
在 Debian 10 中,等效命令为:
bash
systemctl status network-manager
这将显示 NetworkManager 服务的状态。
- 使用 nmcli 命令: nmcli 命令可以用于查看和管理 NetworkManager 控制的网络。例如,查看网络状态:
bash
nmcli general status
管理主机名:
bash
nmcli general hostname
显示当前用户对网络管理器的操作权限:
bash
nmcli general permissions
获取和更改网络管理器日志记录级别和域:
bash
nmcli general logging
管理网络连接,例如启用或禁用网络:
bash
nmcli networking {on|off|connectivity}
这些命令提供了对 NetworkManager 的广泛控制。
- 重启 NetworkManager 服务: 如果需要重启 NetworkManager 服务,可以使用以下命令:
bash
systemctl restart NetworkManager
或者在某些系统中:
bash
systemctl restart network-manager
这将重启 NetworkManager 服务,应用任何更改的配置。
NetworkManager 提供了一个灵活且强大的网络管理框架,适用于需要动态网络配置的环境。
网络连接
netstat -natup
,用于显示网络连接、路由表、接口统计等网络相关信息。netstat -natup 命令是一个常用的组合,用于显示网络连接信息,包括 TCP 和 UDP 的端口及其状态。
以下是 netstat -natup 命令中各个选项的含义:
- -n 或 --numeric:显示数字形式的地址和端口号,不进行域名解析。
- -a 或 --all:显示所有连接和监听端口。
- -t 或 --tcp:仅显示 TCP 连接。
- -u 或 --udp:仅显示 UDP 连接。
- -p 或 --programs:显示哪个进程正在使用每个套接字。
因此,netstat -natup 命令将显示所有 TCP 和 UDP 端口的使用情况,包括每个端口的程序名称和进程 ID。这对于诊断网络问题和监控网络活动非常有用。
在现代 Linux 系统中,netstat 命令可能不预装,因为它属于 net-tools 包,而许多现代发行版已经转向使用更现代的 iproute2 工具集,特别是 ss 和 ifconfig 命令的替代品 ip。如果你的系统没有 netstat,你可以尝试使用 ss 命令来获取类似的信息:
bash
ss -natup
ss 命令是 socket statistics 的缩写,它是 iproute2 包的一部分,提供了与 netstat 类似的功能,但使用起来更高效、更现代。ss -natup 将显示所有 TCP 和 UDP 端口的使用情况,包括进程名称和进程 ID。
复制再试一次分享
ss -natup
是一个用于显示套接字统计信息的工具,它是 iproute2 包的一部分,在现代 Linux 系统中通常用来替代 netstat。ss -natup 命令用于显示 TCP 和 UDP 端口的使用情况,包括进程信息。下面是各个选项的含义:
- -n 或 --numeric:不解析服务名称,只显示数字。
- -a 或 --all:显示所有套接字(监听的、已连接的、已连接的、定时等待的等)。
- -t 或 --tcp:仅显示 TCP 套接字信息。
- -u 或 --udp:仅显示 UDP 套接字信息。
- -p 或 --processes:显示使用套接字的进程信息。
因此,ss -natup 命令将列出所有 TCP 和 UDP 端口,包括它们的状态、进程 ID 和进程名称。
这里是一个示例输出:
plaintext
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *:123 *:*
udp UNCONN 0 0 *:5353 *:*
tcp LISTEN 0 128 *:22 *:*
tcp LISTEN 0 128 127.0.0.1:631 *:*
tcp ESTAB 0 0 192.168.1.100:22 192.168.1.101:49667
在这个输出中,你可以看到:
- udp 和 tcp 行分别显示了 UDP 和 TCP 端口的使用情况。
- UNCONN 和 LISTEN 分别表示未连接和监听状态。
- Recv-Q 和 Send-Q 列显示接收和发送队列的长度。
- Local Address:Port 和 Peer Address:Port 分别显示本地和远程的地址和端口。
二层地址
arp -en
arp -en 命令用于显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表。在 Linux 系统中,arp 命令的 -e 选项用于显示 ARP 表,而 -n 选项用于以数字形式显示地址,不进行域名解析。因此,arp -en 命令会以数字形式显示 ARP 表,不将 IP 地址解析为主机名。
这个命令的输出通常会包括以下信息:
- IP 地址(以数字形式显示)
- 物理地址(MAC 地址)
- 接口(网络接口卡)
例如,输出可能如下所示:
plaintext
Address HWtype HWaddress Flags Mask Iface
192.168.1.1 ether 00:11:22:33:44:55 C eth0
192.168.1.2 ether 66:77:88:99:00:11 C eth0
在这个例子中,192.168.1.1 和 192.168.1.2 是两个 IP 地址,它们的物理地址(MAC 地址)分别是 00:11:22:33:44:55 和 66:77:88:99:00:11,并且它们都与 eth0 网络接口相关联。HWtype 表示硬件类型,HWaddress 表示硬件地址(即 MAC 地址),Flags 表示条目的状态,Mask 和 Iface 分别表示子网掩码和接口名称。
复制再试一次分享
路由信息
route
- 命令用于显示和修改系统的路由表。路由表包含了决定数据包如何通过网络发送的信息。显示路由表:
bash
route -n
使用 -n 选项可以避免域名解析,直接显示数字形式的 IP 地址。
- 添加路由:
bash
route add default gw <gateway-ip> dev <interface>
这将添加一个默认网关,使得所有非本地网络的数据包都通过指定的网关发送。<gateway-ip> 是网关的 IP 地址,<interface> 是网络接口的名称。
- 删除路由:
bash
route del -net <network-ip> netmask <netmask> gw <gateway-ip>
这将删除到特定网络的路由。<network-ip> 是目标网络的 IP 地址,<netmask> 是子网掩码,<gateway-ip> 是网关的 IP 地址。
- 添加特定网络的路由:
bash
route add -net <network-ip> netmask <netmask> gw <gateway-ip>
这将添加到特定网络的路由。
- 添加特定主机的路由:
bash
route add -host <host-ip> gw <gateway-ip>
这将添加到特定主机的路由。
请注意,使用 route 命令可能需要超级用户权限,因此你可能需要在命令前加上 sudo。
在现代 Linux 系统中,建议使用 ip route 命令来代替 route 命令,因为 ip 命令提供了更一致和强大的接口。以下是使用 ip 命令的一些等效用法:
- 显示路由表:
bash
ip route show
或者
bash
ip r
- 添加默认路由:
bash
ip route add default via <gateway-ip> dev <interface>
- 添加特定网络的路由:
bash
ip route add <network-ip>/24 via <gateway-ip> dev <interface>
- 删除路由:
bash复制
ip route del <network-ip>/24
iproute
是一个集成的网络配置工具,提供了 ip 命令,用于显示和操作路由、网络设备、接口等网络相关的设置。iproute 并不是一个单独的命令,而是 ip 命令的一个别名,通常用于引用 ip 命令的路由功能。
ip 命令是一个多功能的工具,它包括了以下几个主要的子命令:
- ip link:用于查看和操作网络设备(接口)的状态,比如启用或禁用接口。
- ip addr:用于显示和修改网络接口的 IP 地址。
- ip route:用于显示和修改路由表。
- ip rule:用于管理路由规则。
- ip neigh:用于显示和修改 ARP 表项(邻居解析)。
- ip tunnel:用于配置和显示 IP 隧道。
- ip maddr:用于管理多播地址。
- ip monitor:用于实时监控网络事件。
sudo ip route add 10.13.37.0/24 dev eth1
- sudo:以超级用户权限执行命令,因为修改路由表通常需要管理员权限。
- ip:这是 iproute2 包中的命令,用于操作网络设置。
- route add:添加一条新的路由规则。
- 10.13.37.0/24:指定要路由的目标网络。这里 10.13.37.0 是网络的起始地址,/24 表示子网掩码(255.255.255.0),意味着这个网络包含了 10.13.37.1 到 10.13.37.254 的 IP 地址。
- dev eth1:指定通过哪个网络设备(接口)发送到目标网络的数据包。这里 eth1 是网络接口的名称。
执行这条命令后,所有发送到 10.13.37.0/24 网络的数据包都将通过 eth1 接口发送。
traceroute dffensive-secur ity.com
要使用 traceroute 命令来追踪到 dffensive-security.com 的路由路径,你可以在终端中输入以下命令:
bash
traceroute dffensive-security.com
这个命令会显示数据包从你的计算机到 dffensive-security.com 所经过的每个路由器的路径。每个跃点(hop)的后面通常会显示该跃点的 IP 地址以及到达该跃点的时间延迟。这个工具对于诊断网络问题非常有用,比如确定数据包在网络中的哪个部分出现了延迟或丢失。
ssh服务
启动服务
sudo systemctl start ssh
- sudo:以超级用户权限执行命令,因为启动或停止服务通常需要管理员权限。
- systemctl:是 systemd 系统和服务管理器的命令行工具,用于控制 systemd 系统和服务管理器。
- start:是 systemctl 的一个参数,用于激活(启动)指定的服务。
- ssh:指定要启动的服务名称,这里是 SSH 服务。
执行这个命令后,SSH 服务会被启动,允许远程用户通过 SSH 协议安全地连接到你的系统进行管理和操作。
如果你想要检查 SSH 服务的状态,可以使用以下命令:
bash
sudo systemctl status ssh
这将显示 SSH 服务的当前状态,包括它是否正在运行、是否已启动、是否启用了自启动等信息。
如果你想要 SSH 服务在系统启动时自动启动,可以使用以下命令来启用它:
bash
sudo systemctl enable ssh
相反,如果你想要禁用 SSH 服务的自启动,可以使用以下命令:
bash
sudo systemctl disable ssh
请注意,如果你的系统中没有安装 SSH 服务,你可能需要先安装它。在大多数 Linux 发行版中,可以使用包管理器来安装 SSH 服务,例如在基于 Debian 的系统(如 Ubuntu)中,可以使用以下命令安装:
bash
sudo apt-get update
sudo apt-get install openssh-server
在基于 Red Hat 的系统(如 CentOS)中,可以使用以下命令安装:
bash
sudo yum install openssh-server
或者在新版本的 Red Hat 系统(如 Fedora)中使用 dnf:
bash复制
sudo dnf install openssh-server
ssh root@localhost
- ssh:是 Secure Shell 的缩写,一个用于在网络上加密方式远程登录和管理服务器的协议。
- root:是你要连接的远程主机上的用户名,在这种情况下是 root 用户。
- localhost:指定了你要连接的主机地址,localhost 指的是本机,即你当前工作的计算机。
执行这个命令时,系统会尝试使用你的本地 root 用户的私钥去认证远程主机上的 root 用户账户。如果 SSH 服务在本地主机上运行,并且你的用户具有 root 权限,这个命令将允许你通过 SSH 连接到本地系统。
请注意以下几点:
- 安全性:使用 root 用户进行 SSH 连接通常被认为是不安全的,因为 root 用户拥有完全的系统权限,如果连接过程中出现问题,可能会对系统安全造成风险。建议使用普通用户账户进行 SSH 连接,并在需要时使用 sudo 命令获取必要的权限。
- SSH 服务:在执行 ssh root@localhost 命令之前,确保 SSH 服务已经在本地主机上启动。你可以使用 sudo systemctl status ssh 命令检查 SSH 服务的状态,或者使用 sudo systemctl start ssh 命令启动它。
- 密钥认证:如果你的 SSH 客户端和服务器之间设置了密钥认证,你可能需要确保你的客户端有正确的私钥,并且服务器上的 ~/.ssh/authorized_keys 文件包含了对应的公钥。
- 防火墙和 SELinux:确保本地防火墙和 SELinux(如果启用)允许 SSH 连接。
- localhost 解析:在某些配置中,localhost 可能解析为 IPv6 地址,如果你的 SSH 服务没有配置为监听 IPv6,你可能需要使用 127.0.0.1 代替 localhost。
配置文件
/etc/ssh/sshd_config
是 SSH 守护进程(sshd)的主配置文件,它控制着 SSH 服务器的行为和设置。这个文件通常位于 /etc/ssh/ 目录下,并且在 SSH 服务启动时被读取。
以下是一些常见的配置选项和它们的说明:
- PermitRootLogin:控制是否允许 root 用户通过 SSH 登录。可能的值有 yes、no、without-password(不允许密码登录,但允许密钥登录)和 prohibit-password(允许登录,但禁止密码认证)。
- PubkeyAuthentication:是否允许公钥认证。通常设置为 yes 来启用。
- PasswordAuthentication:是否允许密码认证。通常设置为 yes 来启用,但也可以选择 no 来强制使用密钥认证。
- ChallengeResponseAuthentication:是否启用挑战响应认证,如一次性密码(OTP)。
- UsePAM:是否使用 PAM(可插拔认证模块)进行认证。
- X11Forwarding:是否允许 X11 转发,通常设置为 yes 来启用。
- AllowTcpForwarding:是否允许远程 TCP 端口转发。
- Port:SSH 服务监听的端口,默认是 22。
- AddressFamily:指定 sshd 应该使用哪种地址族,可以是 inet(IPv4)、inet6(IPv6)或 any。
- ListenAddress:指定 sshd 应该监听的网络接口的 IP 地址。
- HostKey:指定私钥文件的位置,用于服务器身份验证。
- LogLevel:设置日志记录级别,如 DEBUG、INFO、WARNING、ERROR、CRIT、QUIET。
- AuthorizedKeysFile:指定存放公钥的文件路径。
- ClientAliveInterval 和 ClientAliveCountMax:设置 SSH 连接的保活参数。
编辑 sshd_config 文件时,你应该使用超级用户权限,因为该文件通常受到保护。你可以使用 sudo 命令和文本编辑器(如 nano 或 vim)来编辑它:
bash
sudo nano /etc/ssh/sshd_config
或者:
bash
sudo vim /etc/ssh/sshd_config
编辑完成后,保存文件并退出编辑器。然后,你需要重新加载 SSH 服务以应用更改:
bash
sudo systemctl reload sshd
或者在某些系统中:
bash复制
sudo /etc/init.d/sshd reload
客户端配置
hashknownHosts yes
在 SSH 配置中,HashKnownHosts 是一个指令,用于控制 SSH 客户端如何处理已知的主机密钥。当设置为 yes 时,SSH 客户端会将 ~/.ssh/known_hosts 文件中的主机公钥哈希化,而不是存储主机的确切名称。
这里是 HashKnownHosts 指令的一些详细说明:
- HashKnownHosts yes:启用哈希化已知主机的功能。SSH 客户端将使用哈希值而不是主机的域名或IP地址来匹配 known_hosts 文件中的条目。这样做的好处是可以提高安全性,因为即使有人能够访问你的 known_hosts 文件,他们也无法轻易地识别出哪个哈希对应哪个主机。
- HashKnownHosts no:禁用哈希化功能。SSH 客户端将直接使用主机的域名或IP地址来匹配 known_hosts 文件中的条目。
- HashKnownHosts ask 或 HashKnownHosts never:这些选项允许用户选择是否接受未哈希的主机密钥,或者完全忽略哈希化设置。
启用 HashKnownHosts yes 的配置示例如下:
bash
Host *
HashKnownHosts yes
这表示对于所有 SSH 连接,都将启用哈希化已知主机的功能。
请注意,HashKnownHosts 是 SSH 客户端的配置选项,通常位于用户主目录下的 ~/.ssh/config 文件中。如果你想要修改这个设置,你需要编辑这个文件。如果你没有这个文件,你可以创建一个:
bash
touch ~/.ssh/config
chmod 600 ~/.ssh/config
然后使用文本编辑器编辑它,例如使用 nano:
bash复制
nano ~/.ssh/config
添加上述配置后,保存并退出编辑器。这样,你的 SSH 客户端就会按照新的配置处理已知主机了。
复制再试一次分享
~/.ssh
是一个目录,位于用户的主目录下,用于存放 SSH 相关的文件。这个目录通常用于存储以下文件:
- known_hosts:
- 这个文件用于存储你曾经连接过的 SSH 服务器的公钥。SSH 客户端会使用这个文件来验证服务器的身份,防止中间人攻击。
- 当你第一次连接到一个新的 SSH 服务器时,SSH 客户端会询问你是否信任该服务器的公钥,并将公钥添加到 known_hosts 文件中。
- id_rsa 或 id_dsa:
- 这是你的私钥,用于 SSH 认证。通常与同名的公钥文件配对使用。
- 私钥应该保持私密,只有你自己和需要授权访问的服务器应该知道这个文件的内容。
- id_rsa.pub 或 id_dsa.pub:
- 这是你的公钥,可以安全地分享给任何人或服务器。
- 公钥用于在 SSH 连接时验证你的身份。
- config:
- 这是一个可选的配置文件,用于自定义 SSH 客户端的行为。
- 你可以在 config 文件中设置特定的主机别名、指定密钥文件、设置端口转发、配置用户认证等。
- ssh_known_hosts:
- 这是一个旧的文件名,用于存储已知的主机公钥。在较新的 SSH 版本中,这个功能已经被 known_hosts 文件取代。
远程控制
scp [email protected]:/home/kali/ .bashrc Copisdbashrc
- 源路径:[email protected]:/home/kali/.bashrc 表示从远程主机 1.1.1.1 上的 root 用户的 /home/kali/.bashrc 文件复制。
- 目标路径:Copisdbashrc 看起来像是一个拼写错误。如果你的意图是将文件复制到当前目录并命名为 Copisdbashrc,那么这个部分是正确的。如果你想要复制到特定的目录或者使用不同的文件名,你需要指定完整的路径。
scp passwd -p kali ssh [email protected]
scp [OPTION] [user@]SRC_HOST:]file1 [user@]DEST_HOST:]file2
- [user@]SRC_HOST:]file1:指定源文件的位置。如果文件在本地,可以省略 user@SRC_HOST: 部分。
- [user@]DEST_HOST:]file2:指定目标位置,包括远程主机的用户名和主机地址。
纠正你的命令
- 源文件:passwd 应该是本地文件,所以不需要 kali 用户名。
- 目标主机:IP 地址 127.0.0.1 有一个小错误,应该是 127.0.0.1(一个数字 1,不是字母 l)。
- 目标路径:你需要指定目标文件的完整路径,包括文件名。
远程拷贝
scp [email protected]:/home/kali/.bashrc./Copiedbashrc
- scp:是安全复制命令,用于在本地与远程主机之间复制文件。
- [email protected]:指定远程主机的登录账号(这里是 root)和 IP 地址(1.1.1.1)。
- :/home/kali/.bashrc:这是远程主机上要复制的文件路径。
- ./Copiedbashrc:./ 表示本地当前目录,Copiedbashrc 就是要复制过来后给文件取的新名字。
在实际执行时,你还需要确保以下几点:
- 本地终端所在环境有执行 scp 命令的权限,一般在安装了 openssh-client 等相关软件包的系统中是可以正常执行的。
- 远程服务器开启了 ssh 服务并且允许 root 账号通过 ssh 登录(有些服务器出于安全考虑可能会限制 root 直接登录)。
- 你要知道 root 账号在远程服务器上的密码或者已经配置好了基于密钥的免密码登录方式,否则在执行命令时会提示你输入密码进行身份验证。
scp passwd -p ssh [email protected]
History
这个命令用于显示命令历史记录,即之前在当前终端会话中执行过的命令列表。