🛠️Linux基础快速入门
Last updated
Last updated
这一章节是快速了解Linux知识,并不会从零基础讲起,如果你没有任何Linux基础,希望你通过一些书籍快速掌握基本操作再来阅读此书。
在后续章节中很多内容都需要掌握Linux一些进阶技巧,反弹Shell、echo命令、特殊权限等在容器逃逸、K8s中会经常用到。
当我们在键盘上敲下一个字母的时候,到底是怎么发送到相应的进程的呢?
这里的Terminal可能是任何地方的程序,例如Windows上的Putty、Xshell之类的程序。
1. Terminal请求和SSH Server建立连接
2. 验证通过后,SSH Server将创建一个新的Session,一个Shell进程
3. SSH Server会调用API,请求ptmx创建一个pts,成功之后呢,SSH Server将得到和ptmx关联的fd(file descriptor(文件描述符)),并与该fd和session关联起来;
4. 同时sshd创建Shell进程,将新创建的pts和Shell绑定
TTY和PTS的区别
对用户空间来说是没有区别,从内核看,pts另一端连接的是ptmx,而tty是连接内核的终端模拟器。
什么是ptmx?
ptmx是Linux中的一个特殊文件,全称为pseudo-terminal master-slave。它是一种虚拟终端,用于模拟终端设备。它允许进程向模拟终端读写数据,就好像与实际终端设备进行通信一样。它在很多应用场景中都有用到,例如:SSH登录、读写终端设备、脚本调试等。
内部命令:由shell自带,用户登录后自动加载并常驻内存中
外部命令:文件系统路径下有对应的可执行程序文件,当执行时才从磁盘加载至内存中,执行完后从内存中删除
用type命令查看是内部还是外部命令:
Hash缓存表
Linux还有一个与外部命令相关的Hash缓存表,称为"hash table"或"command hashing"。
这个Hash缓存表存储了已经执行过的外部命令的路径,以便下次执行时能够快速查找。当你在命令行中执行一个命令时,系统会首先检查Hash缓存表中是否已经存储了该命令的路径,如果是,就直接使用缓存表中的路径执行命令,而不必再次搜索整个文件系统。
在终端操作后,系统默认会在内存记录执行的命令,当用户退出时会将内存命令记录在~/.bash_history
在渗透场景中不建议在服务器使用history -c清除记录,最好通过编辑.bash_history删除自己相关执行的文件,或者执行时忽略以空白开头的命令
History在渗透、溯源中起到了非常重要的作用!!!
关于Linux终端快捷键常用的操作:
标了颜色加重的,需要记住目录是什么作用的。
根目录
一级目录
功能(作用)
/bin/
存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行
/boot/
系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等
/dev/
设备文件保存位置
/etc/
配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中如用户信息、服务的启动脚本、常用服务的配置文件等
/home/
普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。
如用户 liming 的主目录就是 /home/liming
/lib/
系统调用的函数库保存位置
/media/
挂载目录。系统建议用来挂载媒体设备,如软盘和光盘
/mnt/
挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区
/misc/
挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,
如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的
/opt/
第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,
手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件
/root/
root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下
/sbin/
保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看
/srv/
服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据
/tmp/
临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。
建议此目录中不能保存重要数据,最好每次开机都把该目录清空
/usr目录
子目录
功能(作用)
/usr/bin/
存放系统命令,普通用户和超级用户都可以执行。这些命令和系统启动无关
/usr/sbin/
存放根文件系统不必要的系统管理命令,如多数服务程序,只有 root 可以使用。
/usr/lib/
应用程序调用的函数库保存位置
/usr/XllR6/
图形界面系统保存位置
/usr/local/
手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置
/usr/share/
应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录
/usr/src/
源码包保存位置。我们手工下载的源码包和内核源码包都可以保存到这里。不过笔者更习惯把手工下载的源码包保存到 /usr/local/src/ 目录中,把内核源码保存到 /usr/src/linux/ 目录中
/usr/include
C/C++等编程语言头文件的放置目录
/var 目录
/var子目录
功能(作用)
/var/lib/
程序运行中需要调用或改变的数据保存位置。如 MySQL
的数据库保存在 /var/lib/mysql/ 目录中
/var/log/
登陆文件放置的目录,其中所包含重要的文件如 /var/log/messages, /var/log/wtmp 等。
/var/run/
一些服务和程序运行后,它们的 PID(进程 ID)保存位置
/var/spool/
里面主要都是一些临时存放,随时会被用户所调用的数据,例如 /var/spool/mail/ 存放新收到的邮件,/var/spool/cron/ 存放系统定时任务。
/var/www/
RPM 包安装的 Apache 的网页主目录
/var/nis和/var/yp
NIS 服务机制所使用的目录,nis 主要记录所有网络中每一个 client 的连接信息;yp 是 linux 的 nis 服务的日志文件存放的目录
/var/tmp
一些应用程序在安装或执行时,需要在重启后使用的某些文件,此目录能将该类文件暂时存放起来,完成后再行删除
实战场景,挖到了一个命令执行但是因为找不到目录而无法写shell。
通过网页寻找特殊名称或图片名称,通过find定位WEB目录。