Redhat9.0 patch ACL

目的:

主要为方便Linux CVS Server使用OS的来进行权限管理, 由于发现Linux 传统的权限管理不太方便, 由于考虑给Redhat 9.0添加 ACL(Access Control List)补丁, 以便可以方便地对文件或目录进行权限管理.


一、环境:
  操作系统: Redhat Linux 9.0
  内核版本:2.4.20-8

二、安装步骤:


1. 下载

1.1 下载Linux内核源码
http://www.kernel.org/下载2.4.29版到/root,文件名为: linux-2.4.29.tar.gz

1.2 下载ACL
http://acl.bestbits.at/download.html下载ACL patch for Kernel 2.4.29 到/root,文件名为:ea+acl+nfsacl+sec-2.4.29-0.8.73.diff.gz


2. 拷贝

2.1 拷贝内核源码
    使用tar -zxvf linux-2.4.29.tar.gz解压Kernel 2.4.29内核源码到/usr/src
    /root> cd /usr/src
    /usr/src>  rm -f  linux-2.4
    /usr/src>  ln  -s  /usr/src/linux-2.4.29  linux-2.4
   
2.2 patch ACL
    /usr/src> cd  linux-2.4
    /usr/src/linux-2.4>  zcat  /root/ea+acl+nfsacl+sec-2.4.29-0.8.73.diff.gz | patch -p1


3. 编译(make)内核

3.1 编译环境准备

3.1.1 清理工作环境
    清除原先此目录下残留的.config和.o(object文件)
    /usr/src/linux-2.4>   make mrproper       

3.1.2 配置make 环境  

3.1.2.1 获取原来Redhat Kernel 2.4.20-8的config文件
    /usr/src/linux-2.4>  cp /boot/config-2.4.20-8 .

3.1.2.2  设置kernel 2.4.29
   运行 /usr/src/linux-2.4> make menuconfig
   在菜单中选 Load config,选从文件 config-2.4.20-8 装入配置,然后再全选 File System 中的ext2和ext3,其他选项不变

3.2 编译

    3.2.1 检查依赖  (一到两分钟)
    #读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要 
    /usr/src/linux-2.4>  make dep

    3.2.2 生成核心   (15分钟左右)
  
    3.2.2.1 生成核心
    #清除不必要的文件 (少于一分钟) 
    /usr/src/linux-2.4>  make clean

    #编译内核, 并在 ./arch/i386/boot下生成压缩的内核文件bzImage
    /usr/src/linux-2.4>  make bzImage

    3.2.2.2 拷贝核心到/boot
    /usr/src/linux-2.4>  cp  arch/i386/boot/bzImage /boot/vmlinuz-2.4.29
    /usr/src/linux-2.4>  cp  System.map /boot/System.map-2.4.29

    3.2.3 生成模块 (耗时1小时左右)

    3.2.3.1 生成模块
    #完成删除前面步骤留下的文件,以避免出现一些错误 
    /usr/src/linux-2.4>  make clean

    #生成相应的模块, 时间很长
    /usr/src/linux-2.4>  make modules
   
    3.2.3.2 拷贝模块到需要的目录
    #把模块拷贝到需要的目录 /lib/modules/2.4.29
    /usr/src/linux-2.4>  make modules_install  
   
    3.2.3.3 生成模块依赖关系
    #生成模块间的依赖关系,启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块
    /usr/src/linux-2.4>   depmod -a    

    3.2.4 制作初始化镜像 (initrd-version.img)
          如果你用的是SCSI硬盘并且采用的是ext3分区格式的话,请注意,您一定要制作initrd.img(因为SCSI卡的驱动包括在这个里边),里边主要有一些驱动,因为放在内核中就显得过大,所以编译进initrd.img,在启动后释放,如果你使用的是IDE硬盘,您可以跳过这一步。
     /usr/src/linux-2.4>    mkinitrd  /boot/initrd-2.4.29.img  2.4.29


4.  配置grub

4.1 修改/boot下的两个链接System.map和vmlinuz,使其指向新内核的文件
    System.map文件是当前正在运行的kernel的fuctions的说明,如果您编译内核后不更新System.map,如果碰到问题,Trouble shooting就很困难了。
    /boot>   rm  -f  System.map vmlinuz
    /boot>   ln  -s  vmlinuz-2.4.29  vmlinuz
    /boot>   ln  -s   System.map-2.4.29  System.map
    /boot>   mkinitrd  initrd-2.4.29.img  2.4.29

4.2 配置启动菜单
    /boot>  vi  /boot/grub/menu.lst

    default=0
    timeout=10
    splashimage=(hd0,0)/boot/grub/splash.xpm.gz
    title Red Hat Linux (2.4.20-8)
    root (hd0,0)
    kernel /boot/vmlinuz-2.4.20-8 ro root=/dev/hda1
    initrd /boot/initrd-2.4.20-8.img
   
#以下是我添加的
    title Red Hat Linux (2.4.29)
    root (hd0,0)
#下面行指定kernel 的路径,后面的ro 表示是readonly, root=/dev/hda1是指定根的路径
    kernel /boot/vmlinuz-2.4.29 ro root=/dev/hda1
