Unix/Linux文件系统安全

  1. 文件系统安全:文件系统安全是Unix/Linux系统安全的核心,文件系统用来控制谁能访问信息以及他们能做什么(认证,授权,就像前面密码学里面提到的AAA技术,当然那个最后一个A还代表一个审计技术)
    1. 文件系统基础,在Unix/Linux系统中,所有的东西都是文件,这个说法早已听说过N次了吧。用户数据是文件,目录是文件,进程是文件,命令是文件,甚至网络连接也是文件
      Unix/Linux系统文件类型:

      1. 正规文件,这个名词起的比较恰当,就是普通的那些文件,比如ASCII文件,二进制数据文件,可执行文件等等
      2. 目录,目录是包含一组其他文件的二进制文件
  • 特殊文件,这个名词起的更恰当,通常就是在/dev文件下面的设备文件,对硬件驱动器进行信息编码
  1. 链接:硬链接,把两个或多个处于同一存储位置的文件名连接起来(像不像链表,结点是文件名,都处于同一个存储位置,就是内存)。软链接(符号链),就是指向其他文件
  2. Sockets,进程间通信使用的特殊文件
  3. 这些不同的文件类型以树的结构进行组织,以root作为树根,这个树中的所有内容统称文件系统,虽然现在很多的Unix系统都是基于许多磁盘和网络的文件系统组成,但是它只为用户提供一个树,树的每一项都由若干属性来描述,包括一个或多个名字、拥有者、分组、一组权限、长度和其他。这些属性被保存在了一个叫做i结点的数据结构中,一个文件系统中每一个i结点都有一个唯一的数字,每个文件有不同的i结点,i结点关注Unix系统所有的文件活动,Unix文件系统安全通过i结点中的3个信息来实现,第一个是UID指明了文件的拥有者,第二个是GID指明了文件所在的分组,第三个是模式,包括了文件的权限设置。当然i结点中还包含了文件大小,文件类型硬链接数目,文件修改时间等一系列文件的基本属性信息等。攻击者篡改文件时,往往修改i结点设置而留下一个足印
  1. 目录结构:还记得网站后台那个基于Debian Linux的目录结构吗,就拿那个来举一个例子
    1. /bin 用户命令的可执行文件,里面就是一大堆终端命令(比如mkdir创建目录)命名的文件,但是都是二进制形式,就好比system32一样
    2. /dev 特殊设备文件
  • /etc 系统执行文件,软件都装在这里吧,就好比windows里面的program file,比如你的ss服务端,是吧
  1. /home 就是用户的起始目录
  2. /lib 引导系统以及root文件系统中运行命令所需的共享库文件
  3. /lost+found 与特定的文件系统断开连接时丢失的文件
  • /mnt 临时安装的文件系统,比如CD-ROM和U盘,如果是U盘的话,需要自己使用命令行来挂载,怪哉之后会在mnt文件夹里面
  • /proc 一个伪文件系统,用来作为到内核数据结构或正在运行的进程的接口(多调试调用很有用)
  1. /sbin 为只被root使用的可执行文件以及那些只需要引导或安装/usr的文件保留
  2. /tmp 临时文件
  3. /usr 为用户和系统命令使用的可执行文件、头文件、共享库、帮助文件、本地程序。里面有一个名为include的文件夹,充满了C++的头文件,里面还有一个lib文件应该放的也是一些共享库文件,还有一个sbin文件
  • /var 里面存放一些数据,比如你的网站wordpress就是放在这里面的,还有一些统计文件和日志文件
  1. 文件权限,文件权限是Unix文件系统安全的关键,Unix文件系统中每一个文件属于一个用户和一个分组,通常一个文件属于创建它的用户和该用户的基本分组。每个文件和目录有3组权限与之相关,一组为文件的拥有者,一组为文件所属分组的成员,一组为其他用户(the world或others),每组权限由3个权限标志位来控制,就是那个rwx位,r可读,w可写,x可执行,刚刚说了一共有3组用户,那么这3组用户就有9个rwx位,再加上一位用来指明文件类型,这就是10个位,这被称为一个模式位,指明文件类型的那一位被放在最前面。放在最前面的文件类型可有如下几种表示方法,p为管道文件,d为目录文件,l为符号连接文件,-为普通文件,s为socket文件,c为字符设备文件,b为块设备文件。排序方式为:文件类型 文件拥有者权限 文件拥有组权限 其他人权限 链接数 所有者ID 所有组ID 文件大小 最后一次修改时间 文件名
    文件的权限还可以用八进制来表述
  2. SUID和SGID:SUID和SGID设置了用户ID和分组ID属性,允许用户以特殊的权限来运行程序,这种程序运行时执行具有文件所有者的权限和文件所在组的权限。如果一个文件被设置了SUID或SGID,会分别表现在所有者或同组用户的可执行位上,也就是RWX位中的X位,其中用s来代替,如果表现在第一个rwx(即文件所有者权限中),那么为SUID,如果设置在了第二个RWX位(所在组权限)中,那么为SGID,在UNIX的设置中,文件权限使用12个二进制位来控制,如果拥有此权限,那么设置为1,否则为0,这12个分别为SGTrwxrwxrwx,只说说SG,后面的前面提到了,S为11位,最后的那个x为0位,第一个S代表SUID,第二个G代表SGID 。SUID程序是为了使普通用户完成一些普通用户权限不能完成的位而设计的,比如用户都会被允许修改自己的密码,但是修改密码是需要root权限的,因此修改密码的程序都会以管理员的权限运行
    如果要查看这些文件的权限的话,可以使用ls -l来显示文件名和特性
  3. Unix文件权限的修改,在Unix系统中可以使用chmod命令来修改文件的权限,chmod语句只能由文件的拥有者或root来运行,chmod有两个变元,第一个是文件的权限,第二个是文件的名字,在权限变元的设计中可以使用绝对模式或者符号模式,绝对模式比如chmod 777 filename通过八进制的权限符来更改文件的权限
    当然,文件权限的修改也可以使用符号模式,符号模式中权限的修改就由一个八进制的数字变为了3个变元,变为了who op permission,其中who指的是用户的分组,其中u代表用户,g代表分组,其他使用0,全部使用a或者ugo。op选项使用+、-、=三个选项来控制,+指的是使得选择的权限加到已存在的文件权限中去,-指的是将其删除,=指的是文件只能拥有这些权限。permission选项使用rwx和SUID和SGID或者粘位n的任一组合。比如在一下的语句中chmod g+r filename 就是向文件filename中,对拥有者所在分组加入读权限。
    与chmod相关的还有chown(用于改变文件的所有权)和chgrp(用于改变所有者分组),命令的格式问chown user filename 出其中chown命令可以一次性改变拥有者和分组,对于拥有者和分组使用.来划分

  1. 创建文件的默认权限,创建一个文件的默认权限可以使用umask命令来设置,其中umask命令的用法为 umask 选项 权限值
首发于我的个人网站: 点击打开链接

你可能感兴趣的:(Unix/Linux文件系统安全)