Linux 上用户及权限管理

在 linux 上学习权限管理机制

Linux 上用户及用户组的关系?

  • 每个用户拥有一个 UserID,每个组拥有一个 GroupID
  • 每个用户属于一个主组,属于一个或多个附属组,一个用户最多有 31 个附属组
    1
    2
    (base) wushaogui@AI2:/mnt$ id wushaogui
    uid=1001(wushaogui) gid=1001(wushaogui) groups=1001(wushaogui),1004(sharedata)

linux 如何添加用户及用户组?

  • 添加用户
    1
    2
    3
    4
    5
    # -m 创建用户目录
    # -s /bin/bash 可登录 /sbin/nologin不能登录
    # -d 设置用户主目录
    -g 用户组
    sudo useradd username -m -s /bin/bash -d /home/username -g groupname
  • 添加用户组
    1
    2
    # 也可以不新建,新用户直接加到默认组上,即自身为一个组
    sudo groupadd groupname

Linux 如何设置密码?

  • 使用 passwd 设置即可
    1
    sudo passwd username

Linux 如何删除用户?

  • 使用 userdel 删除即可
    1
    sudo userdel username

Linux 如何更改用户登录权限?

  • 使用 usermod 设置即可
    1
    2
    3
    4
    # 允许登录
    sudo usermod -s /bin/bash username
    # 禁止登录
    sudo usermod -s /sbin/nologin username

什么是 Linux 的 UGO 权限管理

  • Linux 上进行权限管理的基本方式,UGO 分别表示用户、群组、其他
  • Linux 的 ACL 权限 可以对该权限管理方式进行扩充

Linux 上文件或目录的类型及普通权限说明?

  • Linux 上有共有 7 种文件类型:(文件)、d (目录)、l (链接文件,详细看 Linux 上的软链接与硬链接 )、c (串行端口设备,如键盘和鼠标)、b ( 块设备文件,如 /dev/hda1) 、s (套接字文件,/var/run 目录常见)、p (管道文件)
  • Linux 上的文件权限针对 3 类对象:owner (u,文件所有者)、 group(g,文件所属用户组)、 other (o,其他用户)
  • Linux 上的文件权限每个对象有 3 种权限:r (读权限)、w (写权限)、 x (执行权限)

Linux 上的更新文件或目录普通权限的方法?

  • 使用 chmod 命令更新文件或目录普通权限,递归使用加参数 - R

  • 使用十进制编码更新

    1
    2
    3
    4
    5
    chmod xyz [文件名/目录名]
    # 用r=4,w=2,x=1来表示权限
    # 755 表示修改文件file的用户所有者权限为读\写\执行,所属组权限为读\执行,其他人权限为读\执行

    chmod 755 [文件名/目录名]
  • 使用符号 -, + 和 = 更新

    1
    2
    3
    4
    chmod xyz [文件名/目录名]

    chmod u=rwx,go=rx [文件名/目录名]
    chmod u+w,g+x [文件名/目录名]

Linux 上的更新文件或目录所有者或所属组的方法?

  • 使用命令 chown 更新文件或目录所有者

    1
    2
    chown [-R] 所有者 [文件名/目录名]
    chown [-R] 所有者:所属组 [文件名/目录名]
  • 使用命令 chgrp 更新文件或目录的所属组

    1
    chgrp [-R] 所属组 [文件名/目录名]

Linux 上文件或目录的默认权限 (umask)?

  • Windows 系统中,新建的文件和目录时通过继承上级目录的权限获得的初始权限,而 Linux 不同,它是通过使用 umask 默认权限来计算新建文件或文件夹的初始权限,计算方法看 Linux 上使用 umask 计算初始权限

  • ** 查看 umask 默认权限:**umask 默认权限确实由 4 个八进制数组成,但第 1 个数代表的是 Linux 上的特殊权限,后 3 位数字 “022” 才是 umask 权限值,将其转变为字母形式为 ----w–w-

    1
    2
    3
    [root@localhost ~]# umask
    0022
    #root用户默认是0022,普通用户默认是 0002
  • 修改 umask

    1
    2
    3
    4
    5
    6
    7
    # 临时生效,重启或重登录后失效
    [root@localhost ~]# umask 002
    [root@localhost ~]# umask
    0002
    [root@localhost ~]# umask 033
    [root@localhost ~]# umask
    0033

Linux 上如何求取新建文件或目录的初始权限?

  • 按照 Linux 文件或目录的默认权限 获得默认权限

  • 使用公式求取初始权限

    1
    文件(或目录)的初始权限 = 文件(或目录)的最大默认权限 - umask权限
  • 文件的最大默认权限一般是 666,如果 umask 默认权限为 022,则所有新建文件初始权限是 644

  • 目录的最大默认权限一般是 777,如果 umask 默认权限为 022,则所有新建文件初始权限是 755

Linux 上文件或目录特殊权限有哪些?

  • 文件设置 s 和 t 权限,会占用 x 权限的位置

Linux 文件或目录特殊权限 SUID 使用说明?

  • 以文件的所属用户身份执行,而非执行文件的用户;无法作用于目录

  • 只有可执行文件才能设定 SetUID 权限,对目录设定 SUID,是无效的,此时权限位为大写 S

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@localhost ~]# ls -l /usr/bin/passwd
    -rwsr-xr-x. 1 root root 22984 Jan 7 2007 /usr/bin/passwd

    # 设置SUID
    chmod u+s file...
    chmod 4755 file...
    # 取消设置
    chmod u-s file...
    chmod 0755 file...