#  下面行指定制作的启动初始化镜像
    initrd /boot/initrd-2.4.29.img

    title Red Hat Linux (2.4.20-8)开始是原先老版本的东东, 不要动,因为你还不知道新内核能不能用

    其中 root路径可以使用 df 确认,也可以从menu.lst前面有Redhat自动产生的对照。

5. 安装辅助工具
   使用rpm -qa 查看下面的rpm包是否安装, 如果没有安装,可以从Redhat9.0安装光盘安装。(rpm -Uhv xxxxx.rpm)
   attr-2.0.10-0.i386.rpm
   attr-devel-2.0.10-0.i386.rpm
   libattr-2.0.10-0.i386.rpm
   acl-2.0.18-0.i386.rpm
   acl-devel-2.0.18-0.i386.rpm
   libacl-2.0.18-0.i386.rpm
   fileutils-4.1.8acl-65.5.i386.rpm
   e2fsprogs-1.27ea-26.4.i386.rpm
   star-1.5a03-2.src.rpm


6. 安装完成之后的设置

    如果使用EA/ACL内核补丁,内核重新启动之后不会自动打开ACL功能,需要使用acl或者user_xattr选项mount文件系统才能使ACL生效。假设系统的/home目录位于/dev/hda7分区,可以使用如下命令使/home分区支持访问控制列表:

    # mount  -o remount,acl  /dev/hda7


三、EA/ACL的使用方法

1.Linux EA/ACL的语法

 安装了ACL系统之后,系统中的每个对象(文件和目录)都有一个ACL项目控制对这个目标的访问。每个目录之内所有对象的初始访问控制由目录的默认ACL项目决定。

 每个ACL项目由一系列ACL规则组成,这些规则设置单独用户或者一组用户对目标的访问权限,包括:读、写和搜索/执行。每个ACL条目被冒号分为三个部分:规则标签类型(tag type)、规则限制符(qualifier)和访问权限(access permission)。规则标签类型包括以下关键词:

user–以user关键词开头的ACL规则设置对象拥有者或者其他用户对对象的访问权限。例如:
        user::rw-                表示对象拥有者的访问权限;
        user:test:r–           表示用户test拥有读对象的权限。

group–设定某个用户组对对象的访问权限。例如:
        group::rw-                 表示用户所在用户组拥有读写权限;
        group:testgroup:r–   表示属于testgroup组的用户拥有读权限。

mask–以mask关键词开头的ACL规则用来限制赋予用户的最大访问权限,对象拥有者除外。例如:
        user::rw-
        user:test:rw-                  #有效的是user:test:r–
        group::rw-                      #有效的是group:r–
        group:testgroup::rw-     #有效的是group:testgroup:r–
        mask::r–
        other::r–

other–指定其他用户对对象的访问权限。


 每条ACL规则的第二部分是包含用户或者用户组识别符。用户识别符可以是用户名或者十进制的用户ID号;用户组识别符可以是用户组名或者十进制的用户组ID号。空白表示对象的拥有者或者拥有者所在的用户组。

 第三部分是对对象的访问权限。读、写和搜索(目录)/执行(文件)分别由r、w和x代表,和通常使用的权限表示方法完全相同。对应的权限被-代替表示不具有此权限。

 除了以上的关键词之外,还有一个只用于目录的关键词default。由default关键词修饰的ACL条目表示目录下所有子目录和文件的默认访问控制列表。

 为了方便,还有一种简化的ACL规则表示方式。user可以用u代替;g表示group;m表示mask;o表示other。简化方式的访问控制列表,条目之间使用逗号分割。这种表示方式为命令行设置访问控制列表提供了很大的便利。例如:

    /root> setfacl -m u::rw-,u:floatboat:rw-,g::r–,g:nixe0n:rw-,m::r–,o::r– foo.txt


2.访问控制列表的维护

 ACL生效之后,在使用ls -l命令罗列文件时,你会看到具有访问控制规则的目录或者文件的权限域会有一个加号(+)。例如,在打开ACL功能之前的文件如下所示:

    /root> ls -l
        -rw-rw-r–    1 test   test      11331 09-12 20:02 exam.txt

 使ACL功能生效之后,ls -l命令得到如下结果:

    /root>  ls -l
        -rw-rw-r–+   1 test  test      11331 09-12 20:02 exam.txt

2.1.setfacl

 setfacl工具设置文件和目录的访问控制列表,支持对ACL规则的设置(-s/-S)、修改(-m/-M)和删除(-x/-X)。我们可以使用自己喜欢的编辑器按照ACL语法事先编写好某个对象的访问控制列表,然后使用大写的命令行选项进行设置或者修改操作;我们也可以使用小写命令行选项直接修改对象的访问控制规则,例如:

    /root> setfacl -m -m u::rw-,u:floatboat:rw-,g::r–  exam.txt


2.2.getfacl

 ls命令能够获得某个对象的访问权限,与之类似,getfacl命令可以获得文件和目录的访问控制列表规则,其输出格式如下所示:

    /root>  getfacl  doc
        # file: doc/
        # owner: nixe0n
        # group: linuxaid
        user::rwx
        user:floatboat:rwx              
        group::rwx                      
        group:cool:r-x
        mask:r-x
        other:r-x
        default:user::rwx
        default:user:flatboat:rwx       
        default:group::r-x
        default:mask:r-x
        default:other:—



评论

该日志第一篇评论

发表评论

评论也有版权!