• 权限



    权限在操作系统是尤为重要的,无论是windows和linux中,都少不了权限这么一说,权限的大小决定了你能操作些什么,在linux中,权限对目录和文件的意义是不同的,并且还有特殊权限。今天,我们就来说说一说权限在linux中的重要性以及权限操作命令。
    权限:
    权限决定用户对文件或目录的使用范围,权限如果设定的不恰当会带来很大安全隐患。其中root的权限最大,能做任何事,之所以设定root用户权限为最大是为了方便与管理用户或系统重要信息的,而不是在工作中用来维护服务器的,所以在生产环境中基本没人拿root来操作,只是必要时才使用,因为root用户带来的后果是非常严重的。下面先来说说权限位,再说权限对于文件或目录的作用
    我们先来看一下权限位:
    使用`ls -ld / ` 命令查看根目录的文件类型,再做分析
    [root@localhost ~]# ls -ld /
    dr-xr-xr-x.  24  root  root   4096   Jul 25 11:43   /
    其中第一段(dr-xr-xr-x. ),里面有11个字符位,第一位(d)为文件类型,d 表示为目录,紧接着为(r-xr-xr-x),里面有九个字符,而每三个字符又分为一个独立的权限位。
    分别代表为:
    第一个三个字符(r-x)表示对于此目录属(owner)的操作权限;
    第二个三个字符为(r-x),表示针对于此目录的属组(group)的操作权限;
    第三个三个字符也为(r-x),它则表示为除属主属组以外的其他用户(other)的操作权限。
    所以,这三段权限一共9个字符分别针对于属主、属组、其他用户
    (dr-xr-xr-x. )这其中之后的 " . " 则表示特殊控制权限位,有则表示为" + ",无则表示为" . "
    (dr-xr-xr-x.  24  root  root   4096   Jul 25 11:43   / ) 此中两个root分别依次代表属主和属组,其他用户则表示属主属组除外的的用户。
    下面来细分一下(rwx)各代表的含义,而每三位(rwx)这表示为一组权限,每一位权限对于文件的和目录的含义又是不同的。
    r=read          //读
    w=write         //写
    x=executable    //执行
    对文件的含义:
    r(可读权限):可以使用类似cat等命令查看其文件的内容
    w(可写权限):可以编辑或删除其文件
    x(可执行)  :可以运行此文件
       
    对目录的含义:
    r: 可以对此目录查看目录内的文件内容,如 ls
    w:可以在此目录创建文件或目录,但必须有x权限的前提下
    x:可以使用cd切换进此目录或 ls -l 查看目录内文件的详细信息
    而每一位权限都可已使用八进制来表示,每三位为一组;下面来看一下怎么表示的:
    一组权限为rwx,用八进制来表示一下;      注意:此排序是不能乱排序的。
       权限        二进制       八进制  
        rwx         111            7
        --x         001            1
        -w-         010            2
        -wx         011            3
        r--         100            4
        r-x         101            5 
        rw-         110            6
        rwx         111            7
    如此一来,则每三位权限为一组就可以直接用数字来表示了,上面的 / 的权限用八进制表示则为555 吧!  慢慢去练习吧!

    说了那么多,你应该对权限位和用八进制表示权限有了了解吧!
    怎么修改文件或目录的权限:
    文件和目录的权限其含义则是不同的,我们对文件上的三组九位权限进行设定就可对用户进行控制。

    更改文件或目录权限命令
    chmod :更改权限
    更改权限并不是任何人都可以更改的,root除外,其余用户只能更改属主为自己的文件或目录的权限
    chmod有4种更改方式,分别为赋权、授权、八进制更改和参照文件更改。
    要更改指定的用户或组或其他用户的权限,有几类用户,则表示为:
     o(other):更改其他用户权限
     g(group):更改属组权限
     u(user) : 更改属主权限
     a(all)  :更改所有用户权限(以上三种一起更改权限)
    chmod权限表示法:
    1.赋权表示法
    用 “=”来进行赋权更改,所谓赋权更改就是直接更换其原有的权限,直接更改为指定的权限。
    2.授权表示法
    用 “ + ”  “ – ” 来进行授权更改,其含义为在原有的权限上增加或减少权限
    3.八进制表示法
    用八进制 如:“777” 直接对目录或文件进行更改
    4.参照文件更改
    使用选项“ –reference=/SOMEFILE ”来进行更改,其含义为参照指定文件的权限来对当前指定文件进行更改,其权限则和参照的文件一样。

    注意:第一种和第二种可以只针对其中一类用户进行更改,第三种和第四种则不能单独更改一类用户

    chmod使用:
    chmod [OPTION]… MODE[,MODE]… FILE… //
    此用法针对赋权表示法和授权表示法使用
    1.赋权表示法使用
    #chmod u=rx  /etc/passwd
    //这表示改变/etc/passwd文件的属主权限为rx,其中要更改的权限rwx顺序可以不同,也可以使用任意一类用户进行授权  
    2.授权表示法
    //这表示将/etc/passwd文件的属主权限减去“x”执行权限     其中要更改的权限rwx顺序可以不同 ,也可以使用任意一类用户进行授权  
    chmod [OPTION]… OCTAL-MODE FILE…
    八进制表示法
     #chmod 777 /etc/passwd
    //表示对passwd文件的三类用户(属主、属组、其他用户)的权限都设置成为777(每一类用户的权限都为rwx)当然可以更改为其他的,自行转换
       chmod [OPTION]… –reference=RFILE FILE…
    参照文件更改
    #chmod --reference=/etc/inittab /etc/passwd
    //表示将/etc/passwd文件的权限设定为和inittab文件一样的权限, 前面一个文件为被参照的文件,后一个为被修改的文件
    注意:如果对目录进行更改权限时,如果也要修改目录下的文件和目录一样的权限,则使用 -R 选项,代表递归修改目录下的文件,以上所有方法都可加R选项。
    注意:在更改时后面的作用文件或目录可以是多个
    更改文件或目录的属主属组
    chown:改变文件属主属组
    修改文件或目录的属主和属组,root用户可以对所有文件或目录进行属组属主更改,普通用户只能更改属主是自己的才能使用该命令,该命令也可以使用参照文件更改法。
    使用方法:
    1.chown [OPTION]… [OWNER][:[GROUP]] FILE…
     改变文件的属主属组,中间用冒号分割,后面为要作用的文件 
     #chown user1:group1 /etc/passwd   
     // 将passwd文件的属主修改为user1,属组修改为group1
    2.chown [OPTION]… –reference=RFILE FILE…
    #chown --reference=/etc/inittab /etc/passwd
    //表示将/etc/passwd文件的属主属组设定为和inittab文件一样的属主属组, 前面一个文件为被参照的文件,后一个为被修改的文件
    3.如果对目录进行更改属主属组时,如果也要修改目录下的文件和目录一样的属主属组,则使用 -R 选项,代表递归修改目录下的文件,所有方法都可加R选项
    注意:第一种方法更改文件或目录的属主属组有一些小技巧:
    1.如果我们想对文件只修改属组时,则直接使用冒号+属组名
    #chown  :magedu /etc/fstab
    //只对该文件进行属组更改,属主不变
    2.如果我们想对文件只修改属主时,直接写上属主用户名即可
    #chown root  /etc/fstab
    //修改该文件的属主为root属组不变
    注意:在更改时后面的作用文件或目录可以是多个
    针对于文件或目录的属组还有命令
    chgrp:更改组
    chgrp命令用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。也可以使用参照文件更改法更改
     chgrp [OPTION]… GROUP FILE…
    #chgrp magedu /testdir/magedu.txt
    //将文件的属组更改为指定的组名,其中组名可用其GID代替
    chgrp [OPTION]… –reference=RFILE FILE…
    #chown --reference=/etc/inittab /etc/passwd
    //表示将/etc/passwd文件的属组设定为和inittab文件一样的属组, 前面一个文件为被参照的文件,后一个为被修改的文件
    注意:在更改时后面的作用文件或目录可以是多个
    很多人都没有注意到当我们在创建文件或目录时都会自动设有权限,root用户默认创建文件的权限是644,目录权限默认是755,普通用户创建文件是默认是664,目录默认权限是775,但这些权限是怎么规定的呢?是谁在作怪呢?
    下面我们就来说一下新建文件或目录时的默认权限。
    在命令行输入umask即可看到返回的值,这是什么呢?没错,就是umask(反掩码)值在作怪,就是它决定了用户在新建文件或目录时的默认权限,配置文件在/etc/bashrc,这里面定义了我们在创建文件或目录时的权限

    [root@localhost testdir
    0022
     他是怎么计算的呢?首先,系统规定,所有用户在创建文件是默认是使用666为权限,目录是777为权限,然后当用户创建文件或目录时会和相应的umask值进行减法运算,最后的出的结果即为文件或目录的权限。
    要注意,umask值是/etc/bashrc里定义的,他是用一个判断语句来决定的,当登录的用户UID小于0时使用022作为umask值,否则使用002作为umask值,然后在与系统默认创建文件和目录的值(666/777)进行减法运算,最后得出的就是文件或目录的值。
    //这就是判断umask值的if else语句
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
           umask 002
        else
           umask 022
        fi
       
    怎么减呢?没错就是当系统判断完之后给出umask值来减
    例如:当前用户为root,umask为022(第一个0不用管),然后我们创建一个文件,查看其权限是644,当我们创建目录时其默认权限是755,怎么算的呢,系统默认创建文件是权限是666然后减去当前用户umask值,就得到创建文件的权限值。目录则是777减去umask值得出755就是目录的权限值。so…that's it.
    [root@localhost testdir]# umask
    0022
    [root@localhost testdir]# touch umask.txt
    [root@localhost testdir]# ls -l umask.txt 
    -rw-r--r-- 1 root root 0 Jul 25 16:49 umask.txt
    [root@localhost testdir]# ls -ld umask.dir
    drwxr-xr-x 2 root root 4096 Jul 25 16:51 umask.dir
    我们来看一下普通用户创建文件和目录时的权限,看一看是不是我们说的这样!
    //普通用户umask值为002,然后用系统默认的666和777减去umask值之后就得出文件和目录的权限值(664、775)
    [magedu@localhost ~]$ umask
    0002
    [magedu@localhost ~]$ touch umask.txt
    [magedu@localhost ~]$ ls -l umask.txt 
    -rw-rw-r-- 1 magedu magedu 0 Jul 25 16:55 umask.txt
    [magedu@localhost ~]$ mkdir umask.dir
    [magedu@localhost ~]$ ls -ld umask.dir/
    drwxrwxr-x 2 magedu magedu 4096 Jul 25 16:55 umask.dir/
       
    那么系统为什么要经过umask值来创建文件或目录呢?
    因为系统默认创建文件或目录是权限是666和777,这样岂不是不太不安全,所有文件和目录权限都那么大万一使用root用户误操作不就完蛋了。所以引入umask值来控制用户在创建文件或目录是的权限问题。
    umask的定义与使用:
    1.在命令行中直接输入umask  + 值 就会定义当前的用户创建文件或目录是更改了原有的权限。
    [root@localhost testdir]# umask
    0022
    [root@localhost testdir]# umask 002
    [root@localhost testdir]# umask
    0002
    //当我们再创建文件或目录时权限就不是原来的权限的。因为umask值改变了。
    [root@localhost testdir]# touch umask2.txt
    [root@localhost testdir]# ls -l umask2.txt 
    -rw-rw-r-- 1 root root 0 Jul 25 17:16 umask2.txt
    注意:我们在命令行中定义的umask值使用的是数字,我们也可以使用直接定义的方法“umask  u=rw,g=r, o= ”  系统umask值会自动转换为137,系统使用777减去给定的各类权限的八进制数,得到umask码。这里需要再次注意的是当我们更改umask值之后如果文件默认的666减去我们更改umask值得到的结果如果有奇数,则统一加1,目录则不用管。
     2. 把umask值写入配置文件中。
    可以调用umask -p 选项的执行结果来重定向追加到配置文件。
    [root@localhost testdir]# umask -p     
    umask 0033 
        //使用umask -p 查看当前的umask值并显示umask值本身的 字符串,这不就可以让我们调用了吗?
    [root@localhost testdir]# umask 022         //定义umask值为022
    [root@localhost testdir]# umask -p          //用-p 显示值
    umask 0022                                                
    [root@localhost testdir]# echo `umask -p` >> /etc/bashrc      //使用echo 调用命令的执行结果然后追加到配置文件中(这里也可以更改为家目录的文件中)
    [root@localhost testdir]# source /etc/bashrc        //重新读取配置文件让umask生效
    [root@localhost testdir]# umask                      
    0022
    3.使用umask -p 将umask值以rwx方式显示
    [root@localhost testdir]# umask   
    0022          //原来的值
    [root@localhost testdir]# umask -S    
    u=rwx,g=rx,o=rx    //将原来的值用777减去之后转换为rwx形式





  • 相关阅读:
    Redis在windows下安装过程
    Java中如何使用Redis做缓存
    Redis学习记录之Java中的初步使用
    Java多线程实现简单的售票程序
    list,set,map,数组间的相互转换
    高性能Java Web 页面静态化技术(原创)
    Nginx windows下搭建过程
    高并发解决方案--负载均衡
    高并发解决方案--页面静态化
    phpcms 自定义方法
  • 原文地址:https://www.cnblogs.com/sanyuanempire/p/6168748.html
Copyright © 2020-2023  润新知