Linux 文件或目录特殊权限 SGID 使用说明?

  • 以文件所属组身份去执行;可以作用于目录,此时在该目录中创建任意新文件的所属组与该目录的所属组相同

  • 如果该权限设置不成功,此时权限位为大写 S

    1
    2
    3
    4
    5
    6
    7
    8
    9
     [root@localhost ~]# ll /usr/bin/locate
    -rwx--s--x. 1 root slocate 35612 8月24 2010 /usr/bin/locate

    # 设置SGID
    chmod g+s file...
    chmod 2755 file...
    #取消设置
    chmod 0755 file...
    chmod g-s file...

Linux 文件或目录特殊权限 SBID 使用说明?

  • 对目录拥有写入权限的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件

  • 如果该权限设置不成功,此时权限位为大写 T

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@localhost ~]# ll -d /tmp
    drwxrwxrwt. 4 root root 4096 Apr 19 06:17 /tmp
    # 在其他人身份的权限设定中,原来的 x 权限位被 t 权限占用了,这就表示此目录拥有 SBIT 权限

    #设置SBIT
    chmod o+t dir...
    chmod 1755 dir..
    #取消设置
    chmod 0755 dir...
    chmod o-t dir...

Linux 上文件特殊权限的 SUID 与 SGID 有什么区别?

  • SUID 无法作用于目录,而 SGID 可以
  • SUID: 以文件的所属用户身份执行,而非执行文件的用户;无法作用于目录
  • SGID: 以文件所属组身份去执行;可以作用于目录,此时在该目录中创建任意新文件的所属组与该目录的所属组相同

什么是 Linux 文件(目录)隐藏权限?

  • Linux 系统中的文件和目录,除了可以设定 Linux 上的普通权限 和 Linux 上的特殊权限 外,还可以利用文件和目录具有的一些隐藏属性

  • 使用 chattr 命令,专门用来修改文件或目录的隐藏属性,只有 root 用户可以使用

    1
    2
    [root@localhost ~]# chattr [+-=] [属性] 文件或目录名
    # + 表示给文件或目录添加属性,- 表示移除文件或目录拥有的某些属性,= 表示给文件或目录设定一些属性
  • 使用 lsattr 查看文件或目录隐藏属性

    1
    2
    3
    4
    [root@localhost ~]# lsattr [选项] 文件或目录名
    # -a:后面不带文件或目录名,表示显示所有文件和目录(包括隐藏文件和目录)
    # -d:如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含文件或子目录的隐藏属性信息;
    # -R:和 -d 恰好相反,作用于目录时,会连同子目录的隐藏信息数据也一并显示出来。

Linux 上什么是 ACL 权限?

  • ACL 的全称是 Access Control List (访问控制列表) ,一个针对文件 / 目录的访问控制列表。
  • 它在 Linux 的 UGO 权限管理 的基础上为文件系统提供一个额外的、更灵活的权限管理机制。
  • ACL 允许你给任何的用户或用户组设置任何文件 / 目录的访问权限

ACL 相比 UGO,有什么补充?

  • 可以针对用户来设置权限
  • 可以针对用户组来设置权限
  • 子文件 / 目录继承父目录的权限

Linux 上如何开启 ACL 权限?

  • 检查系统是否支持 ACL

    1
    dumpe2fs -h /dev/sda1
  • 临时开启

    1
    mount -o remount,acl /dev/sda1
  • 永久开启,修改文件 /etc/fstab

Linux 上使用 ACL 的场景之一?

  • Linux 上的普通权限 管理可以管理文件或文件夹的 3 类对象的权限,比较粗略,假设有一个用户,既不是文件拥有者 (U),也不属于文件所属组 (G),也要求按其他人 (O) 以外的权限给这个用户设置,UGO 的方式不能做到
  • 例子:所有者 root 用户在根目录下创建一个文件目录 /project,然后创建一个 QQ 群所属组,所属组里面创建两个用户 zhangsan 和 lisi。所有者和所属组权限和其他人权限是 770,如何新建一个旁听用户 pt,给他设定 /project 目录的 ACL 为 r-x?

Linux 上如何设置 ACL 权限?

  • ACL 权限命令管理

    1
    2
    3
    4
    [root@localhost ~]# getfacle 文件名
    #查看ACL权限
    [root@localhost ~]# setfacl 选项 文件名
    #设定ACL权限
  • 给用户和用户组添加 ACL 权限

    1
    2
    3
    4
    5
    # 给用户设定 ACL 权限
    setfacl -m u:用户名:权限 指定文件名

    # 给用户组设定 ACL 权限
    setfacl -m g:组名:权限 指定文件名
  • 最大有效权限 mask

    1
    setfacl -m m:权限 文件名
  • 默认 ACL 权限和递归 ACL 权限

    1
    2
    3
    4
    5
    # 默认ACL权限
    setfacl -m d:u:用户名:权限 文件名

    # 递归ACL权限
    setfacl -m u:用户名:权限 -R 文件名
  • 删除 ACL 权限

    1
    2
    3
    4
    5
    6
    7
    8
    # 删除指定用户的 ACL 权限
    setfacl -x u:用户名 文件名

    # 删除指定用户组的 ACL 权限
    setfacl -x g:组名 文件名

    # 删除文件的所有 ACL 权限
    setfacl -b 文件名