您的位置:首页 > 运维架构

chmod维护文件权限

2015-09-05 21:58 363 查看
一.说明

Unix-Based操作系统中文件是否可以执行是通过文件本身的属性来控制的,而在Windows中则必须是.exe的文件。当然, Unix-Based系统的权限实际不止是是否可以执行。本文将着重说明我们常用的权限设置命令--chmod。

二.语法说明

通常情况下,我们多数时候都是用数字来设置权限,但是此处则按照chmod本身说明的顺序先说明字母描述权限的办法来设置权限。

2.1.字母描述权限说明

chmod实际是change mode的缩写,意为改变文件的模式,详细说明:
chmod [OPTION] MODE[,MODE] FILE
OPTION可用选项包含:

  -c:详细输出,仅输出有权限变更的内容;

  -f:屏蔽错误信息;

  -R:递归修改权限,包含子文件及子文件夹

          
MODE可用模式组合:[ugoa...][[+-=][rwxXstugo...]

  ugoa表示文件相关的用户:

   u(user)为文件属主,

   g(group)为文件属组中的用户,

   o(other)不在文件组中的其他用户,

   a(all)表示所有用户,如果不指定关联用户则默认为所有用户(但是无法覆盖umask设置的权限),范例如下:

      [oracle@shadcplamc02a ~]$ cd test/

      [oracle@shadcplamc02a test]$ umask  

      0022-->umask基于666进行权限设置,本例对应创建的文件权限为:644

      [oracle@shadcplamc02a test]$ ls -ltr

      total 0

      [oracle@shadcplamc02a test]$ touch xxx

      [oracle@shadcplamc02a test]$ ls -ltr

      total 0

      -rw-r--r-- 1 oracle dba 0 Sep  1 10:59 xxx

      [oracle@shadcplamc02a test]$ chmod +w xxx-->相当于a+w,但是umask为022故相当于权限未做变更

      [oracle@shadcplamc02a test]$ ls -ltr

      total 0

      -rw-r--r-- 1 oracle dba 0 Sep  1 10:59 xxx

      [oracle@shadcplamc02a test]$ chmod o+w xxx-->单独执行o+w可以为其他用户添加成功

      [oracle@shadcplamc02a test]$ ls -ltr

      total 0

      -rw-r--rw- 1 oracle dba 0 Sep  1 10:59 xxx

      [oracle@shadcplamc02a test]$ chmod -w xxx-->移除w权限,因umask限制,不会修改其他用户的权限

      chmod: xxx: new permissions are r--r--rw-, not r--r--r--

      [oracle@shadcplamc02a test]$ ls -ltr

      total 0

      -r--r--rw- 1 oracle dba 0 Sep  1 10:59 xxx

      [oracle@shadcplamc02a test]$ chmod o-w xxx-->指定o-w可以移除成功

      [oracle@shadcplamc02a test]$ ls -ltr

      total 0

      -r--r--r-- 1 oracle dba 0 Sep  1 10:59 xxx

      [oracle@shadcplamc02a test]$ umask 002-->修改umask为0002

      [oracle@shadcplamc02a test]$ umask

      0002

      [oracle@shadcplamc02a test]$ chmod 644 xxx-->还原文件权限

      [oracle@shadcplamc02a test]$ ls -ltr

      total 0

      -rw-r--r-- 1 oracle dba 0 Sep  1 11:10 xxx

      [oracle@shadcplamc02a test]$ chmod +w xxx-->再次+w,发现仅umask中设定的其他用户写权限无法添加w权限

      [oracle@shadcplamc02a test]$ ls -ltr

      total 0

      -rw-rw-r-- 1 oracle dba 0 Sep  1 11:10 xxx

               

  [+-=]表示给对应的用户如何设置权限:

    +:表示为指定用户增加某些权限;

    -:表示为某些用户移除某些权限;

    =:表示不管原来权限是什么,直接设置为等号后面点额权限;

               

 [rwxXstugo]为文件对应的权限:

   r(Read,数值对应4):

      文件-->通过vi, cat等工具查看文件内容;

      文件夹-->可以通过ls查看文件夹中的文件,但是看不到文件的属性;

                    

   w(Write,数值对应2):

      文件-->可以通过vi等命令编辑文件的内容;

      文件夹-->可以在文件夹下创建或删除文件(也需要x权限),实际上是修改的文件夹的inode;

                    

   x(Execute,数值对应1):

      文件-->可以执行文件;

      文件夹-->可以进入文件夹

   X(Execute):execute only if the file is a directory or already has execute permission for some user-->没测出来.

               

  s(SetUID数值对应4/SetGID数值对应2):

SetUID对于文件-->1).必须是二进制文件;2).文件用户本身需要有x权限(否则S为大写);3).执行者将具备所有者的权限,passwd就是一个很好的例子因为每个用户都需要调用passwd去修改自己的密码,但是密码相关的的文件(/etc/passwd,/etc/shadow*)只有root可以修改。我们可以看到/usr/bin/passwd这个命令的属性为:-rwsr-xr-x,第四位的s即表示set
Uid,且普通用户执行时可以看到程序的执行者是root。将mkdir设置Suid属性则普通用户创建的文件夹为root的所有者和普通用户的组:

        [root@shadcplamc02a ~]# ls -ltr /bin/mkdir

         -rwxr-xr-x 1 root root 31664 Mar 14  2012 /bin/mkdir

        [root@shadcplamc02a ~]# chmod u+s /bin/mkdir

        [root@shadcplamc02a ~]# ls -ltr /bin/mkdir

         -rwsr-xr-x 1 root root 31664 Mar 14  2012 /bin/mkdir

        [oracle@shadcplamc02a app]$ mkdir /app/test1-->切换到Oracle用户创建一个文件夹

        [oracle@shadcplamc02a app]$ ls -ld /app/test1

         drwxrwxr-x 2 root dba 4096 Sep  1 13:30 /app/test1

        :SetUid可以实现类似sudo才能实现的部分功能

               

      SetGID对于文件-->同SetUid一致,以该用户的属组的权限去执行该文件,权限位描述为-rwxrwsr-x;

                    

      SetGID对于文件夹-->主要特性包含:

           1).如果用户对此目录包含r和x的权限,则用户能够进入此目录;

           2).用户在具备此属性的目录下的有效用户组将会变成该目录的组;

           3).如果用户在文件夹上有w权限,则用户创建的文件及文件夹与此目录的用户组相同。

               

      t(Stick bit数值对应1):

           文件-->Linux内核会忽略文件的粘滞位属性,有的操作系统只有root用户可以设置粘滞位;

           文件夹-->文件夹的粘滞位可以确保在所有人都有读写执行的权限的文件夹下,文件只能被owner或root用户进行重命名,删除等操作, 例如/temp:

                [ncaomon@shadcplamc02a test]$ ls -ld /tmp

                 drwxrwxrwt 14 root root 4096 Sep  1 11:53 /tmp-->所有普通用户都可以在/tmp下维护自己的文件,但是不能删除别人的文件。

            注意:粘滞位设置需要确保原文件/文件夹本身有x权限,否则t将会是大写的(也就是没有生效),例如:

                [oracle@shadcplamc02a app]$ ls -ld test

                 drwxrwxrw- 2 oracle dba 4096 Sep  1 13:13 test

                [oracle@shadcplamc02a app]$ chmod 1776 test-->第一位的1表示粘滞位,2表示set Gid, 4表示Set Uid

                [oracle@shadcplamc02a app]$ ls -ld test

                 drwxrwxrwT 2 oracle dba 4096 Sep  1 13:13 test

                    

      u(User):将授予文件所有者的权限授予目标用户;

                    [oracle@shadcplamc02a app]$ ls -ltr

                    -rw------- 1 oracle dba   28 Sep  1 11:55 test.log

                    [oracle@shadcplamc02a app]$ chmod u=o test.log

                    [oracle@shadcplamc02a app]$ ls -ltr

                    ---------- 1 oracle dba   28 Sep  1 11:55 test.log

                    

     g(Group):将授予文件组的权限授予目标用户;

               

     o(Other):将授予其他用户的权限授予目标用户;

2.2.数字描述的文件权限

数字的权限主要通过四位数字来描述,例如0055(前面的0可以忽略,相当于常规的55,实际权限---r-xr-x),每一位上的数字都可以为4,2,1三种权限的组合(0为无此权限)

1).第一位的4-->suid,2-->sgid,1-->stick bit;
2).第二位的4-->user的r,2-->user的w,1-->user的x;
3).第三位的4-->group的r,2-->group的w,1-->group的x;
4).第四位的4-->other的r,2-->other的w,1-->other的x;

三.权限设置范例
1).设置当前路径下print.sh文件对于属主有读的权限,对于属组用户有写的权限,对于其他用户有执行的权限:

chmod u=r,g=w,o=x print.sh-->等同于:chmod 421 print.sh
-r---w---x  1 root root     0 Sep  5 21:53 print.sh

2).在范例一的Print.sh的文件添加SUID的权限

chmod u+s print.sh-->等效于:chmod 4421 print.sh
-r-S-w---x  1 root root     0 Sep  5 21:53 print.sh-->大写S是因为该文件对于属主本身没有可执行的权限
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: