zoukankan      html  css  js  c++  java
  • 20191209 Linux就该这么学(5)

    5. 用户身份与文件权限

    5.1 用户的身份和能力

    Linux 系统的管理员之所以是 root,并不是因为它的名字叫 root,而是因为该用户的身份号码即 UID( User IDentification)的数值为 0。在 Linux 系统中, UID 就相当于我们的身份证号码一样具有唯一性,因此可通过用户的 UID 值来判断用户身份。在 RHEL 7 系统中,用户身份有下面这些。

    • 管理员 UID 为 0:系统的管理员用户。
    • 系统用户 UID 为 1~999: Linux 系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
    • 普通用户 UID 从 1000 开始:是由管理员创建的用于日常工作的用户。

    UID 是不能冲突的,而且管理员创建的普通用户的 UID 默认是从 1000开始的(即使前面有闲置的号码)。

    为了方便管理属于同一组的用户, Linux 系统中还引入了用户组的概念。通过使用用户组号码(GID, Group IDentification),我们可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。

    在 Linux 系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳入其他用户组,则这个其他用户组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组,从而满足日常的工作需要。

    5.1.1 useradd 命令

    useradd 命令用于创建新的用户,格式为“useradd [选项] 用户名”。

    使用该命令创建用户账户时,默认的用户家目录会被存放在/home 目录中,默认的 Shell 解释器为/bin/bash,而且默认会创建一个与该用户同名的基本用户组。

    image

    /sbin/nologin,它是终端解释器中的一员,与 Bash 解释器有着天壤之别。一旦用户的解释器被设置为 nologin,则代表该用户不能登录到系统中。

    [root@hwjsLinux hwj]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
    [root@hwjsLinux hwj]# id linuxprobe
    uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)
    

    5.1.2 groupadd 命令

    groupadd 命令用于创建用户组,格式为“groupadd [选项] 群组名”。

    [root@hwjsLinux hwj]# groupadd ronny
    

    5.1.3 usermod 命令

    usermod 命令用于修改用户的属性,格式为“usermod [选项] 用户名”。

    用户的信息保存在/etc/passwd 文件中,可以直接用文本编辑器来修改其中的用户参数项目,也可以用 usermod 命令修改已经创建的用户信息。

    image

    [root@hwjsLinux hwj]# id linuxprobe
    uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)
    [root@hwjsLinux hwj]# usermod -G root linuxprobe 
    [root@hwjsLinux hwj]# id linuxprobe
    uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe),0(root)
    [root@hwjsLinux hwj]# usermod -u 8889 linuxprobe 
    [root@hwjsLinux hwj]# id linuxprobe
    uid=8889(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe),0(root)
    

    5.1.4 passwd 命令

    passwd 命令用于修改用户密码、过期时间、认证信息等,格式为“passwd [选项] [用户名]”。

    普通用户只能使用 passwd 命令修改自身的系统密码,而 root 管理员则有权限修改其他所有人的密码。root 管理员在 Linux 系统中修改自己或他人的密码时不需要验证旧密码。

    image

    [root@hwjsLinux hwj]# passwd -l linuxprobe 
    Locking password for user linuxprobe.
    passwd: Success
    [root@hwjsLinux hwj]# passwd -S linuxprobe 
    linuxprobe LK 2019-12-05 0 99999 7 -1 (Password locked.)
    [root@hwjsLinux hwj]# passwd -u linuxprobe 
    Unlocking password for user linuxprobe.
    passwd: Success
    [root@hwjsLinux hwj]# passwd -S linuxprobe 
    linuxprobe PS 2019-12-05 0 99999 7 -1 (Password set, MD5 crypt.)
    

    5.1.5 userdel 命令

    userdel 命令用于删除用户,格式为“userdel [选项] 用户名”。

    在执行删除操作时,该用户的家目录默认会保留下来,此时可以使用-r 参数将其删除。

    image

    5.2 文件权限与归属

    Linux 系统使用了不同的字符来加以区分,常见的字符如下所示。

    • -:普通文件。
    • d:目录文件。
    • l:链接文件。
    • b:块设备文件。
    • c:字符设备文件。
    • p:管道文件。

    对于一般文件来说,权限比较容易理解:“可读”表示能够读取文件的实际内容;“可写”表示能够编辑、新增、修改、删除文件的实际内容;“可执行”则表示能够运行一个脚本程序。

    对目录文件来说,“可读”表示能够读取目录内的文件列表;“可写”表示能够在目录内新增、删除、重命名文件;而“可执行”则表示能够进入该目录。

    文件的读、写、执行权限可以简写为 rwx,亦可分别用数字 421 来表示,文件所有者,所属组及其他用户权限之间无关联

    image

    文件权限的数字法表示基于字符表示(rwx)的权限计算而来,其目的是简化权限的表示。例如,若某个文件的权限为 7 则代表可读、可写、可执行(4+2+1);若权限为 6 则代表可读、可写(4+2)。

    image

    通过分析可知,该文件的类型为普通文件,所有者权限为可读、可写(rw-),所属组权限为可读(r--),除此以外的其他人也只有可读权限(r--),文件的磁盘占用大小是 34298 字节,最近一次的修改时间为 4 月 2 日的凌晨 23 分,文件的名称为 install.log。

    5.3 文件的特殊权限

    在复杂多变的生产环境中,单纯设置文件的 rwx 权限无法满足我们对安全和灵活性的需求,因此便有了 SUID、 SGID 与 SBIT 的特殊权限位。 这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。

    5.3.1 SUID

    SUID 是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。

    [root@hwjsLinux hwj]# ls -l /etc/shadow
    ----------. 1 root root 1172 Dec  6 01:13 /etc/shadow
    [root@hwjsLinux hwj]# ls -l /bin/passwd 
    -rwsr-xr-x. 1 root root 27832 Jun  9  2014 /bin/passwd
    

    查看 passwd 命令属性时发现所有者的权限由 rwx 变成了 rws,其中 x 改变成 s 就意味着该文件被赋予了 SUID 权限。如果原先权限位上没有 x 执行权限,那么被赋予特殊权限后将变成大写的 S。

    SUID的显示:

    image

    5.3.2 SGID

    SGID 主要实现如下两种功能:

    • 让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);
    • 在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。

    chmod 命令是一个非常实用的命令,能够用来设置文件或目录的权限,格式为“chmod [参数] 权限 文件或目录名称”。除了设置文件或目录的权限外,还可以设置文件或目录的所有者和所属组,这里使用的命令为chown,其格式为“chown [参数] 所有者:所属组 文件或目录名称”。

    chmod 和 chown 命令是用于修改文件属性和权限的最常用命令,它们还有一个特别的共性,就是针对目录进行操作时需要加上大写参数-R 来表示递归操作,即对目录内所有的文件进行整体操作。

    [root@hwjsLinux hwj]# chmod 777 xxx 
    [root@hwjsLinux hwj]# chown root:root xxx 
    [root@hwjsLinux hwj]# chmod -R 777 www.linuxprobe.com/
    

    SGUID的显示:

    image

    5.3.3 SBIT

    SBIT 特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。

    与前面所讲的 SUID 和 SGID 权限显示方法不同,当目录被设置 SBIT 特殊权限位后,文件的其他人权限部分的 x 执行权限就会被替换成 t 或者 T,原本有 x 执行权限则会写成 t,原本没有 x 执行权限则会被写成 T。

    SBIT的显示:

    image

    5.4 文件的隐藏属性

    Linux 系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。

    5.4.1 chattr 命令

    chattr 命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。

    5.4.2 lsattr 命令

    lsattr 命令用于显示文件的隐藏权限,格式为“lsattr [参数] 文件”。

    5.5 文件访问控制列表

    前文讲解的一般权限、特殊权限、隐藏权限其实有一个共性—权限是针对某一类用户设置的。如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了。通俗来讲,基于普通文件或目录设置 ACL 其实就是针对指定的用户或用户组设置文件或目录的操作权限。另外,如果针对某个目录设置了 ACL,则目录中的文件会继承其 ACL;若针对文件设置了 ACL,则文件不再继承其所在目录的 ACL。

    5.5.1 setfacl 命令

    setfacl 命令用于管理文件的 ACL 规则,格式为“setfacl [参数] 文件名称”。

    常用的 ls 命令是看不到 ACL 表信息的,但是却可以看到文件的权限最后一个点(.)变成了加号(+) ,这就意味着该文件已经设置了 ACL 了。

    image

    5.5.2 getfacl 命令

    getfacl 命令用于显示文件上设置的 ACL 信息,格式为“getfacl 文件名称”。

    5.6 su 命令与 sudo 服务

    su 命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户

    su 命令与用户名之间可以有一个减号(-),这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强烈建议在切换用户身份时添加这个减号(-)。

    使用 sudo 命令把特定命令的执行权限赋予给指定用户

    sudo 命令用于给普通用户提供额外的权限来完成原本 root 管理员才能完成的任务,格式为“sudo [参数] 命令名称”。

    image

    sudo 命令具有如下功能:

    • 限制用户执行指定的命令:
    • 记录用户执行的每一条命令;
    • 配置文件( /etc/sudoers)提供集中的用户管理、权限与主机等参数;
    • 验证密码的后 5 分钟内(默认值)无须再让用户再次验证密码。

    使用 visudo 命令配置 sudo 命令的配置文件时,其操作方法与 Vim 编辑器中用到的方法一致,因此在编写完成后记得在末行模式下保存并退出。在 sudo 命令的配置文件中,按照下面的格式:

    image

  • 相关阅读:
    thinkphp 3.2 服务器 session 设置时间周期失效问题 服务器是linux windows 上暂时没有发现此类问题
    php 不常见的开发模式
    js 里面的 call 方法 和 apply 方法
    PHP读取文件目录, 并显示需要的目录
    PHP 时间格式
    Python之旅.第三章.函数
    Python之旅.第三章.函数
    Python之旅.第三章.函数
    Python之旅.第三章.函数
    Python之旅.第三章.函数
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/12013102.html
Copyright © 2011-2022 走看看