Linux
介绍
选择Linux的原因:
低风险:使用闭源软件无疑把命运交付给他人,一旦封闭的源代码没有人来维护,您将进退维谷。而且相较于商业软件公司,开源社区很少存在倒闭的问题。并且,源代码一旦公布于世,任何人或组织都可以接手进行新的维护工作。
高品质:相较于闭源软件产品,开源项目通常是由开源社区来研发及维护的,参与编写、维护、测试的用户数量众多,一般的bug还没有等暴发就已经被修补。另外,在灵感不断碰撞、代码不断迭代的交流氛围中,程序员也不可能将“半成品”上传到开源社区中。
低成本:开源工作者大多都是在幕后默默且无偿地付出劳动成果,为美好的世界贡献一份力量,因此使用开源社区推动的软件项目可以节省大量的人力、物力和财力。
更透明没有哪个笨蛋会把木马或后门代码放到开源项目中,这样无疑是把自己的罪行暴露在阳光之下,很容易被他人发现。
常见的Linux系统版本
- CentOS
- Fedora
- Debian
- ubuntu
- openSUSE
- Kali Linux
- Gentoo
- Deepin
安装
Kali Linux官网: https://www.kali.org/get-kali/#kali-virtual-machines
我们直接下载VM文件解压就可以在VM中使用已经配置好的Linux了,比起自己配会方便许多。
Kali Linux的配置
修改root密码
sudo passwd root
更换新源 文件位置:
/etc/apt/sources.list
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
deb http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
deb-src http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
deb http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
deb-src http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
deb http://http.kali.org/kali kali-rolling main non-free contrib
deb-src http://http.kali.org/kali kali-rolling main non-free contrib
deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
更新包列表&&更新包
apt-get update && apt-get upgrade
更新系统
apt-get dist-upgrade
修改中文包
dpkg-reconfigure locales
基础命令
Linux指令手册
https://www.linuxcool.com/
目录指令
命令格式
命令名称 [命令参数] [命令对象]
注意:命令名称、命令参数、命令对象之间请用空格键分隔。
命令对象:一般是指要处理的文件、目录、用户等资源。
命令参数:长格式(完整的选 项名称),也可以用短格式(单个字母的缩写),两者分别用–与-作为前缀。
长短格式 例如:
长格式 man --help
短格式 man -h
命令名称:man
命令英文原意:manual
命令所在路径: /usr/bin/man
执行权限:所有用户
语法: man [命令或配置文件]
功能描述:获得帮助信息
例: man ls
查看ls命令的帮助信息
命令名称:pwd
命令英文:print working directory
命令所在路径:/bin/pwd
执行权限:所有用户
功能描述: 显示当前所在的工作目录
语法 pwd
pwd 和$PWD(变量,不需要定义),都可以表示当前目录,如
直接执行命令 pwd
echo $PWD
其它系统变量 $HOME $SHELL $USER
命令名称:cd
命令英文:change directory
命令所在路径:shell内置命令
执行权限:所有用户
功能描述: 切换目录文件
语法: cd【目录】
cd / 切换到根目录
cd … 回到上一级目录
cd - 进入上次的目录位置
cd 后面什么都不加 进入用户家目录
cd / 进入根目录
cd ~ 进入用户家目录,比如root用户就进入到/root,比如zzz用户,就进入到/home/zzz
系统工作指令
命令名称:echo
功能描述:用于在终端输出字符串或变量提取后的值。
echo命令是linux中最基础的命令,也是很常用的命令,特别是在写shell脚本的时候
语法:echo [字符串 | $变量]
例:
echo hello
echo $demo ##没有此变量,就没有回显
echo -n "www.baidu.com"
echo `ifconfig`
命令名称:date
功能描述:用于显示及设置系统的时间或日期
在日常工作常常有备份数据的命令结合使用,如 “backup-2017-9-1.log"
语法:date [选项] [+指定的格式]
参数 | 功能 |
---|
%H | 小时(00~23) | %I | 小时(00~12) | %M | 分钟(00~59) | %S | 秒(00~59) | %j | 今年中的第几天 |
例:
date -s "20210423 13:30:00"
date "+%Y-%m-%d %H:%M:%S"
date "+%Y-%m-%d %I:%M:%S"
date "+%j"
Linux中的时钟分为硬件时钟和系统时钟两种
1、硬件时钟即BIOS时钟,就是CMOS设置时能看到的时间
2、系统时钟即Linux系统Kernel时间
date -s "2021-04-23 13:30:00"
hwclock --systohc
hwclock --show
命令名称:ps
语法:ps [参数]
使用权限:所有使用者
功能描述:显示瞬间行程 (process) 的动态,适用于进程的一次性的查看,如果想对进程时间连续性的监控,可以用top命令
参数 | 作用 |
---|
-a | 显示所有进程(包括其他用户的进程) | -u | 用户以及其他详细信息 | -x | 显示没有控制终端的进程 |
USER 进程的属主;
PID 进程的ID;
PPID 父进程;
%CPU 进程占用的CPU百分比;
%MEM 占用内存的百分比;
VSZ 进程虚拟大小;
RSS 驻留中页的数量;
TTY 终端ID
STAT 进程状态(有以下几种)
(1)R运行状态(runing):并不意味着进程一定在运行中,也可以在运行队列里;
(2)S睡眠状态(sleeping):进程在等待事件完成;(浅度睡眠,可以被唤醒)
(3)D磁盘睡眠状态(Disk sleep):不可中断睡眠
(深度睡眠,不可以被唤醒,通常在磁盘写入时发生)
(4)T停止状态(stopped):可以通过发送SIGSTOP信号给进程来停止进程,
可以发送SIGCONT信号让进程继续运行
(5)X死亡状态(dead):该状态是返回状态,在任务列表中看不到;
(6)Z僵尸状态(zombie):子进程退出,父进程还在运行,但是父进程没有读到子进程的退出状态,
子进程进入僵尸状态;
(7)t追踪停止状态(trancing stop)
< 优先级高的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ 位于后台的进程组;
WCHAN 正在等待的进程资源;
START 启动进程的时间;
TIME 进程消耗CPU的时间;
COMMAND 命令的名称和参数;
命令名称:top
功能描述:用于动态地监视进程活动与系统负载等信息
top 命令执行结果的前 5 行为系统整体的统计信息:
第 1 行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为 1 分钟、5 分钟、15 分钟内的平均值,数值越小意味着负载越低)。
第 2 行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程 数。
第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源 百分比、空闲的资源百分比等。 注: 第 3 行中的数据均为 CPU 数据并以百分比格式显示,例如“97.1 id”意味着有 97.1% 的 CPU 处理器资源处于空闲。
第 4 行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
第 5 行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
命令名称:uptime
语法:uptime
功能描述:用于查看系统的负载信息
它可以显示当前系统时间、系统已运行时间、启用终端数量以 及平均负载值等信息。平均负载值指的是系统在最近 1 分钟、5 分钟、15 分钟内的压力情 况(下面加粗的信息部分);负载值越低越好,尽量不要长期超过 1,在生产环境中不要 超过 5。
命令名称:free
语法:free [-h]
功能描述:用于显示当前系统中内存的使用量信息
命令名称:who
语法:who [参数]
功能描述:用于查看当前登入主机的用户终端信息
命令名称:kill
语法:kill [参数] [进程 PID]
功能描述:用于终止某个指定 PID 的服务进程,配合着pidof命令使用
[root@linuxprobe ~]
命令名称:wget
语法:wget [参数] 下载地址
功能描述:在终端中下载网络文件
参数 | 作用 |
---|
-b | 后台下载 | -O | 下载到指定目录,同时重命名下载的文件 | -t | 最大尝试下载次数 | -c | 断点续传下载文件 | -p | 下载页面内所有资源 | -r | 指定递归下载 |
例:
wget http://www.baidu.com
wget -O /home/test/www.baidu http://www.baidu.com
wget -b http://www.baidu.com
wget -rb http://www.baidu.com
命令名称:scp
语法:scp [参数] [原路径] [目标路径]
位置:/usr/bin/scp
功能描述:scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令
常用参数:
-B 使用批处理模式(传输过程中不询问传输口令或短语)
-C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-r 递归复制整个目录。
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。
这些信息用于调试连接,验证和配置问题。
-l limit 限定用户所能使用的带宽,以Kbit/s为单位。
-P port 注意是大写的P, port是指定数据传输用到的端口号
-1 强制scp命令使用协议ssh1
-2 强制scp命令使用协议ssh2
-4 强制scp命令只使用IPv4寻址
-6 强制scp命令只使用IPv6寻址
例子:
从本地复制到远程:
scp 本地文件 远程主机用户@远程主机IP:远程主机目录
1、从本地服务器复制到远程服务器:复制文件
scp local_file remote_username@remote_ip:remote_folder
2、从本地服务器复制到远程服务器:复制目录
scp -r local_folder remote_username@remote_ip:remote_folder
从远程复制到本地:
scp 远程主机用户@远程主机IP:远程主机目录 本地主机文件
scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3
命令名称:uname
语法:uname [-a]
功能描述:用于查看系统内核与系统版本等信息
一般会固定搭配上-a 参数来完整地查看当前系统的内核名称、主 机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统 名称等信息。
文件处理命令
命令名称:touch
命令所在路径:/usr/bin/touch
执行权限:所有用户
功能描述: 用于创建空白文件或设置文件的时间
语法 touch 【选项】【文件】
例如touch a1 a2
stat a1
touch a1
touch -a a1
touch -d '2025-03-01 01:10:03' a1
touch -d '2020-03-01 01:10:03' a1
总结:只要访问时间,修改时间,或文件权限有一个修改,Ctime时间都会修改
修改元数据修改时间,只能通过修改系统时间来自定义,但是一般情况下修改系统时间需要root权限
date -s "2018-03-01 01:10:03" >>a1
hwclock --hctosys
命令名称:mkdir
命令英文:make directories
命令所在路径:/bin/mkdir
执行权限:所有用户
功能描述: 创建新目录
语法 mkdir 【目录名】
例:mkdir onedir
mkdir -p a/b/c/d
命令名称:cp
命令英文:copy
命令所在路径:/bin/cp
执行权限:所有用户
功能描述: 复制文件或目录
语法 cp -R 【源文件或目录】【目的目录】
例:
cp file1 file2 onedir
cp -R dir1 dir2
cp file1 file2
命令名称:mv
命令英文:move
命令所在路径:/bin/mv
执行权限:所有用户
功能描述: 用于剪切文件或将文件重命名
语法 mv 【源文件或目录】【目的目录】
mv file1 file3
mv file2 dir2
命令名称:rm
命令英文:remove
命令所在路径:/bin/rm
执行权限:所有用户
功能描述: 删除文件
语法 rm -r 【文件或目录】
? -r 删除目录,不带参数删除文件
? rm -rf 强制删除,不在提示是否确认删除
例:
rm file1
rm -r dir1
命令名称:cat
命令英文:concatenate and display files
命令所在路径:/bin/cat
执行权限:所有用户
功能描述: 显示文件内容
语法 cat 【文件名】
cat主要有三大功能:
1.一次显示整个文件。
cat /etc/services
2.从键盘创建一个文件。同时编辑内容,但是只能创建新文件,不能编辑已有文件.以ctrl+d作为输入结束:
cat > filename
3.将几个文件合并为一个文件。
cat file1 file2 > file
其它参数:
-n 或 –number 由 1 开始对所有输出的行数编号
-b 或 –number-nonblank 和 -n 相似,只不过对于空白行不编号
命令名称:more
命令所在路径:/bin/more
执行权限:所有用户
功能描述: 分页显示文件内容
语法 more 【文件名】
? 空格或f 显示下一页
? enter 显示下一行
? q或Q 退出
例:
more /etc/services
+n 从笫 n 行开始显示 more +100 /etc/services
命令名称:less
命令所在路径:/bin/less
执行权限:所有用户
功能描述: 是对文件或其它输出进行分页显示
语法 less [选项] 文件
常用参数
-i
-m
-N
例如: less -mN /etc/services
常用操作
/字符串
?字符串
N和n向前向后查找搜索的匹配项
回车下一行,f和空格向下翻页 q退出
命令名称:ln
命令英文:link
命令所在路径:/bin/ln
执行权限:所有用户
功能描述:针对某一个文件在另外一个位置建立一个同步的链接。好处:不必重复的占用磁盘空间。
语法 :
ln -s【源文件名称】【目标文件名称】 --建立软连接
ln 【源文件名称】【目标文件名称】 --建立硬链接
必要参数:
-b 覆盖以前建立的链接,之前存在的软连自动重命名
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接) (重点,这个常用)
-v 显示详细的处理过程
例:
ln -s test test.soft
ln test test.hard
我们需要知道不管对源文件或者链接文件进行修改内容时,两者都是同步同时性的更改。
硬链接和软链接区别:
软链接:前面是 l 开头的(link),具有全部操作的权限,rwxrwxrwx
1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
2.软链接可以 跨文件系统 ,硬链接不可以
3.软链接可以对一个不存在的文件名进行链接
4.软链接可以对目录进行链接
5.有自己的i节点,一旦删除源文件,则链接消失
硬链接: - 开头,表示文件,受限的权限 rw-r--r--
1.硬链接,以文件副本的形式存在。但不占用实际空间。
2.不允许给目录创建硬链接
3.硬链接只有在同一个文件系统中才能创建
4.删除源文件,无影响
不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的空间。
目录/链接个数
文件搜索命令
命令名称: find
命令所在路径: /usr/bin/find
执行权限:所有用户
语法: find [搜索路径] [搜寻关键字]
功能描述:你可以用它找到任何你想找的文件。
-name filename
-perm
-user username
-group groupname
-mtime -n +n
-atime -n +n
-ctime -n +n
-nogroup
-nouser
-type b/d/c/p/l/f
-size n[c]
-mount
-follow
-prune
简单例子:
find /etc -name init
find /home -size +1M
find / -user root
find /etc -ctime -1
find /etc -size +80M -a -size -100M
下面通过一些简单的例子来介绍下find的常规用法:
1、按名字查找
在当前目录及子目录中,查找大写字母开头的txt文件
$ find . -name '[A-Z]*.txt'
2、按目录查找
在当前目录除aa之外的子目录内搜索 txt文件
$ find . -path "./aa" -prune -o -name "*.txt"
3、按权限查找
在当前目录及子目录中,查找属主具有读写执行,其他具有读执行权限的文件
$ find . -perm 755
4、按类型查找 (b/d/c/p/l/f )
在当前目录及子目录下,查找符号链接文件
$ find . -type l
5、按属主及属组
查找属主是www的文件
$ find / -user www -type f
6、按时间查找
查找2天内被更改过的文件
$ find . -mtime -2 -type f
7、按文件新旧
查找比 aa.txt 新的文件
$ find . -newer "aa.txt" -type f
8、按大小查找
查找超过1M的文件
$ find / -size +1M -type f
命令名称:grep
命令所在路径:/bin/grep
执行权限:所有用户
语法: grep [指定字串]
功能描述:在文件中搜寻字串匹配的行并输出,是一种强大的文本搜索工具
格式及主要参数
grep [options]
主要参数: grep --help可查看
-c:只输出匹配行的计数。
-i:不区分大小写。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
例: grep ftp /etc/services
压缩解压命令
常用压缩命令 gzip 和 zip,zip 压缩后文件是 *.zip ,而 gzip 压缩后的文件 *.gz 相应的解压缩命令则是 gunzip 和 unzip
命令名称: zip和unzip
命令所在路径: /usr/bin/
执行权限:所有用户
语法: zip [参数] [压缩后文件名称] [要压缩的文件或目录]
功能描述:压缩文件或目录
例子:
zip test.zip test.txt
unzip test.zip
unzip test.zip -d /root/
命令名称:gzip和gunzip
命令所在路径: /bin/gzip
执行权限:所有用户
语法: gzip 选项[文件]
功能描述:压缩文件,,其名称后面会多出".gz"的扩展名
例子:
gzip test.txt
gunzip test.txt.gz
gzip -c test.txt > /root/test.gz
gunzip -c test.gz > ./test.txt
命令名称: tar
命令所在路径: /bin/tar
执行权限:所有用户
语法: tar 选项[cvf] [目录]
? -c 产生.tar打包文件
? -z 打包同时压缩
? -v 显示详细信息
? -f 指定压缩后的文件名
?
功能描述:打包目录 其名称后面会多出".tar.gz"的扩展名
touch a.txt
tar -czvf test.tar.gz a.txt
tar -tvf test.tar.gz
tar -xzvf test.tar.gz
tar -czvf small.tar.gz small(目录名)
解压同上
网络通信命令
命令名称: ping
语法: ping IP地址或域名
功能描述:测试网络连通性
例: # ping www.baidu.com
命令名称: ifconfig
语法: ifconfig 选项[-a] [网卡设备标识]
-a 显示所有网卡信息
功能描述:查看网络设置信息
例: # ifconfig -a
命令名称: traceroute
语法: traceroute hostname
功能描述:路由跟踪命令,是一个检测路由节点数的一个网络命令
apt install traceroute -y
traceroute www.baidu.com
指令名称: write
语法: write <用户名>
功能描述:向另外-个用户发信息, 以Ctrl+D作为结束
范例:
$ write tom
指令名称: wall
语法: wall [message] [文件名]
功能描述:向所有用户广播信息,以Ctrl+D作为结束
例:
$ wall Happy New Year!
Linux用户类型
? 管理员 UID 为 0:系统的管理员用户。
- 系统用户(伪用户) UID 为 1~999: Linux 系统为了避免因某个服务程序出现漏洞而被黑客提至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
- 普通用户 UID 从 1000 开始:是由管理员创建的用于日常工作的用户。
需要注意的是,UID 是不能冲突的,而且管理员创建的普通用户的 UID 默认是从 1000 开始的(即使前面有闲置的号码)
注:将普通用户UID改为0,权限和root一样
用户组:以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。
基本组:创建新用户时,自动创建一个与其同名的用户组
扩展组:该新用户被加入的除基本组外的其他组
一个用户只有一个基本用户组,但是可以有多个扩展用户组。
用户信息保存在/etc/passwd文件,可以直接用vim编辑器也可以使用命令控制
字段 | 含义 |
---|
用户名 | 用户登录系统用户名 | 密码 | 密码位 | UID | 用户标识号 | GID | 缺省组标识号 | 注释性描述 | 例如存放用户全名等 | 宿主目录 | 用户登录系统后的缺省目录 | 命令解释器 | 用户使用的Shell |
命令名称: useradd userdel
命令所在路径: /usr/sbin/
执行权限:超级管理员用户
语法:useradd [选项] 用户名 userdel [选项] 用户名
功能描述:新建用户 删除用户
useradd常用参数
-d 新账户的主目录
-m 创建用户的主目录 不加-m默认不创建用户主目录
-e 新账户的过期日期,格式为 YYYY-MM-DD.
-u 指定该用户的默认 UID
-g 指定一个初始的用户基本组(必须已存在)
-G 指定一个或多个扩展用户组
-s 指定用户的默认shell解释器
例子:
useradd tom -m -d /home/tom -e 2022-05-05 -u 8888 -G root
useradd -s /sbin/nologon tom1
如果一个用户的默认shell设置为/sbin/nologin 则这个用户是禁止登陆系统的
比如日常可以将 nginx mysql php-fpm这些应用的用户默认shell设定为/sbin/nologin
提升安全性
useradd -s /bin/bash tom2
userdel常用参数
-f 强制删除用户,即使用户当前已登录
-r 同时删除用户及用户家目录,用户在线提示
命令名称: groupadd
语法:groupadd [选项] 群组名
功能描述: 用于创建用户组
groupadd ronny
命令名称: usermod
语法:usermod [选项] 用户名
功能描述: 用于修改用户的属性
常用参数:
-e 账户的到期时间,格式为 YYYY-MM-DD
-L 锁定用户禁止其登录系统
-U 解锁用户,允许其登录系统
-u 修改用户的 UID
-g 变更所属用户组
-G 变更扩展用户组
例子:
usermod -u 8888 tom
usermod -L username
usermod -U username
id tom
passwd 命令
功能描述:用于修改用户密码、过期时间、认证信息等,
格式 passwd [选项] [用户名]
注:普通用户只能使用 passwd 命令修改自身的系统密码,而 root 管理员则有权限修改其他所有人的密码
参数 | 作用 |
---|
-l | 锁定指定账户的密码。此选项通过将密码更改为一个不可能与加密值匹配的值 来禁用。 | -u | 解锁指定用户的密码。此操作通过将密码改回先前值(改回使用 -l 之前的值)重新启用密码。 | -d | 删除用户密码(让它为空)。这是禁用一个用户密码的快速方法。 | -e | 强制用户在下次登录时修改密码 | -S | 显示账户状态信息。状态信息包含 7 个字段。首个字段是用户的登录名,第二个字段表示用户账户是否已经锁定密 码(L)、没有密码 (NP)或者密码可用§,第三个字段给出最后一次更改密码的日期。接下来的四个字段分别是密码的最小年龄、最大年龄、警告期和禁用期。这些年龄以天为单位计算。 |
例:
passwd -l tom #锁定用户,禁止其登录
passwd -u tom #解除锁定,允许用户登录
passwd -S tom #显示用户的密码是否被锁定
/etc/shadow文件格式
用户名 | 用户登录系统时使用的用户名 |
---|
密码 | 加密密码 | 最后一次修改时间 | 上一次修改密码的日期与1970-1-1相距的天数 | 最小时间间隔 | 两次修改密码之间的最小天数 | 最大时间间隔 | 密码保持有效的最多天数 | 警告时间 | 从系统开始警告到密码失效的天数 | 账号闲置时间 | 账号闲置的时间 | 失效时间 | 密码失效的绝对天数 |
su 命令
功能描述:解决切换用户身份的需求,当前登录不用退出
格式: su [用户名]
su tom
su - tom
sudo 命令
功能描述:用于给普通用户提供额外的权限来完成原本 root 管理员才能完成的任务
格式: sudo [参数] 命令名称
注:暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码。 sudo的配置文件/etc/sudoers 。命令行直接输入visudo也可以直接打开
查看用户信息 w命令
w显示信息的含义
JCPU:以终端代号来区分,该终端所有相关的进程执行时,所消耗的CPU时间会显示在这里
PCPU: CPU执行程字耗费的时间
WHAT:用户正在执行的操作
load average: 分别显示系统在过去1、 5、15分钟内的平均负载程度。
FROM: 显示用户从何处登录系统,“:0”的显示代表该用户时从X Window下,打开文本模式窗口登录的
IDLE:用户闲置的时间。这是个计时器,-旦用户执行任何 操作,该计时器便会被重置
查看个别用户信息: W 用户名
在 Linux 系统中,每个文件都规定了文件的所有者、 所有组以及其他人对文件所拥有的可读(r)、可写(w)、可执行(x)等权限。
l rwx rwx rwx. 1 root root 7 1月 6 09:17 bin -> usr/bin
l | rwx | rwx | rwx | root | root | 09:17 |
---|
文件类型 | 拥有者的权限 | 所属组的权限 | 其他人权限 | 拥有者 | 所属组 | 最后修改的时间 |
字符 | mode | 权限 | 对文件的含义 | 对目录的含义 |
---|
r | 4 | 读权限 | 可以查看文件内容 | 可以列出目录中的内容 | w | 2 | 写权限 | 可以修改文件内容 | 可以在目录中创建,删除文件 | x | 1 | 执行权限 | 可以执行文件 | 可以进入目录 |
若某个文件的权限为 7 则代表可读、可写、可执行(4+2+1);若权限为 6 则代表可读、 可写(4+2)
有个文件的权限是 rwxrw-r–,数字法表示即为 764。
命令名称:chmod
命令英文:change the permissions mode of a file
命令所在路径:/bin/chmod
执行权限:所有用户
语法:chmod 【{ugo}{±=}{rwx}】 【文件或目录】
? chmod 【mode=421】【文件或目录】
功能描述:改变文件或目录权限
例子:
chmod ugo+r file.txt
chmod u+x man.py
chmod -R test
chmod 777 file
命令名称: chown
功能描述:将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID,组可以是组名或者组 ID
参数
? -R : 处理指定目录以及其子目录下的所有文件
chown root file1.txt
chown :tomgroup file1.txt
chown tom:tomgroup file1.txt
chown -R tom:tomgroup *
命令名称:umask
功能描述:指定在建立文件时预设的权限掩码。
语法:umask [-S]【权限掩码】
参数说明:-S以文字的方式来表示权限掩码
实例:
一,
$ umask
0002
$ mkdir test
$ ls -dl test
drwxrwxr-x 2 ntesqiu ntesqiu 4096 12月 29 11:34 test
注意:在上面的输出信息中,drwxrwxr-x"="777-002=775"。
二,修改建立文件时预设的权限掩码
$ umask 0001 #修改建立文件时预设的权限掩码
$ mkdir test1
$ ls -dl test1
drwxrwxrw- 2 ntesqiu ntesqiu 4096 12月 29 12:00 test1
注意:在上面的输出信息中,drwxrwxr-x"="777-001=776"。
计划任务
systemctl status crond (查看状态)
apt install cron(安装 cron)
systemctl start cron(启动crond服务)
systemctl enable cron (设为开机启动)
crontab 命令
位置:/usr/bin/crontab
功能:定时执行脚本、或者程序。
场景:
- 1、系统层面:系统周期性所要执行的工作,如定期备份系统数据、清理缓存
- 2、用户层面:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新消息,定期监控服务器运行状况。
常用参数:
-e : 执行文字编辑器来设定时程表,vi /etc/crontab
-u user 设定指定 user 的时程表,如果不使用 -u user ,默认设定自己的时程表
-r : 删除目前的时程表
-l : 列出目前的时程表
crontab /etc/crontab
ubuntu开启cron日志
1,修改配置文件 /etc/rsyslog.d/50-default.conf
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-06K5w2tW-1641555728837)(images/image-20211215113411672.png)]
2,重启rsyslog服务
service rsyslog restart
3,重启cron服务
service cron restart
时间格式如下:
f1 f2 f3 f4 f5 program
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天为0或7)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
星号(*):代表所有可能的值,例如day字段如果是星号,则表示在满足其它字段的制约条件后每天都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”。
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。
实例
*/1 * * * * date >> /home/date_log.txt
tail-f /home/date_log.txt
在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup:
0 6-12/3 * 12 * /home/脚本.sh
重定向 、管道符
linux标准输入设备指的是键盘,标准输出设备指的是显示器,标准错误输出指的是显示器。
在解释什么是重定向之前,再来说说什么是文件描述符
文件描述符:可以理解为 Linux 系统为文件分配的一个数字,它是个很小的非负整数
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
**输入重定向:**是指不使用系统提供的标准输入端口,而进行重新的指定。(重定向简单理解就是使用 “<”符来修改标准输入设备)
比如,默认情况下,cat命令会接受默认标准输入设备键盘的输入,并显示到控制台,但是可以通过“<”符号修改标准输入设备,指定文件作为标准输入设备,那么cat命令将指定的文件作为输入设备,并将文件中的内容读取并显示到控制台。
输出重定向
符号 | 作用 |
---|
命令 > 文件 | 将标准输出重定向到一个文件中(清空原有文件的数据) | 命令 >> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
man ls > readme
man cp >> readme
管道:将一个命令的输出传送给另一个命令,作为另一-个命令的输入。
使用方法:
命令1命令2|命令3… |命令n
范例:
ls -l /etc | more
ls -l /etc | grep init
grep "/sbin/nologin" /etc/passwd | wc -l
含义:通配符就是通用的匹配信息的符号
通配符 | 作用 |
---|
* | 匹配零个或多个字符 | ? | 匹配单个字符 | [0-9] | 代表匹配 0~9 之间的单个数字的字符 | [abc] | 代表匹配 a、b、c 三个字符中的任意 一个字符 |
匹配所有在/dev 目录中且 以 sda 开头的文件
ls -l /dev/sda*
常用转义字符
字符 | 含义 |
---|
反斜杠 \ | 使反斜杠后面的一个变量变为单纯的字符串 | 双引号 ” “ | 保留其中的变量属性,不进行转义处理 | 单引号 ‘ ’ | 转义其中所有的变量为单纯的字符串 | 反引号 `` | 把其中的命令执行后返回结果 |
文本编辑 vim awk
SSH服务
Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。目前已经成为Linux系统的标准配置。
kali设置SSH参考: https://zhuanlan.zhihu.com/p/113141126
docker
Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。 Docker的三个概念
- 镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。
- 容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。
- 仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。
更详细的解释: https://ruanyifeng.com/blog/2018/02/docker-tutorial.html
安装docker https://docs.docker.com/engine/install/
查看Docker的帮助信息:
docker --help
入侵排查
日志基础
日志文件
日志文件对于诊断和解决系统中的问题很有帮助,因为在 Linux 操作系统中运行的程序通常会把系消息和错误消息写入相应的日志文件,这样系统一旦出现问题就会“有据可查”。 此外,当主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹。
日志功能
用于记录系统或程序运行过程中发生的各种事件 通过阅读日志有助于诊断解决系统故障
日志分类
内核及系统日志 由系统服务syslog统一管理格式大致相同 用户日志 用于记录用户登录及退出系统的相关信息 程序日志 各种应用程序独立管理的日志文件,记录格式不一
日志 保存位置
默认位于 /var/log
日志配置文件
/etc/rsyslog.conf
主要日志文件介绍
/var/log/messages
/var/log/cron
/var/log/dmesg
/var/log/maillog
用户日志
/var/log/wtmp
/var/log/btmp
/var/log/lastlog
/var/log/secure
rsyslogd:系统日志程序
ps -aux|grep rsyslogd
tail -f /var/log/messages
日志消息级别
作用:设置不同级别的日志等级,日志文件记录相应 日志信息,级别越大记录日志越详细
日志消息的级别
0 EMERG (紧急):会导致主机系统不可用的情况
1 ALERT (警告):必须马上采取措施解决的问题
2 CRIT (严重):比较严重的情况
3 ERR(错误):运行出现错误
4 WARNING (提醒):可能会影响系统功能的事件
5 NOTICE(注意):不会影响系统但值得注意
6 INFO 一般值思
7 DEBUG(调试)程序或系统调试信息等
日志一般格式
时间标签 主机名 子系统 消息字段
用户日志
/var/log/wtmp
/var/log/btmp
/var/log/lastlog
/var/log/secure
分析命令
users, who, w, last, lastb
程序日志
apache&nginx日志分析 日志管理策略
1 ,备份和归档
2,延长日志保存期限
3,控制日志访问权限
? 日志中可能会包含各类敏感信息,如账户、口令等
4,集中管理日志
将服务器的田志文件发到统一的日志文件服务器便于日志信息的统一收集、整理和分析
杜绝日志信息的意外丢失、恶意篡改或删除
应急响应
排查用户相关的信息
whoami
who
w
users
id
id || (whoami && groups) 2>/dev/null
cat /etc/passwd | cut -d: -f1
cat /etc/passwd | grep "sh$"
awk '/\$1|\$6/{print $1}' /etc/shadow
cat /etc/shadow
cat /etc/group
last
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
sudo -l
排查进程端口
top
ls -l /proc/18176/exe
lsof -p 18176
lsof -c sshd
lsof -i:33946
ps -p PID -o lstart
netstat -pantu | grep 18176
fuser -n tcp 33946
ps aux / ps -ef
pstree
ps aux --sort -pcpu
ps aux --sort -pmem
判断入侵方式,修复漏洞
可参考《应急响应实战笔记》 GitHub地址: https://github.com/Bypass007/Emergency-Response-Notes GitBook地址: https://bypass007.github.io/Emergency-Response-Notes/
黑客入侵主机有下列几种情况:
- 通过 redis 未授权漏洞入侵(好多挖矿程序是通过这个)
- ssh 弱口令暴力破解
- Web 程序漏洞入侵
|