Chinaunix首页 | 论坛 | 博客
  • 博客访问: 819490
  • 博文数量: 94
  • 博客积分: 1767
  • 博客等级: 上尉
  • 技术积分: 1168
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-13 23:16
个人简介

ha

文章分类

全部博文(94)

文章存档

2014年(2)

2013年(17)

2012年(6)

2011年(15)

2010年(23)

2009年(23)

2008年(8)

我的朋友

分类: LINUX

2009-12-22 10:31:30

首先是遍历文件系统的C程序a.c:

     #include

        #include

 

        int list(const char *name, const struct stat *status, int type)

        {

                if(type == FTW_NS)

                        return 0;

 

                printf("%s 0%3o\n", name, status->st_mode & 07777);

                return 0;

        }

 

        int main(int argc, char *argv[])

        {

                if(argc == 1)

                        ftw(".", list, 1);

                else

                        ftw(argv[1], list, 1);

                exit(0);

        }

 

编译成a.out可执行文件,我这里不是一次遍历整个根(/)目录,因为不是所有目录的权限都需要改,比如说/proc目录、再比如为了装oracle建的/u01目录。我只扫描我认为需要修改权限的目录,如下执行:./a.out  /bin  >bin.txt … 每个目录的文件及权限保存在独立的文件中,下面是我新装as 4系统下/bin目录下的文件权限(bin.txt的部分内容):

    /bin 0755

     /bin/traceroute6 04755

     /bin/setserial 0755

     /bin/rview 0755

     /bin/touch 0755

     /bin/awk 0755

     /bin/mt 0755

     /bin/ash 0755

     … …

 

然后写个更改权限的简单脚本chgperm.sh:

    #!/bin/sh

 

    if [ $# != 1 ]

    then

            echo Usage : $0 \

            exit

    fi

 

    PERMFILE=$1

 

    cat $PERMFILE | \

    while read LINE

    do

            FILE=`echo $LINE | awk '{print $1}'`

            PERM=`echo $LINE | awk '{print $2}'`

            chmod $PERM $FILE

    done

 

    echo change perm finished!

 

如下执行即可:

sh  chgperm.sh  bin.txt

… …

 

如果系统中有getfacl 的命令的话,脚本都不用写了,直接用getfacl 获取正常系统的文件权限,到出问题的机器上用 setfacl 恢复。

在一台别的系统上

getfacl -R / > acl.bak

把acl.bak的文件copy过来

setfacl --restore acl.bak

阅读(4257) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~