• Liunx-03用户、组、权限管理


    用户、组、权限

    安全上下文(secure context):

    权限

    我们看见的权限一般表示为:r, w, x

    • 文件
      • r:可读,可以使用类似cat等命令查看文件内容;
      • w:可写,可以编辑或删除此文件;
      • x: 可执行,eXacutable,可以命令提示符下当作命令提交给内核运行;
    • 目录
      • r: 可以对此目录执行ls以列出内部的所有文件;
      • w: 可以在此目录创建文件;
      • x: 可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息;
    rwx:
    	r--:只读
    	r-x:读和执行
    	---:无权限
    	
    0 000 ---:无权限
    1 001 --x: 执行
    2 010 -w-: 写
    3 011 -wx: 写和执行
    4 100 r--: 只读
    5 101 r-x: 读和执行
    6 110 rw-: 读写
    7 111 rwx: 读写执行
    
    755: rwxr-xr-x
    640: rw-r----- 
    660: rw-rw----
    775: rwxrwxr-x
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    用户和组

    • Linux系统是一个多用户的时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

    • 用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个惟一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。

    • Linux基于用户身份对资源访问进行控制

      • 用户帐号:
        • 超级用户root
        • 普通用户
        • 程序用户
      • 组帐号:
        • 基本组(私有组)
        • 附加组(公共组)
      • UID和GID:
        • UID(User Identity,用户标识号)
        • GID(Group Identify,组标识号)
    • 在Linux系统中存在两种用户:系统用户与普通用户。

      • 系统中的每一个用户都有一个ID,就像身份证号一样,它是区分用户的唯一标志。

        UID:用户独一无二的身份标识
        用户名               UID
        超级用户               0    
        系统标准用户         1~999
        普通用户           1000~65535
        外部应用程序用户     65535以后
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
      • Linux的系统用户如:daemon, mail, lp, nobody等。大多数是不能登录的,因为他们的登录shell为/sbin/nologin。

      • 用户默认配置信息是从/etc/login.defs文件中读取。

    上面对应的关系存储位置:

    用户关系:
    用户:UID, /etc/passwd
    组:GID, /etc/group
    
    影子口令:
    用户:/etc/shadow
    组:/etc/gshadow
    
    #文件的结构
    
    /etc/passwd:
    用户名:密码:UID:GID:注释:家目录:默认SHELL
    account: 登录名
    password: 密码
    UID:基本用户ID
    GID:基本组ID
    comment: 注释
    HOME DIR:家目录
    SHELL:用户的默认shell
    用户名:密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告时间:非活动时间:过期时间:
    
    /etc/group:
    组名:密码:GID:以此组为其附加组的用户列表
    
    /etc/shadow:
    account: 登录名
    encrypted password: 加密的密码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    用户和组管理

    用户管理

    添加
    • useradd
    useradd命令
    格式:useradd  [选项]...  用户名
    常用命令选项
    -u:指定 UID 标记号
    -d:指定宿主目录,缺省为 /home/用户名
    -e:指定帐号失效时间
    -g:指定用户的基本组名(或UID号)
    -G:指定用户的附加组名(或GID号)
    -M:不为用户建立并初始化宿主目录
    -s:指定用户的登录Shell
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    删除
    • userdel
      • 格式:userdel [-r] 用户名
      • 添加 -r 选项时,表示连用户的宿主目录一并删除
    [root@localhost ~]# useradd stu01
    [root@localhost ~]# ls -ld /home/stu01/
    drwx------ 2 stu01 stu01 4096 09-09 12:38 /home/stu01/
    [root@localhost ~]# userdel -r stu01
    [root@localhost ~]# ls -ld /home/stu01/
    ls: /home/stu01/: 没有那个文件或目录
    
    注意:一般而言,如果该账号只是『暂时不启用』的话,那么将 /etc/shadow 里头最后倒数一个字段设定为 0 就可以让该账号无法使用,但是所有跟该账号相关的数据都会留下来!使用 userdel 的时机通常是『你真的确定不要让该用户在主机上面使用任何数据了!』
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    修改
    • usermod命令
      • 格式:usermod [选项]… 用户名
    • 常用命令选项
      • -l:更改用户帐号的登录名称
      • -L:锁定用户账户
      • -U:解锁用户账户
      • 以下选项与useradd命令中的含义相同
        • -u、-d、-e、-g、-G、-s
    usermod -u uid username 修改用户的UID
    usermod -g gid username 修改用户的GID
    usermod -l newname oldname 修改用户名
    usermod -G groupname username 添加用户到组
    usermod -L username 锁定用户
    usermod -U username 解除锁定
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    口令的管理
    • passwd命令
      • 格式:passwd [选项]… 用户名
    • 常用命令选项
      • -d:清空用户的密码,使之无需密码即可登录
      • -l:锁定用户帐号
      • -S:查看用户帐号的状态(是否被锁定)
      • -u:解锁用户帐号
    • pwck:检查用户帐号完整性
    用户信息查询
    • chsh :用来更换登录系统时使用的shell。若不指定任何参数与用户名称,则chsh会以应答的方式进行设置。

      • -l或–list-shells:列出目前系统可用的shell清单;
      • -s或–shell:更改系统预设的shell环境
    • chfn:改变finger信息

      • chfn 查看详细
      • chfn -f 用户名 修改信息
    • finger :查询一台主机上的登录账号的信息,通常会显示用户名、主目录、停滞时间、登录时间、登录Shell等信息

      • -s:显示用户注册名、实际姓名、终端名称、写状态、停滞时间、登录时间等信息。
      • -l:除了用-s选项显示的信息外,还显示用户主目录、登录Shell、邮件状态等信息,以及用户主目录下的.plan、.project和.forward文件的内容。
      • -p:除了不显示.plan文件和.project文件以外,与-l选项相同。
    • id:显示用户的 ID,以及所属群组的 ID

      • -g或–group:显示用户所属群组的ID。
      • -G或–groups:显示用户所属附加群组的ID。
      • -n或–name:显示用户,所属群组或附加群组的名称。
      • -r或–real:显示实际ID。
      • -u或–user:显示用户ID。
      • -help:显示帮助。
      • -version:显示版本信息。
    • chage:命令是修改帐号和密码的有效期限

      • -m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
      • -M:密码保持有效的最大天数。
      • -w:用户密码到期前,提前收到警告信息的天数。
      • -E:帐号到期的日期。过了这天,此帐号将不可用。
      • -d:上一次更改的日期。
      • -i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
      • -l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
    • users、w 、who命令

      • 用途:查询已登录到主机的用户信息

    组管理

    • 与用户帐号文件相类似
      • /etc/group:保存组帐号基本信息
      • /etc/gshadow:保存组帐号的密码信息
    [root@localhost ~]# grep "adm" /etc/group
    sys:x:3:root,bin,adm
    adm:x:4:root,adm,daemon
    组帐号名    组成员列表
    
    • 1
    • 2
    • 3
    • 4
    添加
    • groupadd [-g GID] 用户组
      • -g GID 指定新用户组的组标识(GID)
    #添加组帐号
    [root@localhost ~]# groupadd -g 1000 market  //添加组帐号market
    [root@localhost ~]# tail -1 /etc/group
    market:x:1000:
    
    • 1
    • 2
    • 3
    • 4

    groupmod, gpasswd

    删除
    #删除组帐号
    groupdel 用户组
    [root@localhost ~]# groupdel market   #删除组帐号market
    [root@localhost ~]# grep "market" /etc/group
    
    • 1
    • 2
    • 3
    • 4
    修改
    • groupmod [-g GID] [-n] 用户组
      • -g GID 为用户组指定新的组标识号
      • -n新用户组 将用户组的名字改为新名字
    例如:将组名为group2修改为group3。 
    groupmod   -n  group3  group2
    
    • 1
    • 2
    添加/删除组成员

    gpasswd命令

    • 用途:设置组帐号密码(极少用)、添加/删除组成员
    • 格式:gpasswd [选项]… 组帐号名
    • 常用命令选项
      • -a:向组内添加一个用户
      • -d:从组内删除一个用户成员
      • -M:定义组成员列表,以逗号分隔
    #添加组成员benet
    [root@localhost ~]# gpasswd -a mary market
    正在将用户“mary”加入到“market”组中
    [root@localhost ~]# grep "market" /etc/group
    market:x:1000:mary
    #删除组成员root
    [root@localhost ~]# grep "market" /etc/group
    market:x:1000:mary,root,adm
    [root@localhost ~]# gpasswd -d root market
    正在将用户“root”从“market”组中删除
    [root@localhost ~]# grep "market" /etc/group
    market:x:1000:mary,adm
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    查询

    groups命令

    • 用途:查询用户所属的组
    • 格式:groups [用户名]

    红帽Linux系统中,管理员可通过下面的工具管理系统中的所有的用户与组信息。

    • system-config-users

    密码管理

    • 用于保存用户的帐号基本信息
      文件位置:/etc/passwd
      每一行对应一个用户的帐号记录
    [root@localhost ~]# tail -2 /etc/passwd
    sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
    tom:x:500:500:BENET Student User:/home/benet:/bin/bash
     字段1:用户帐号的名称
     字段2:用户密码字串或者密码占位符“x”
     字段3:用户帐号的UID号
     字段4:所属基本组帐号的GID号
     字段5:用户全名
     字段6:宿主目录
     字段7:登录Shell信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    用户帐号文件 —— shadow

    • 用于保存密码字串、密码有效期等信息
      • 文件位置:/etc/shadow
      • 每一行对应一个用户的密码记录
    [root@localhost ~]# tail -2 /etc/shadow
    sabayon:!!:14495:0:99999:7:::
    mary:$1$po/zD0XK$4HSh/Aeae/eJ6dNj1k7Oz1:14495:0:99999:7:::
    字段1:用户帐号的名称
    字段2:加密的密码字串信息
    字段3:上次修改密码的时间
    字段4:指的是两次修改口令之间所需的最小天数,0为不作要求
    字段5:密码的最长有效天数,默认值为99999
    字段6:提前多少天警告用户口令将过期,默认值为7
    字段7:在密码过期之后多少天禁用此用户
    字段8:帐号失效时间,默认值为空
    字段9:保留字段(未使用)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    用户帐号的初始配置文件

    • 文件来源
      • 新建用户帐号时,从 /etc/skel 目录中复制而来
    • 主要的用户初始配置文件
      • ~/.bash_profile:用户每次登录时执行
      • ~/.bashrc:每次进入新的Bash环境时执行
      • ~/.bash_logout:用户每次退出登录时执行
    [root@localhost ~]# cat ~/.bashrc
    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    ……
    
    • 1
    • 2
    • 3
    • 4
    • 5

    手工添加帐户

    先建立所需要的群组( vi /etc/group )
    建立账号的各个属性( vi /etc/passwd )
    将passwd与shadow同步化( /usr/sbin/pwconv )
    建立该账号的密码 ( passwd acount )
    建立使用者家目录 ( cp -r /etc/skel    /home/acount )
    更改家目录属性( chown -R acount:group  /home/acount) 
    
    
    建立新的群组 test ,设其 GID 为 520
    [root @test /root ]# vi /etc/group
    ----略
    test:x:520:test             <==新增群组,且群组的人为 test ,GID 为 520 
    
    建立 test 的各个属性 
    [root @test /root ]# vi /etc/passwd 
    ----略
    test:x:520:520:testing account:/home/test:/bin/bash   <==建立各个属性 
    
    同步化 /etc/passwd 与 /etc/shadow
    [root @test /root ]# pwconv         <==将 passwd 的资料转入 /etc/shadow 中! 
    
    建立密码
    [root @test /root ]# passwd test    <==建立使用者 test 密码
    Changing password for user test 
    New password:
    Retype new password: 
    passwd: all authentication tokens updated successfully 
    
    建立家目录并转化家目录的拥有者
    [root @test /root ]# cp -r /etc/skel /home/test
    [root @test /root ]# chown -R test:test /home/test
    
    
    如何添加大量用户?
    1vi user.txt
    2、newusers < user.txt
    3、pwunconv
    4、vi passwd.txt
    5、chpasswd < passwd.txt
    6、pwconv
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    权限管理

    • 访问权限
      • 读取:允许查看文件内容、显示目录列表
      • 写入:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
      • 可执行:允许运行程序、切换目录
    • 归属(所有权)
      • 属主:拥有该文件或目录的用户帐号
      • 属组:拥有该文件或目录的组帐号
    [root@localhost ~]# ls -l install.log
    -rw-r--r--  1   root    root    34298    04-02   00:23    install.log
    文件类型          属主    属组
    
    • 1
    • 2
    • 3
    修改文件权限
    • chmod命令
      • -R:递归修改指定目录下所有文件、子目录的权限
    格式1:chmod   [ugoa]  [+-=]  [rwx]  文件或目录... 
    	u、g、o、a 分别表示 属主、属组、其他用户、所有用户 
    	+、-、= 分别表示  增加、去除、设置权限
    
    chmod a-x temp rw- rw- rw-    收回所有用户的执行权限
    chmod og-w temp rw- r-- r--     收回属组用户和其他用户的写权限 
    chmod g+w temp rw- rw- r--     赋予属组用户写权限
    chmod u+x temp rwx rw- r--     赋予文件属主执行权限
    chmod go+x temp rwx rwx r-x    赋予属组用户和其他用户执行权限
    
    
    格式2:chmod n1n2n3 文件或目录...
    	n1n2n3 表示3位八进制数
    
    参数说明:
    	1. r 对应数值4, w 对应数值2, x 对应数值1
    	2. rwx合起来就是4+2+1=7,即上边表示为n1
    	3. rwxrwxrwx表权限全开放的文件,数值777
    例如当属性为 [ -rwxrwx--- ] 则是:
    	owner  = rwx  = 4+2+1 = 7 
    	group  = rwx  = 4+2+1 = 7 
    	others = ---  = 0+0+0 = 0
    
    例如:要将属性变成-rwxr-xr--  
    	-rwxr   -x     r– 
        [4+2+1][4+0+1][4+0+0]=754 
        所以输入: chmod 754 filename 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    修改用户属组
    • chgrp
      • chgrp [-cfhRv][--help][--version][所属群组][文件或目录...] 或 chgrp [-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]
      • -c , --changes 效果类似 -v 参数,但仅回报更改的部分
      • -f , --quiet或–silent 不显示错误信息
      • -h , --no-dereference 只对符号连接的文件作修改,而不更动其他任何相关文件
      • -R , --recursive 递归处理,将指定目录下的所有文件及子目录一并处理
      • -v , --verbose 显示指令执行过程
      • –help 在线帮助
      • –reference=<参考文件或目录> 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同
      • –version 显示版本信息
    #改变文件的群组属性
    [root@localhost ~/shell]# chgrp -v bin demo1.txt
    demo1.txt 文件的属主已经改变为 bin
    
    #根据指定文件改变文件的群组属性
    [root@localhost ~/shell]# chgrp --reference=demo1.txt demo6.txt
    改变文件 demo6.txt 的群组属性,使得文件 demo6.txt 的群组属性和参考文件 demo1.txt1 的群组属性相同
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • chmod :改变文件属主(只有管理员可以使用此命令)

      • chown USERNAME file,…
        • -R: 修改目录及其内部文件的属主
        • –reference=/path/to/somefile file,…
      • chown USERNAME:GRPNAME file,…
    • umask:控制默认权限,一个shell进程中的umask值仅在当前shell进程中才有效。

    特殊权限
    suid
    • 范围:只能针对二进制命令文件
    • 作用:让普通用户拥有二进制命令文件所有者的权限
    [root@localhost ~]# ls -l /usr/bin/passwd
    
    -rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
    
    [root@localhost ~]# ll /etc/shadow
    
    ---------- 1 root root 977 Apr 3 14:11 /etc/shadow
    
    可见,passwd具有s权限,具有root用户权限,才能修改密码,普通用户具有执行权限但不一定拥有以root身份执行时的权限,添加s权限后就具有了root用户的执行权限
    
    #修改权限u+s
    [root@localhost ~]# chmod u+s /bin/netstat
    #使用u-x命令(没有执行权限)
    [root@localhost ~]# chmod u-x /bin/netstat
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    sgid
    • 作用:和SUID一样,只是SGID是获得该程序所属用户组的权限
    #修改权限
    [root@localhost ~]# chmod g+s /usr/bin/locate
    [root@localhost ~]# chmod g-x /usr/bin/locate
    
    • 1
    • 2
    • 3
    sbit
    • 作用:只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除
    [root@localhost ~]# chmod o-x /tmp/
    [root@localhost ~]# chmod o+s /tmp/
    
    • 1
    • 2
    附加权限
    • 文件权限除了r、w、x外还有s、t、i、a权限:
      • s:文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root身份执行
      • t :设置粘着位,一个文件可读写的用户并一定相让他有删除此文件的权限,如果文件设置了t权限则只用属主和root有删除文件的权限,通过chmod +t filename 来设置t权限。
      • i:不可修改权限 例:chattr u+i filename 则filename文件就不可修改,无论任何人,如果需要修改需要先删除i权限,用chattr -i filename就可以了。查看文件是否设置了i权限用lsattr filename。
      • a:只追加权限, 对于日志系统很好用,这个权限让目标文件只能追加,不能删除,而且不能通过编辑器追加。可以使用chattr +a设置追加权限。
    设置附加权限
    chattr:
    设置附加权限
    i:锁定文件,不能编辑,不能修改,不能删除,不能移动,可以执行
    a:仅可以追加文件,不能编辑,不能删除,不能移动,可以执行
    #+增加选项   -减少选项    =等于某个权限
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    #创建文件并设置属性
    [root@centos7 ~]# touch file_a file_i
    [root@centos7 ~]# lsattr file_a file_i
    ---------------- file_a
    ---------------- file_i
    
    #设置属性
    [root@centos7 ~]# chattr +a file_a
    [root@centos7 ~]# chattr +i file_i
    
    #a权限,无法覆盖写入和删除文件
    [root@centos7 ~]# echo 111 > file_a
    -bash: file_a: Operation not permitted
    [root@centos7 ~]# rm -f file_a
    rm: cannot remove ‘file_a’: Operation not permitted
            
    #a权限,只能追加,适用于日志文件        
    [root@centos7 ~]# echo 111 >> file_a
    [root@centos7 ~]# cat file_a
    111
    
    # i权限,无法写入,无法删除
    [root@centos7 ~]# echo 111 > file_i
    -bash: file_i: Permission denied
    [root@centos7 ~]# echo 111 >> file_i
    -bash: file_i: Permission denied
    [root@centos7 ~]# rm -f file_i
    rm: cannot remove ‘file_i’: Operation not permitted
    [root@centos7 ~]# chattr -a file100
    chattr: No such file or directory while trying to stat file100
    #解除限制    
    [root@centos7 ~]# chattr -a file_a
    [root@centos7 ~]# chattr -i file_i
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    查看附加权限
    #设置属性
    [root@centos7 ~]# chattr +a file_a
    [root@centos7 ~]# chattr +i file_i
    [root@centos7 ~]# lsattr file_a file_i
    -----a---------- file_a
    ----i----------- file_i
    #查看文件及属性
    [root@centos7 ~]# lsattr file_a file_i
    ---------------- file_a
    ---------------- file_i
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    apache配置https证书问题记录
    rabbitmq之总览全局
    06-引入Express创建web服务器、接口封装并使用postman测试,静态资源托管
    elasticsearch无法访问9200端口
    Real-Time Rendering——18.4 Optimization优化
    Spire.Office for Java 7.8.6 Hotfix
    算法练习(三)井字棋
    Redis安装
    基于docker和cri-dockerd部署k8sv1.26.3
    PHP foreach 循环跳过本次循环
  • 原文地址:https://blog.csdn.net/a13554371686/article/details/126790384