Linux操作系统介绍
命令记不住怎么办?
- 先学习最重要的命令,再慢慢补充,比如本文就是讲解最基础的命令
- 分门别类地学习
- 不要去记,不会就问AI
- 多用,自然熟练
建议总结自己的常用命令文档
查看内核版本命令(可以搜索该版本对应漏洞):
uname -a # 下面的也可以 cat /proc/version查看发行版本
Linux内核版本=操作系统的核心引擎
Linux发行版本=把内核+软件+配置打包好的完整操作系统
虚拟机使用场景:
- 运行特定版本的操作系统
- 隔离物理机,测试用
- 提升资源利用率
Docker也是使用虚拟化技术,作用是把应用程序及所有依赖(包括代码、运行时环境、系统工具、库等)打包到一个容器中
Docker的特点:
- 开箱即用
- 快速部署
- 可移植性强
- 环境隔离
虚拟机用于提升硬件资源利用率,隔离资源
容器用于解决运行环境依赖的问题
安装虚拟机的时候记得快照,用来备份
| 虚拟交换机名称 | 用途 |
| VMnet0 | 桥接模式 |
| VMnet1 | 仅主机模式 |
| VMnet8 | NAT模式 |
虚拟交换机的作用:让相同模式的虚拟机相互连接
Liunx基础知识
Getshell指的是通过利用漏洞系统或安全缺陷,获取目标系统(如服务器、计算机等)的控制权限,从而能够以某种形式的shell(命令行界面)来操作目标系统
shell脚本以.sh结尾
工作目录:当前正在打开操作的目录
root用户的home目录是/root
其它用户的home目录/home/用户名
每个普通用户只能操作自己的home目录
man command 查看该命令的具体参数和使用方法,问AI实际更加方便
poweroff 关机
reboot 重启
Tab键 | 补全命令和目录 |
方向键 | 查看上一条命令,下一条命令 |
Ctrl+Insert | 复制 |
Shift+Insert | 粘贴 |
Alt+Insert | 复制并粘贴 |
Ctrl+A | 光标移动至行首 |
Ctrl+K | 清除光标后至行尾的内容 |
clear 清屏,向上滚动屏幕,命令还在
history 查看历史命令
history -c 清除历史命令,新建会话还在
彻底清除历史命令:
- Ubuntu:echo > ~/.bash_history
- Kali:echo > ~/.zsh_history
查看别名:alias
设置别名(以bash)为例:vim ~/.bashrc
格式:alias short = 'xxx;xxx'
读取并执行命令,使之生效:source ~/.bashrc
通配符:
文件描述符:
Linux文本编辑器:
搜索操作(命令模式下)
命令模式下删除一行,按dd
退出不保存,:q!
Linux软件安装:
apt update 更新软件源,找不到软件的时候更新
文件和目录管理
列出目录内容和属性:ls
ls -l /home/kali 长格式显示,权限、所有者、大小、修改时间
ls -a ~ 显示家目录下的所有文件,包含隐藏文件(以 . 开头)
打印工作路径:pwd
切换工作目录:cd 相对路径或绝对路径
查看文件类型:file
Linux不依靠后缀名判断文件类型,有的恶意文件后缀是txt,实际是elf可执行程序
file test.txt # 识别单个文件 file 1.jpg shell.py note.txt # 识别多个文件 file -f list.txt # 从一个文本文件里读取一堆文件名,批量检测复制文件或目录:cp
cp 选项 源文件 目标文件
-r 递归处理,-f强行复制文件或目录,不论目标文件或目录已经存在
# 查找文件或目录:find find /etc -name a* find / -name "aaa" 2>/dev/null find /root -type f find /root -type f -size +10Mwhereis查找二进制程序、代码等相关文件路径
# 创建空文件touch touch a.txt # 创建目录mkdir mkdir test mkdir -p /usr/local/soft # 移动或重命名move mv 1.txt 2.txt mv ./a/1.txt ./b/1.txt # 删除文件rm rm 1.txt 2.txt # 删除空目录rmdir rmdir ./c rmdir -rf ./a # -r递归(连同子文件夹一起删除)-f强制删除 # 查看软链接 ll /usr/bin/nc # 创建软链接 ln -s/usr/local/phpstudy/system/phpstudyctl /usr/bin/study # 使用软链接,若源文件删除,会失效 study文件压缩及解压缩
打包是将多个文件变成一个文件,减少文件个数
压缩是将一个文件的体积减少
常见压缩格式:
- Windows:zip、rar、7z
- Linux:gzip(tar.gz=.tgz)、bzip2(.bz2)、zip
压缩:zip text.zip *.txt
解压缩:unzip text.zip(最好先创建一个文件夹,不然解压出来全乱了)
解压缩到指定目录:unzip text.zip -d bbb
查看和处理文件内容
管道符号“|”,把前一个命令要输出到屏幕上的内容当作后一个命令的输入
如何退出一个工具或命令?按q或Ctrl+C或quit或exit
统计wc
- wc -l test.conf 统计该文件的行数
- wc -w test.conf 统计该文件的单词数
对比diff:diff a.txt b.txt(对比两个文件的差异)
查看文件内容(少量)cat
分页显示more/less
# 头尾信息显示head/tail head -n 10 test.conf tail -n 10 test.conf tail -f /var/log/messages搜索grep,适合单纯的查找或匹配文本
用户和权限管理
组ID(GID):
- root用户组:GID=0
- 程序用户组(系统用户组):1~999
- 普通用户组:1000~65535
1.组名、2.组密码、3.GID、4.用户列表
1.用户名、2.密码(影子文件,涉及到密码)
用户ID(UID):
- root用户:UID=0
- 程序用户(系统用户):1~999
- 普通用户:1000~65535
cat /etc/passwd # 验证任意文件读取漏洞密码格式:
# 新建用户useradd useradd testuser # 设置/修改用户密码passwd passwd root 123456 # 删除用户userdel userdel testuser # 修改已有用户属性usermod usermod -aG sudo test2 # 把test2用户添加到sudo组,-a追加,G表示附加组,不要直接-G,会覆盖原来所有附加组 # 查询用户账户标识id # 查看用户whoami # 切换用户su su root # chown需要root/sudo权限,下面是将test.txt所有者改为kali sudo chown kali test.txt # 同时修改所有者和所属用户组 sudo chown kali:kali test.txtsudo passwd root # 修改root用户密码 chmod u+s test.txt # 设置SUID权限,只对可执行文件生效,对目录没用,谁运行这个程序,就临时拥有这个文件所有者权限 chmod g+s test # 设置SGID权限,在这个目录里新建的文件,自动继承目录的属组,而不是创建自己的组,很少用于文件 chmod o+t test # SBIT(粘滞位),只对目录生效,文件设置无效 # 目录里的文件,只有文件所有者、root才能删除,其他人就算有目录的w权限,也删不掉别人的文件 # SUID提权是Linux提权最经典方向,SBIT保护共享目录,不能提权 # 提权案例如下 chmod u+s /usr/bin/find find . -exec /bin/sh -p \ # 查看有S权限的二进制程序 find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \Linux网络管理
# 下面两条命令都可以查看ip地址 ip a ifconfig # 测试网络连通性,Ctrl+C中断 ping www.baidu.com # telnet探测端口 telnet 192.168.142.156 22 telnet 192.168.142.156 80 # telnet远程登录,因为不安全,已经被ssh取代 telnet bbs.newsmth.net ssh -p 22 root@192.168.142.156 # 支持用公钥免密登录,这也是Linux常见的留后门方式 # 查看程序的网络连接情况 netstat -ap | grep ssh ss -an | grep ssh # 查看端口的网络连接情况 netstat -an | grep 22 ss -tn | grep 22# 收集域名相关信息 nslookup www.baidu.com host www.baidu.com dig www.baidu.com # curl是命令行的HTTP客户端 curl www.baidu.com # 向百度发一个get请求,把返回的网页源码打印出来 curl -l www.baidu.com # 只拿响应头,不拿页面内容 curl -X POST -d "username=admin&password=123456" http://127.0.0.1/login.php # POST提交表单,-X POST指定请求方式为POST,-d后携带POST提交的数据 curl -H "Cookie:PHPSESSID=abc123" http://127.0.0.1/login.php # -H是加请求头,模拟浏览器# 启用或禁用防火墙 ufw enable ufw disable ufw status # 允许或拒绝端口 ufw allow 80/tcp ufw deny 22/tcp # 开放或关闭特定服务 ufw allow ssh ufw deny http # 删除规则 ufw delete allow 80/tcp系统资源状态管理
查看进程ps,主要关注有哪些进程、有没有特定进程、进程号、什么命令启动的
pstree -p # 查看用户的进程树 pstree mysql # 守护进程 pstree -p | grep ssh # 先找到mysql的进程号(PID),假设是1234 ps -aux | grep mysql # 强制杀死mysql进程 kill -9 1234# 查看内存使用free,-h以人类可读的方式查看,自动MB或GB free -h # 磁盘使用情况df df文件或目录的磁盘占用大小
定时任务工具crontab
cron表达式可以让AI写,也可上网用工具查询:https://tool.lu/crontab
系统日志文件目录