Linux与安全基础

Linux基础

  1. /etc/passwd 和 /etc/shadows 详解
    • passwd文件举例
      root:x:0:0:root:/root:/bin/bash
      daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
      bin:x:2:2:bin:/bin:/usr/sbin/nologin
      sys:x:3:3:sys:/dev:/usr/sbin/nologin
      

    对应字段

    • shadow文件
      root:$6$X9iEgIhv$wGtrUhjiNRp72LgCTzC1qdi.myfSU9S5nqsfr.m1KInUFoeOUBN73AmMy5sTe91biJLdHgsoimZQzeD9EvGlv1:16769:0:99999:7:::
      daemon:*:16547:0:99999:7:::
      bin:*:16547:0:99999:7:::
      sys:*:16547:0:99999:7:::
      sync:*:16547:0:99999:7:::
      games:*:16547:0:99999:7:::
      man:*:16547:0:99999:7:::
      

  2. 软连接

    • 文件分为:
      用户数据(user data):即文件数据块(data block),记录文件真实内容的地方
      元数据(metadata):文件的附加属性,如文件大小、创建时间、所有者信息。其中的`inode`号即为文件的唯一标志
      

    • 硬链接(hard link):同一个文件使用了多个别名,即一个inode号对应多个文件名,可由link或ln创建
      文件有相同的 inode 及 data block;
      只能对已存在的文件进行创建;
      不能交叉文件系统进行硬链接的创建;
      不能对目录进行创建,只可对文件创建;
      删除一个硬链接文件并不影响其他有相同 inode 号的文件。
      
    • 软链接(soft link or symbolic link):若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软链接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块
      软链接有自己的文件属性及权限等;
      可对不存在的文件或目录创建软链接;
      软链接可交叉文件系统;
      软链接可对文件或目录创建;
      创建软链接时,链接计数 i_nlink 不会增加;
      删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
      
  3. shell
    • 新浪的一道笔试题:
      找出web日志中响应时间小于0.03的客户端IP并去重:
      201.158.69.116 - - [03/Jan/2013:21:17:20 -0600] "GET /api/insert?test=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" "114.229.23.58" "0.015"
      201.158.69.116 - - [03/Jan/2013:21:17:20 -0600] "GET /api/insert?test=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" "114.229.23.58" "0.002"
      201.158.69.116 - - [03/Jan/2013:21:17:20 -0600] "GET /api/insert?test=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" "114.229.23.58" "0.039"
      201.158.69.118 - - [03/Jan/2013:21:17:20 -0600] "GET /api/insert?test=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" "114.229.23.58" "0.015"
      201.158.69.119 - - [03/Jan/2013:21:17:20 -0600] "GET /api/insert?test=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" "114.229.23.58" "0.015"
      201.158.69.119 - - [03/Jan/2013:21:17:20 -0600] "GET /api/insert?test=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" "114.229.23.58" "0.030"
      

      解析:

      cat log | awk '{if($NF<0.03) print $1}' | sort -u     //这样写的话最后一位是str类型,无法做数值比较,应该是扑街了
      cat log | awk 'BEGIN{FS="\""} $8 > 0.03 {print $1}' | awk '{print $1}'      //大神指导我的第一版本,以"\""为分隔符
      cat log | awk '{if(strtonum(substr($NF,2,5))<0.03) print $1}' | sort -u     //大神指导的第二版本,很优雅啦~
      
  4. 进程与线程的区别
    • 进程是指程序执行时的一个实例。线程是进程的一个实体。
    • 进程——资源分配的最小单位;线程——程序执行的最小单位,处理机调度和分配的单位。
    • 进程拥有独立的堆栈空间和数据段,所以每当启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,但是安全性高;线程拥有独立的堆栈空间,但是共享数据段,它们彼此之间使用相同的地址空间,共享大部分数据,比进程更节俭,开销比较小,切换速度也比进程快,效率高,但是一个线程死掉就等于整个进程死掉。
    • 通信机制上面,正因为进程之间互不干扰,相互独立,进程的通信机制相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,而线程由于共享数据段所以通信机制很方便
    • 一个线程可以创建另一个线程。线程是不分父子线程的,一个线程创建另一个线程,尽管第一个线程已经结束,第二个线程还是可以照常运行。
    • 运行在一个进程里的线程共享该进程的整个虚拟地址空间

    同一进程中的线程究竟共享哪些资源

其他

  1. DLL劫持

  2. IPSec:为 IP 数据报提供了高质量的、可互操作的、基于密码学的安全性。特定的通信方之间在 IP 层通过加密与数据源验证等方式,来保证数据报在网络上传输时的私有性、完整性、真实性和防重放。

    私有性(Confidentiality )指对用户数据进行加密保护,用密文的形式传送。
    完整性(Data integrity )指对接收的数据进行验证,以判定报文是否被篡改。
    真实性(Data authentication )指验证数据源,以保证数据来自真实的发送者。
    防重放(Anti-replay )指防止恶意用户通过重复发送捕获到的数据包所进行的攻击,即接收方会拒绝旧的或重复的数据包。