• 【Linux学习】Linux下用户组、文件权限详解


    原文地址:http://www.cnblogs.com/123-/p/4189072.html

    Linux下用户组、文件权限详解

    用户组

    linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念

    - 所有者

    - 所在组

    - 其它组

    - 改变用户所在的组

     

    所有者

    一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者

    用ls ‐ahl命令可以看到文件的所有者

    也可以使用chown 用户名 文件名来修改文件的所有者

     

    文件所在组

    当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组

    用ls ‐ahl命令可以看到文件的所有组

    也可以使用chgrp 组名 文件名来修改文件所在的组

     

    其它组

    除开文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组

     

    文件权限

    ls

     -l中显示的内容如下:

    -rwxrw-r‐-1 root root 1213 Feb 2 09:39 abc

    - 10个字符确定不同用户能对文件干什么

    - 第一个字符代表文件(-)、目录(d),链接(l

    - 其余字符每3个一组(rwx),读(r)、写(w)、执行(x

    - 第一组rwx:文件所有者的权限是读、写和执行

    - 第二组rw-:与文件所有者同一组的用户的权限是读、写但不能执行

    - 第三组r--:不与文件所有者同组的其他用户的权限是读不能写和执行

    也可用数字表示为:r=4w=2x=1  因此rwx=4+2+1=7

    - 1 表示连接的文件数

    - root 表示用户

    - root表示用户所在的组

    - 1213 表示文件大小(字节)

    - Feb 2 09:39 表示最后修改日期

    - abc 表示文件名

     

    使用数字表示权限

    除了符号,也可以使用八进制数字来指定具体权限,如下表所示:

    数字说明权限
    0 没有任何权限 ---
    1 执行权限 --x
    2 写入权限 -w-
    3 执行权限和写入权限:1 (执行) + 2 (写入) = 3 -wx
    4 读取权限 r--
    5 读取和执行权限:4 (读取) + 1 (执行) = 5 r-x
    6 读取和写入权限:4 (读取) + 2 (写入) = 6 rw-
    7 所有权限: 4 (读取) + 2 (写入) + 1 (执行) = 7 rwx

     

     

    改变权限的命令

    chmod 改变文件或目录的权限

    chmod 755 abc:赋予abc权限rwxr-xr-x

    chmod u=rwxg=rxo=rx abc:同上u=用户权限,g=组权限,o=不同组其他用户权限

    chmod u-xg+w abc:给abc去除用户执行的权限,增加组写的权限

    chmod a+r abc:给所有用户添加读的权限

     

    改变所有者(chown)和用户组(chgrp)命令

    chown xiaoming abc:改变abc的所有者为xiaoming

    chgrp root abc:改变abc所属的组为root

    chown root ./abc:改变abc这个目录的所有者是root

    chown ‐R root ./abc:改变abc这个目录及其下面所有的文件和目录的所有者是root

     

    改变用户所在组

    在添加用户时,可以指定将该用户添加到哪个组中,同样用root的管理权限可以改变某个用户所在的组

    - usermod ‐g 组名 用户名

    你可以用

    - usermod ‐d 目录名 用户名,改变该用户登录的初始目录

     

    SUID和SGID位

    在Linux中,一些程序需要特殊权限才能完成用户指定的操作。

    例如,用户的密码保存在 /etc/shadow 文件中,出于安全考虑,一般用户没有读取和写入的权限。但是当我们使用passwd 命令来更改密码时,需要对 /etc/shadow 文件有写入权限。这就意味着,passwd 程序必须要给我们一些特殊权限,才可以向 /etc/shadow 文件写入内容。

    Linux 通过给程序设置SUID(Set User ID)和SGID(Set Group ID)位来赋予普通用户特殊权限。当我们运行一个带有SUID位的程序时,就会继承该程序所有者的权限;如果程序不带SUID位,则会根据程序使用者的权限来运行。

    SGID也是一样。一般情况下程序会根据你的组权限来运行,但是给程序设置SGID后,就会根据程序所在组的组权限运行。

    如果程序设置了SUID位,就会在表示文件所有者可执行权限的位置上出现's'字母;同样,如果设置了SGID,就会在表示文件群组可执行权限的位置上出现's'字母。如下所示:

    $ ls -l /usr/bin/passwd
    -r-sr-xr-x  1   root   bin  19031 Feb 7 13:47  /usr/bin/passwd*
    $

    上面第一列第四个字符不是'x'或'-',而是's',说明 /usr/bin/passwd 文件设置了SUID位,这时普通用户会以root用户的权限来执行passwd程序。

    注意:小写字母's'说明文件所有者有执行权限(x),大写字母'S'说明程序所有者没有执行权限(x)。

    如果在表示群组权限的位置上出现SGID位,那么也仅有三类用户可以删除该目录下的文件:目录所有者、文件所有者、超级用户 root。

    为一个目录设置SUID和SGID位可以使用下面的命令:

    $ chmod ug+s dirname
    $ ls -l
    drwsr-sr-x 2 root root  4096 Jun 19 06:45 dirname
    $

     

     

    【综合案例】

    【题1.1】建立两个用户组group1group2,以及三个用户dennisdanielabigale,并且将前2个用户分配在group1用户组下,后一个分配在group2用户组下

     

    【题1.2】以dennis用户登录,创建一个Hello.java文件

    【题1.3】以daniel用户登录,观察是否可以访问/home/dennis目录以及读或写其创建的Hello.java文件

    【题1.4】以dennis用户登录,修改目录/home/dennisHello.java文件的读写权限(更正:修改目录权限的时候,应该使用770,而不是760,否则权限不足)

     

    【题1.5】重复【题1.3

    【题1.6】改变abigale的用户组由group2变为group1

     

    然后,可以使用cat /etc/passwd查看并确定

     

    【参考】

    - groupadd 组名,在linux中添加组

    - vi /etc/group,查看linux中所有组信息,可以看可以编辑

    - cat /etc/group,查看linux中所有组信息,只可以看不可以编辑

    - useradd ‐g 组名 用户名,创建用户的同时指定将该用户分配到哪个组下

    - vi /etc/passwd,查看linux中所有用户信息,可以看可以编辑

    - cat /etc/passwd,查看linux中所有用户信息,只可以看不可以编辑

  • 相关阅读:
    Linux下安装Apache2.4.43踩坑记录
    网络代理条件下配置git
    docker存储驱动的选择
    Python列表排序
    解决apache无法启动No space left on device
    Flask匹配url使用正则表达式
    Web安全-客户端脚本安全
    springboot中的一些好用注解
    基于cdn方式的vue+element-ui的单页面架构
    干货网站
  • 原文地址:https://www.cnblogs.com/wlf-919874006/p/5294653.html
Copyright © 2020-2023  润新知