rhel6之六:linux命令、bash、shell脚本、sudo、gpg应用、rpm包签名校验

chengdu

贡献于2013-07-08

字数:16852 关键词: RedHat

一、常见的文件操作命令: 1、diff命令:命令格式:diff [选项] 源文件 目标文件 用于比较两个文件之间的区别,并送到标准输出。输出时先报告两个文件的哪一行不同。<表示是前一个文件的内容 ,>表示后一个文件的内容。例如: 补充说明:diff以逐行的方式,比较文本文件的异同处。如果源文件是一个目录而目标文件 不是目录(就是一个文件), diff 会比较在源(目录)里的文件的中和目标文件同名的, 反过来也一样。 如果源文件和目标文件都是目录, diff 比较两个目录中相应的文件,依照字母次序排序;这个比较是不会递归的,除非给出 –r。 如下图所显示的目录结构: f1和f2文件内容如下: 执行diff命令:显示如下 常见选项: -c  显示全部内容,并标出不同之处,不同的行标以感叹号 -u 以合并的方式来显示文件内容的不同 -r 当file1和file2是目录时,递归作用到各文件和目录上 -q 仅显示有无差异,不显示详细的信息 -i 不区分大小写 -y 在同行显示两个文件 –W 指定宽度 -a diff预设只会逐行比较文本文件,不显示相关上下文 -N 在比较目录时,若文件A仅出现在某个目录中,预设会显示:   Only in目录:文件A 若使用-N参数,如果那个文件只在其中的一个目录中找到,那么它被视为在另一个目录中是一个空文件。这样新添加的文件也会出现在patch文件中 其他选项略,请查看命令帮助 diff命令最常用的功能是创建一个补丁文件: 用法:diff -Naur /tmp/file1.txt /tmp/file2.txt > /tmp/file.diff 则生成了一个 file2 相对 file1 的差异文件,一般file1.txt是原始文件,file2.txt是修改后的文件,file.diff称为file1.txt的补丁文件 +表示应该添加的行,-表示应该删除的行,其他行不过是提供的上下文信息而已。 2、patch命令:此命令用于为特定软件包打补丁,它使用diff命令生成的补丁文件对源文件进行操作。如:#patch 源文件 补丁文件 若使用-b选项,会对源文件进行备份 3、grep命令:查找文件里符合条件的字符串;语法: grep [options] -i 忽略大小写 -n 在显示行前,标上行号 -r 递归地,读取每个文件夹下的所有档案 -c 不显示符合条件的行,只显示符合的总行数 -v 显示除搜寻符合条件行之外的全部其他行(略) -l 不显示平常一般的输出结果,只显示符合的文件名称 -A num列出符合行之外,并且列出后NUM行 -B num除符合行之外,并显示在它之前的NUM行 -C num行之外并列出上下各NUM行,默认值是2 4、cut命令:可以从一个文本文件或者文本流中提取文本列 cut -d 分隔字符 [-cf] fields -d:后面接的是分隔字符,默认情况下为Tab; -c:后面接的是第几个字符 -f:后面接的是第几个区块 列出/etc/passwd文件中的所有用户,按照升序排列。 cut -d : -f 1 /etc/passwd|sort; 显示/etc/passwd文件下uid为0的用户名以及uid。 cut -d : -f 1,3 /etc/passwd|grep “:0$” 正则表达式'$'表示以字符结尾,'^'表示以某字符开始。 cut -cchars file 如:-c5  提取第5个字符    -c5-  提取第5个字符以后的字符    -c1,5,12 提取多个字符,中间用“,”符号隔开   -c5-14 提取第5个字符到第14个字符间的字符 -c5-14,20-30 提取第5个字符到第14个字符间的字符和第20个字符到第30个字符间的字符 4、head命令:查看文件开头的一部分内容(默认为10行) 格式:head -n 文件名 5、 tail命令:查看文件结尾的少部分内容(默认为10行) 格式:tail -n 文件名 tail -f 文件名 如:显示/etc/passwd文件中第5个至第10个用户的用户名和宿主目录 6、 wc命令:统计文件中的单词数量(Word Count)等信息 格式:wc [选项]... 目标文件... 常用命令选项: 参数 含义 -c 显示文件的Bytes数(字节数) -l 将每个文件的行数及文件名输出到屏幕上 -m 将每个文件的字符数及文件名输出到屏幕上,如果当前系统不支持多字节字符其将显示与-c参数相同的结果 -w 将每个文件含有多少个词及文件名输出到屏幕上 7、 sort命令格式:sort [选项] 文件 sort命令的功能是对文件中的各行进行排序,sort命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一字符,如果还相同,将继续进行比较. 主要选项: -k KeyDefinition 指定排序关键字。 -r 颠倒指定排序的顺序。 -t Character 指定 Character 作为字段分隔符 -n 按算术值对数字字段排序 -d 使用字典顺序排序。比较中仅考虑字母、数字和空格 - f 将小写字母与大写字母同等对待 - r 按逆序输出排序结果 -u 去掉重复的行,使文件中的每一行唯一 如:#sort -d 文件名 排序和显示指定文件的内容,并且只比较字母、数字和空格 如:#sort -d -f -u 文件名 如:#grep bash /etc/passwd |cut –d : -f 1 |sort 如:#sort –t “:” –k 3 /etc/passwd 对passwd文件按第三个字段排序 8、 uniq命令:文件经过处理后在它的输出文件中可能会出现重复的行。例如,使用cat命令将两个文件合并后,再使用sort命令进行排序,就可能出现重复行。这时可以使用uniq命令将这些重复行从输出文件中删除,只留下每条记录的唯一样本 格式:uniq [选项] 文件 主要选项: - c 显示输出中,在每行行首加上本行在文件中出现的次数   - d 只显示重复行。   - u 只显示文件中不重复的各行。 9、 tr命令:通过使用 tr,可以非常容易地实现 sed 的许多最基本功能。可以将 tr 看作为 sed 的简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。您也可以用它来除去重复字符。 常用选项的tr命令格式为: -d 删除字符串1中所有输入字符。 -s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。 input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用 如: (1) 去除某文件里面的重复的小写字符#tr -s "[a-z]"result.txt (2) 小写到大写#cat a.txt |tr "[a-z]" "[A-Z]" >b.txt (3) 编写一个脚本,包含如下内容:(实现大写转小写) echo -n “Enter yes or no:” read answer answer=”$(echo $answer|tr ‘A-Z’ ‘a-z’)” echo $answer 10、sed命令: 替换 如:#sed 's/day/night/' new 该例子将文件 old 中的每一行第一次出现的 day 替换成 night, 将结果输出到文件 new   s            " 替换 " 命令   /../../      分割符 (Delimiter)   day          搜索字符串   night        替换字符串 其实 , 分割符 "/" 可以用别的符号代替 , 比如 ",", "|" 等 . 如:sed 's/cat/dog/'new sed 默认只替换搜索字符串的第一次出现 , 利用 /g 可以替换搜索字符串所有 如:#sed '10,35s/1/2/' sample_one 只在此示例文件的输出的第 10 和第 35 行中用 "2" 来替换 "1" 如果需要对同一文件或行作多次修改,可以使用 "-e" 选项 删除行: 从某文件中删除包含 "xxx" 的所有行 二、shell脚本: 过滤器:能够接受数据,过滤再输出的工具,称为过滤器; 对过滤器和进程,存在着输入源与输出对象 输入、输出、重定向 输入:过滤器的数据来源;标准输入stdin(0):默认是键盘 输出:过滤器的数据去向;标准输出stdout (1):默认是终端屏幕 错误输出 :报错讯息与标准输出走不同的I/O通道;标准错误输出stderr(2):默认是终端屏幕 重定向:标准输入、输出与错误输出,都可以用特定符号改变数据来源或去向。 重定向即把命令(或可执行程序)的标准输入(或输出)发送到指定的文件(或命令)。也就是说,输入可以不来自键盘,而来自一个指定的文件(或是某一命令产生的屏幕输出);输出可以不来出现在屏幕,而添加到一个指定的文件。 输入重定向: 使用“<”来重定向输入源,大多数工具都会以其后的文件名为输入源,有一些过滤器一定需要添加 < 以明确输入源 command < file 命令command的输入原从file文件得到 如:passwd --stdin 用户名 <文件名 输出重定向: 使用>改变数据输出目标 范例:ls –l > listfile 将当前目录下的文件以长模式显示,然后写入listfile文件;文件已有内容会被消除 使用>进行输出重定向,文件的原内容会被覆盖 ls –l > listfile 使用>>,可以将输出追加入文件 ls –l >> listfile 错误输出重定向:(2>或2>>) 系统错误与标准输出使用的I/O管道不同,虽然他们都默认显示到屏幕上,但系统错误使用stderr通道而标准输出使用stdout通道。在这里提到了一个设备文件/dev/null,它是我们常说的黑洞设备,无论你发送何种大小的文件它都忽略并删除。 双重输出重定向: 使用>和2>可以将一次操作的正确、错误输出,被单独地送到不同的地方: 使用&>将所有输入都送向同一个地方 管道 将一个程序或命令的输出作为另一个程序或命令的输入 重定向、管道的常用范例 ls –l | more 分屏显示当前目录下的文件 cat < filea > fileb 拷贝filea到fileb cat file.* > file 将数个小文件合并成一个文件 Shell简介: Shell:命令行解释器,是用户与系统沟通时的媒介。在Unix系统中有各种Shell,Linux采用bash为其默认shell。系统可以使用的shell记录在/etc/shells中 Shell变量: 变量名:使用固定的名称,由系统预设或用户定义 变量值:能够根据用户设置、系统环境变化而变化 Shell变量的种类 用户自定义变量:由用户自己定义、修改和使用 环境变量:由系统维护,用于设置用户的Shell工作环境,只有极少数的变量用户可以修改 预定义变量:Bash预定义的特殊变量,不能直接修改 位置变量:通过命令行给程序传递执行参数 定义新的变量:变量名要以英文字母或下划线开头,区分大小写;格式:变量名=变量值 查看变量的值:格式:echo $变量名 通过$符号引用指定名称的变量值 在查看变量时,如果变量名容易和后边的字符串连在一起导致混淆,则应该使用大括号将变量名括起来,使用形式为:${变量名} 如:若已知变量Var的值为Benet,则执行“echo $Var3.0”命令后将显示结果“.0”而不是“Benet3.0”,因为在该命令中,会将“Var3”当成变量名(默认未定义此变量)。若希望正确显示“Benet3.0”的输出结果,则需要执行“echo ${Var}3.0” 变量的赋值与引用: 从键盘输入内容为变量赋值:格式: read [-p "信息"] 变量名 结合不同的引号为变量赋值: 双引号 “ ” :允许通过$符号引用其他变量值 单引号 ‘ ’ :禁止引用其他变量值,$视为普通字符 反撇号 ` ` :将命令执行的结果输出给变量,反撇号中的内容要求是可执行的命令,需要嵌套使用时,可以将反撇号改为 $( ... ) 的形式 设置变量的作用范围:格式:export 变量名... 环境变量:环境变量配置文件 全局配置文件:/etc/profile 用户配置文件:~/.bash_profile 查看环境变量 :set命令可以查看所有的Shell变量,其中包括环境变量 常用的环境变量: l $USER、$LOGNAME变量表示当前用户的登录名称 l $UID变量表示当前用户的UID号 l $SHELL变量表示用户使用的登录Shell l $HOME变量表示用户的宿主目录 l $PWD变量表示用户当前的工作目录 l $PS1和$PS2变量分别代表了当前用户的主提示符(命令行提示符)和辅助提示符 l PATH:当前用户的可执行文件搜索路径 l LANG:程序应该使用的默认语言 位置变量:表示为 $n,n为1~9之间的数字 当用户输入的位置参数超过9个时,位置变量 $9 将自动包含最后部分的所有字符串(即使有空格分隔) 例如当执行“service network restart”命令行时,第1个位置参数用“$1”表示,对应的值为“network”,第2个位置参数用“$2”表示,对应的值为“restart” 预定义变量: $#:表示命令行中位置参数的数量 $*:表示所有位置参数的内容 $?:表示命令执行后返回的状态,用于检查上一个命令的执行是否正确,为0表示执行正确,非0表示执行错误 $$:表示当前进程的进程号 $!:表示后台运行的最后一个进程的进程号 $0:表示当前执行的进程的进程名 运行shell脚本:有三种执行shell脚本的方式 (1)sh /路径/脚本名,不需要为脚本添加x权限。表示激活一个子shell去执行脚本 (2)/路径/脚本名,以绝对路径的方式运行脚本,需要为脚本添加x权限(chmod u+x filename)。即将脚本当成一个可执行的文件去执行。如果该脚本已在$PATH中,则不需要指定路径。同样,系统会为该脚本激活一个子shell。 (3). /路径/脚本名,不需要为脚本添加x权限,系统不会开启新的shell环境 条件测试操作: test命令 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值 格式:test 条件表达式或[ 条件表达式 ] 测试文件状态:格式:[ 操作符 文件或目录 ] 常用的测试操作符: · -d:测试是否为目录(Directory) · -e:测试目录或文件是否存在(Exist) · -f:测试是否为文件(File) · -r:测试当前用户是否有权限读取(Read) · -w:测试当前用户是否有权限写入(Write) · -x:测试当前用户是否可执行(Excute)该文件 · -L:测试是否为符号连接(Link)文件 · -s:测试文件大小是否大于0 整数值比较:格式:[ 整数1 操作符 整数2 ] 常用的测试操作符: · -eq:等于(Equal) · -ne:不等于(Not Equal) · -gt:大于(Greater Than) · -lt:小于(Lesser Than) · -le:小于或等于(Lesser or Equal) · -ge:大于或等于(Greater or Equal) 字符串比较:格式:[ 字符串1 = 字符串2 ]或[ 字符串1 != 字符串2 ]或[ -z 字符串 ] 常用的测试操作符: · =:字符串内容相同 · !=:字符串内容不同,! 号表示相反的意思 · -z:字符串内容为空 · -n:判断变量是否有值 如[ -n “$var” ] && echo “yes” 逻辑测试:格式:[ 表达式1 ] 操作符 [ 表达式2 ] ... 常用的测试操作符 · -a或&&:逻辑与,“而且”的意思,前后两个表达式都成立时整个测试结果才为真,否则为假 · -o或||:逻辑或,“或者”的意思,操作符两边至少一个为真时,结果为真,否则结果为假 · !:逻辑否,当指定的条件不成立时,返回结果为真 if条件语句: 单分支格式:当“条件成立”时执行相应的操作 if 条件测试命令 then 命令序列 fi 双分支格式:当“条件成立”、“条件不成立”时执行不同操作 if 条件测试命令 then 命令序列1 else 命令序列2 fi 多重分支格式:针对多个条件执行不同操作 if 条件测试命令1 ; then 命令序列1 elif 条件测试命令2 ; then 命令序列2 elif ... else 命令序列n fi 嵌套格式: if 条件测试命令1 ; then 命令序列1 if 条件测试命令2 ; then 命令序列2 else 命令序列3 fi fi case分支语句:根据变量的不同取值,分别执行不同的命令操作 case 变量值 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;;   …… * ) 默认执行的命令序列 esac for循环语句:根据变量的不同取值,重复执行一组命令操作 for 变量名 in 取值列表 do 命令序列 done for语句第一次执行时首先将列表中的第一个取值赋给该变量,然后执行do后边的命令序列 然后再将列表中的第二个取值赋给该变量 然后执行do后边的命令序列 如此循环,直到取值列表中的所有值都已经用完 ,最后将跳至done语句表示结束循环 编写shell脚本,检查系统中新增加的带有suid或sgid位权限的程序文件 在系统处于“干净”状态时,用find命令建立合法suid/sgid文件列表 建一个脚本文件,与sfilelist比较 其上grep命令的”-F”选项表示在查找时将一整行内容作为字符串进行匹配 While循环语句:重复测试指定的条件,只要条件成立则反复执行对应的命令操作 while 命令或表达式 do 命令列表 done 首先通过while判断条件测试命令的返回状态值是否为0(条件成立),【注:如果条件写为 true ,则条件始终成立】 如果是,则执行do后边的命令序列, 然后返回到while再次进行条件测试并判断返回状态值, 如果条件仍然成立,则继续执行do后边的命令序列, 然后返回到while重复条件测试……如此循环,直到所测试的条件不成立时,将跳转到done语句表示结束循环 until循环语句:until语句根据条件执行重复操作 until 条件测试命令 do 命令序列 done until在测试条件为假(非0)时执行循环,条件为真时(0)退出循环,正好与while循环相反 select语句:无限循环,直到遇到退出循环的命令(exit、break)或键盘送来的ctrl+c才退出循环。每次循环都要求用户从数组中为变量选取一个值。用户可以从一组不同的值中进行选择 三、使用sudo提升用户的执行权限 sudo只需要预先在/etc/sudoers配置文件中进行授权,即可以允许特定用户以超级用户(root)或其他普通用户的身份执行命令,而该用户不需要知道root用户或其他用户的密码。若未指定目标用户,默认将视为root用户 格式:sudo [-u 用户名] 命令操作 1.普通用户使用sudo执行命令时会要求提供自己的密码进行验证; 2.实际上,sudo机制的作用主要在于 —— 能够允许经过授权的个别普通用户以root权限执行一些授权使用的管理命令 而需要某个普通用户以另一个普通用户权限执行命令时,一般不建议使用sudo机制,否则容易造成帐号冒用等问题 root用户默认可以使用sudo命令以任何用户身份执行任何命令,但是其他用户需要使用sudo执行命令时,必须经过管理员的授权设置 sudo的配置文件: 配置文件:/etc/sudoers 作用是授权哪些用户可以通过sudo方式执行哪些命令 2种方法都可以编辑sudoers文件 visudo 或vi /etc/sudoers ,使用vi命令编辑,则在保存文件时需要使用w!,否则系统会提示文件只读而拒绝保存 在sudoers文件中的基本配置格式: 用户 主机名列表=命令程序列表 其中主要包括以下三部分: 用户:授权指定的用户,可以使用”%组名“的形式同时为一个组的用户授予权限 主机名列表:指的是本机的不同名称,而不是远程登录的客户机,因此一般均使用”localhost”或当前的主机名即可。 命令列表部分可以用逗号分隔多条命令,每条命令建议都使用绝对路径 例如: 例1:lisi 主机名=/sbin/ifdown,/sbin/ifup 例2:创建一个名为tech的组,并将lisi,zhangsan等用户加入该组 #groupadd tech #gpasswd -M lisi,zhangsan tech 在/etc/sudoers文件添加如下授权 %tech 主机名=/usr/sbin/useradd,/usr/bin/passwd 设置命令列表时可以使用通配符”*“,也可以使用感叹号”!”表示取反的意思,“NOPASSWD”表示不需要验证用户的密码 例如:%tech 主机名=(ALL) NOPASSWD:/usr/sbin/useradd,/usr/bin/passwd 例如:lisi 主机名=(ALL) NOPASSWD:/sbin/*,!/sbin/ifdown,!/sbin/ifdown 例如:%ittech 主机名=(ALL) NOPASSWD:/usr/sbin/user*,/usr/bin/passwd,!/usr/sbin/user* root,!/usr/bin/passwd root 用户执行授权命令时,只需要在前面添加sudo即可 如:$sudo /usr/bin/passwd zhangsan 使用sudo -l 可以查看当前用户被授权使用的sudo命令。 在sudoers配置文件中可以为用户、主机名列表、命令程序列表配置项定义别名(别名必须大写) Cmnd_Alias USERADM = /usr/sbin/useradd,/usr/sbin/userdel,/usr/sbin/usermod %managers svr2=USERADM 为sudo启用日志记录:所有用户通过sudo执行每一条命令,均以日志记录的形式写入文件/var/log/sudo中 打开/etc/sudoers,添加: Defaults logfile = “/var/log/sudo” 修改/etc/rsyslog.conf文件,添加如下行 Local2.debug /var/log/sudo 重启rsyslog服务 四、利用GnuPG加密文件 gpg是pgp加密软件的免费版本,由Gnu工程开发,不存在任何专利或许可问题。它符合RFC2440号文档所定义的OpenPGP标准。 GnuPG是一个用来进行非对称加密的免费软件。先说说什么是对称加密。传统的加密手段往往是使用同一个密码进行加密和解密。例如你加密时用的密码是“abc”,则解密时也要使用“abc”才行。这样就存在一个问题,你不能够把一段加密信息发送给你的朋友。试想,如果采用这种加密方式把信息发送给你的朋友时,你的朋友必须要知道你的密码才能把你的信息解密出来。但你如何保证你的朋友是绝对可靠的呢?也就是说,如果你的朋友把你的密码告诉了别人,你的密码就不再安全了。    非对称加密采用的是另一种思想。它会给你产生两个密钥,一个称为“公钥”,另一个称为“私钥”。公钥是可以公开的,你尽管把它传给别人;私钥你一定要保管好不让其他任何人知道。当某人得到你的公钥后,他就可以给你发送加密信息了。具体来说,他把他要发给你的信息用你的公钥加密后发给你,加密的信息只能用你的私钥去解密。这样,因为世界上除了你以外没有别人知道你的私钥,所以即使别人看到发送给你的加密信息他也无法解密,甚至连发送者本人也不行。因为他不知道你的私钥。简单说来,就是用公钥去加密;用对应的私钥去解密。想给谁发送加密信息,首先要得到他的公钥。 现在B要与A进行通信,B如何将A需要的文件加密传输呢?过程如下: 第一步:A生成一对密钥,即公钥(Public key)与私钥(Private key)。 第二步:A将其公钥发给需要传输加密文件给他的B,即现在B拥有了A给他的公钥,当然,既然称为公钥,那么,这是可以公开的,公钥可以给很多人共享,本身没有强调保密。 第三步:B利用A给他的公钥将具有安全保密要求的文件进行加密,将加密后的文件传输给A,因为进行了加密,所以这是安全文件,第三方即使得到了此文件,也无法打开。 第四步:A利用自己所专有的私钥,对B传输过来的加密文件进行解密操作,还原文件真面目,就可以正常浏览访问了。 下面介绍使用gpg的步骤: 第一步:在A电脑上,执行如下命令创建密钥对: #gpg --gen-key gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. 请选择您要使用的密钥种类:    (1) DSA 和 ElGamal (默认)    (2) DSA (仅用于签名)    (5) RSA (仅用于签名) 您的选择? 1   ―――只有1可以用于加密,其他种类只能用于签名 DSA 密钥对会有 1024 位。 ELG-E 密钥长度应在 1024 位与 4096 位之间。 您想要用多大的密钥尺寸?(2048)   ―――选择密码的位数,位数越大,越安全,但速度越慢 您所要求的密钥尺寸是 2048 位 请设定这把密钥的有效期限。          0 = 密钥永不过期         = 密钥在 n 天后过期       w = 密钥在 n 周后过期       m = 密钥在 n 月后过期       y = 密钥在 n 年后过期 密钥的有效期限是?(0) 0   ―――根据实际情况选择密钥期限 密钥永远不会过期 以上正确吗?(y/n)y  ←确认 您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组合 成用户标识,如下所示:     “Heinrich Heine (Der Dichter) ” 真实姓名:chenyinghong   ―――请填入真实姓名,后面会用到 电子邮件地址:bpcyh1@sina.com ―――邮件作为标记之一,不能重复 注释:Use for GPG Encrypt   ―――仅是注释而已 您选定了这个用户标识:     “chenyinghong (Use for GPG Encrypt) ” 更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?O  ←输入“O”确认 您需要一个密码来保护您的私钥。   ―――输入两次用于访问私钥的密码,紧记,不能公开或丢失 我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的基数。 ++++++++++...++++++++++..++++++++++.+++++.++++++++++.+++++.++++++++++..++++++++++.++++++++++++++++++++.++++++++++++++++++++.++++++++++++++++++++>++++++++++...........................+++++ 随机字节不够多。请再做一些其他的琐事,以使操作系统能搜集到更多的基数! (还需要274字节)  ←运行一些的程序,以便在内存中获得更多随机数 我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的基数。 +++++++++++++++++++++++++.+++++.+++++.++++++++++.++++++++++.+++++.+++++..+++++.+++++.+++++.++++++++++.+++++.+++++++++++++++++++++++++.+++++++++++++++.+++++.+++++>+++++.+++++>+++++........>+++++...............<+++++............................>.+++++...................................................................................................<+++++..+++++^^^ gpg: 密钥 A3942296 被标记为绝对信任   ―――密钥ID 公钥和私钥已经生成并经签名。 gpg: 正在检查信任度数据库 gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型 gpg: 深度:0 有效性:  2 已签名:  0 信任度:0-,0q,0n,0m,0f,2u pub   1024D/A3942296 2008-12-19 密钥指纹 = E95E 1F77 6C4E 33BD 740C  19AB EEF9 A67E A394 2296 uid                  “chenyinghong (Use for GPG Encrypt) ” sub   2048g/911E677B 2008-12-19 完成后,会产生一对密钥,要记下key ID,如果没有记下,也可以通过命令:#gpg - -list-keys显示当前的这对密钥,其中就可以找到你生产的key ID 第二步:在A上导出相应的公钥,其命令如下:   #gpg --export - -armor key-ID > filename.key    这个导出的文件filename.key名称,可以根据自己的喜好来取名。这也就是我们在前面所讲到的公钥了,是可以公开发布共享的。--amor开关表示以ASCII格式输出内容 第三步:将这个公钥传送给其他人,如:B电脑,方式很多的,你可以用你的移动U盘来复制,也可以放在你的FTP中让B来下载,方式很多的。 第四步:在B电脑上,将公钥变为本地用于加密的密钥,其命令如下:  #gpg  - -import filename.key 这个文件就是A电脑上生成的公钥文件 第五步:在B电脑上,以用户root来进行文件的加密操作,其命令如下:  #gpg  - -encrypt - -armor -r key-ID file file即是被加密的文件(事先创建好),该命令完成后,会产生一个以.asc结尾的同名的新的文件file.asc,这个文件就是加密后的文件,如果没有解密,打开就是密文,看不到明文的。-r选项指定加密公钥,可以是key-id(通过gpg --list-keys查看)也可以是在创建密钥时所写的真实姓名。 第六步:将此密文file.asc传给A,可以是移动U盘来复制,也可以是邮件或FTP等等方式。 第七步:A接收到这个密文file.asc后,在未解密前,看到了也是密文,因此要进行解密操作,因为A有私钥,就是他能够解密了,其操作如下: #gpg - -decrypt file.asc > myfile 将file.asc文件解密为myfile文件,这是一个明文文件。现在A就可以正常浏览文件了。 五、网络监测 1、检测本地主机打开的端口:netstat 功能说明:Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,查看网络连接状态、路由表、接口统计等信息,一般用于检验本机各端口的网络连接情况。 格式:netstat [选项] 常用选项如下: -a 显示当前主机中所有活动的网络连接信息(包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接),例如查看是否被攻击或中木马 -n 以数字的形式显示相关的主机地址、端口等信息 -r 显示路由表信息 -l 显示处于监听状态的网络连接及端口信息 -t 查看TCP协议相关的信息 -u 查看UDP协议相关的信息 -p 显示与网络连接相关联的进程号、进程名称信息(需要root权限) -e 显示网络其他相关信息。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量 -s 显示网络工作信息统计表,能够按照各个协议分别显示其统计数据 常用组合,查看出正在连接和网络信息 #netstat –ntulpa #netstat -nltp 查看当前tcp监听端口 #netstat -nltup |grep :80 或 netstat -nltup |grep httpd #netstat -nltup |grep avahi Avahi是zeroconf 协议的实现。它可以在没有 DNS 服务的局域网里发现基于 zeroconf 协议的设备和服务。除非你有兼容的设备或使用zeroconf 协议的服务,否则应该关闭它。 2、检测远程主机打开的端口:nmap 网络探测和安全扫描工具 格式:Nmap [ 扫描类型 ... ] [ 通用选项 ] { 扫描目标说明 } 描述 :Nmap(Network Mapper)是一款开放源代码的网络探测和安全审核工具。它用于快速扫描一个网络和一台主机开放的端口,还能使用TCP/IP协议栈特征探测远程主机的操作系统类型。nmap支持很多扫描技术,例如:UDP、TCP connect()、TCP SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、SYN扫描和null扫描。 扫描类型: -sT TCP connect()扫描,这是最基本的TCP扫描方式,用来建立一个TCP连接,如果成功则认为目标端口正在监听,否则认为目标端口没有监听程序。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。 -sS TCP同步扫描(TCP SYN),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口没有监听程序。所以这项技术通常称为半开扫描(half-open)。这项技术最大的好处是,很少有系统能够把这记入系统日志。不过,你需要root权限来定制SYN数据包。 -sF,-sX,-sN 秘密FIN数据包扫描、圣诞树(Xmas Tree)、空(Null)扫描模式。这些扫描方式的理论依据是:关闭的端口需要对你的探测包回应RST包,而打开的端口必需忽略有问题的包,通过这种扫描,可间接用于检测防火墙的健壮性。 -sP ping扫描,用ping方式检查网络上哪些主机正在运行。当主机阻塞ICMP echo请求包是ping扫描是无效的。nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。 -sU UDP扫描,如果你想知道在某台主机上提供哪些UDP服务,可以使用此选项。 -sA ACK扫描,这项高级的扫描方法通常可以用来穿过防火墙。 -sW 滑动窗口扫描,非常类似于ACK的扫描。 -sR RPC扫描,和其它不同的端口扫描方法结合使用。 -b FTP反弹攻击(bounce attack),连接到防火墙后面的一台FTP服务器做代理,接着进行端口扫描。 通用选项: -n 不做反向DNS解析,以加快扫描速度 -P0 在扫描之前,不ping主机;有些网络防火墙可能禁止ICMP请求包,使用这种扫描类型可以跳过ping测试 -PT 扫描之前,使用TCP ping确定哪些主机正在运行。 -PS 对于root用户,这个选项让nmap使用SYN包而不是ACK包来对目标主机进行扫描。 -PI 设置这个选项,让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行。 -PB 这是默认的ping扫描选项。它使用ACK(-PT)和ICMP(-PI)两种扫描类型并行扫描。如果防火墙能够过滤其中一种包,使用这种方法,你就能够穿过防火墙。 -O 这个选项激活对TCP/IP指纹特征(fingerprinting)的扫描,获得远程主机的标志,也就是操作系统类型。 -I 打开nmap的反向标志扫描功能。 -f  使用碎片IP数据包发送SYN、FIN、XMAS、NULL。包增加包过滤、入侵检测系统的难度,使其无法知道你的企图。 -v 强烈推荐使用这个选项,它会给出扫描过程中的详细信息。 -S 在一些情况下,nmap可能无法确定你的源地址(nmap会告诉你)。在这种情况使用这个选项给出你的IP地址。 -g port 设置扫描的源端口。一些天真的防火墙和包过滤器的规则集允许源端口为DNS(53)或者FTP-DATA(20)的包通过和实现连接。显然,如果攻击者把源端口修改为20或者53,就可以摧毁防火墙的防护。 -oN 把扫描结果重定向到一个可读的文件logfilename中。 -oS 扫描结果输出到标准输出。 扫描目标: 目标地址 可以为IP地址,CIRD地址等。如192.168.1.2,222.247.54.5/24 -iL filename 从filename文件中读取扫描的目标。 -iR 让nmap自己随机挑选主机进行扫描。 -p 端口 这个选项让你选择要进行扫描的端口号的范围。可使用逗号分隔多个端口,减号连接一个端口范围,在列表前指定T:表示TCP端口,U:表示UDP端口 -exclude 排除指定主机。 -excludefile 排除指定文件中的主机。 在RHEL6系统中,可以直接使用系统光盘中的rpm包进行安装(nmap) nmap运行通常会得到被扫描主机端口的列表。nmap会给出端口的服务名、端口号、状态和协议等信息。每个端口的状态有:open、filtered、unfiltered。open状态意味着目标主机能够在这个端口使用accept()系统调用接受连接。filtered状态表示:防火墙、包过滤和其它的网络安全软件掩盖了这个端口,禁止nmap探测其是否打开。unfiltered表示:这个端口关闭,并且没有防火墙/包过滤软件来隔离nmap的探测企图。   根据使用的功能选项,nmap也可以报告远程主机的下列特征:使用的操作系统、TCP序列、运行绑定到每个端口上的应用程序的用户名、DNS名、主机地址是否是欺骗地址、以及其它一些东西。 例如1:探测指定网段是否有FTP服务的主机,不做DNS反向解析 例如2:探测指定服务器是否启有特定端口的服务 例如3:使用TCP连接扫描探测指定服务器,即使无法ping通也仍然继续探测 例如4:探测指定服务器的操作系统类型 例如5:探测局域网段中各主机开启了哪些服务 使如6:探测192.168.0.0和172.16.0.0/16网段中有哪些主机在运行 六:捕获、分析数据包 1、tcpdump命令: TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not等逻辑语句来帮助你去掉无用的信息。 tcpdump采用命令行方式,它的命令格式为: tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ][ -i 网络接口 ] [ -r 文件名] [ -s snaplen ][ -T 类型 ] [ -w 文件名 ] [表达式 ]   1. tcpdump的选项介绍   -a   将网络地址和广播地址转变成名字;   -d   将匹配信息包的代码以人们能够理解的汇编格式给出;   -dd   将匹配信息包的代码以c语言程序段的格式给出;   -ddd  将匹配信息包的代码以十进制的形式给出;   -e   在输出行打印出数据链路层的头部信息;   -f   将外部的Internet地址以数字的形式打印出来;   -l   使标准输出变为缓冲行形式; -nn   直接以 IP 及 Port Number 显示,而非主机名与服务名称 -s <数据包大小> 设置每个数据包的大小   -t   在输出的每一行不打印时间戳;   -v   输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;   -vv   输出详细的报文信息;   -c   在收到指定的包的数目后,tcpdump就会停止;   -F   从指定的文件中读取表达式,忽略其它的表达式;   -i   指定监听的网络接口;   -r   从指定的文件中读取包(这些包一般通过-w选项产生);   -w   直接将包写入文件中,并不分析和打印出来;   -T   将监听到的包直接解释为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议;) tcpdump的表达式介绍   表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。   在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.   第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,   这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.   48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。   第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。   其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。 除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算是'or' ,'||';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。   (1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:   #tcpdump host 210.27.48.1   (2) 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用   括号时,一定要   #tcpdump host 210.27.48.1 and  (210.27.48.2 or 210.27.48.3 )   (3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:   #tcpdump ip host 210.27.48.1 and ! 210.27.48.2   (4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:   #tcpdump tcp port 23 host 210.27.48.1

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享文档获得金币 ]
1 人已下载

下载文档

相关文档