一篇文章搞懂linux用户与用户组

介绍

linux是一个多用户系统,给每个用户安排相应的权限,从而达到更好得管理文件的作用,比如说一个用户分配一类文件,让这某一类文件只能让特定的用户进行敏感操作,从而防止因为误操作导致影响到其它的文件,造成系统奔溃

我在这里先对用户组的一些简单的名词进行介绍

  • uid: 用户标识符,每个用户都有一个特定的数值,这样是为了方便执行的时候内核更方便去调用关于你这个用户的信息,不同的用户他们uid一般不一样,比如说root的uid默认为0,普通用户的uid为500-6000,但也有的linux是从1000开始,就比如说kali,然后处在这两个用户之间的就是伪用户的uid
  • gid: 组表示符,意思和用户表示符一样,可以类比起来理解
  • 登陆shell: 这个在另外那篇文章有详细讲到,就是一种连接系统内核于用户的应用程序

linux用户:

linux用户种类

  • 超级用户 :root,uid=0,最高权限管理用户,可以对其它用户的权限进行修改,默认对所有文件都是最高权限,即读写执行

    root是所有类Unix系统的管理员,它的权限是最高的,因此在我们平时使用过程中就会很方便,不会存在上面权限不足的问题,但是相对的安全风险也越大,有些时候就是因为root用户执行的一条错误命令,导致系统出现不可逆的崩溃,总之一句话能力很大,责任更大 -pysnow,大家在使用root用户的时候一定要谨慎,特别是对一些系统文件进行操作的时候
    
  • 普通用户:具有操作系统有限的权限,UID值 500 – 6000

可以存在多个普通用户,普通用户的权限是有限制的,比如说一些根目录的文件只有读的权限,一些敏感文件只有执行而没有读的权限。然后这个普通用户区别于伪用户,他是存在口令的,也就是我们俗称的登陆密码,也有使用shell的权限,并且每个普通用户都有属于自己的家目录,一般位于/home目录下与自己用户同名的文件夹,比如说我的普通用户名是kali,那我的家目录就是/home/kali,这个家目录可以用~代替,当然这个家目录不一定是必须要和你用户名保持一致,你可以修改它。
我们为什么要有这个普通用户呢,首先,肯定是为了保证安全,防止误操作,其次是方便管理,比如说你把你的这个系统交给多个人用,你不可能直接将root的权限给它吧,你肯定是给它一个权限相对较低的用户,让它既能享受到这个系统带来的部分服务的同时,又能防止他们对自己的系统搞破坏。举几个现实的例子,就是校园网的管理员账号,教师账号,学生账号他们对于的权限不同,直播间的超管,普通发弹幕用户等
  • 伪用户:为了满足系统进程需要而特地创建的永久,由于没有给他分配shell,所以不能使用该进行登陆操作,uid为1-499

    又叫系统或者服务用户,一般来说这些用户的作用就是满足当执行某一系统进程时的权限需要,有些系统文件普通用户是没有权限的,所以为了执行这一命令就需要分配更高的权限,但是又不能过高,高到像root用户那样,所以就会根据不同的功能为他们常见不同的用户去执行它
     *一般来说一种命令或者服务对应一个伪用户
     *伪用户不仅是用来执行系统有关的进程,也能使一些第三方服务功能,比如说什么网站服务,可能它的某一部分需要用到高于普通用户的权限,所以在安装这门服务的时候会默认给你的系统添加一个伪用户,使服务正常运行
     *执行一个操作命令时都会以某一特定用户的名义执行,当你使用普通用户登陆的时候你想要执行reboot重启系统命令这一操作按理来说是不允许的,但是为什么在操作的时候又可以了呢,那是因为你执行这个命令的时候是以的系统伪用户中的某一个的身份执行的
    常见的系统伪用户如下:
    bin 拥有可执行的用户命令文件 
    sys 拥有系统文件 
    adm 拥有帐户文件 
    uucp UUCP使用 
    lp lp或lpd子系统使用 
    nobody NFS使用
    

    可以使用cat /etc/passwd命令查看当前系统的所有用户的详细信息

    linux用户管理

    添加用户
    useradd [option] 用户名字
    
    option选项:
            -c comment 指定一段注释性描述。
            -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
            -g 用户组 指定用户所属的用户组。
            -G 用户组,用户组 指定用户所属的附加组。
            -s Shell文件 指定用户的登录Shell。
            -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
    

    例子

    • useradd -c 博客专用例子用户 pysnow
      

    image-20211213011852127

    image-20211213011859952

    可以看到这个comment就是给用户添加的一串描述,实际上没有任何作用除了方便知道用户的功能,这样防止你创建的用户多了之后不知道哪个用户是用来干什么的

    • xxxxxxxxxx useradd -u 1314 -g 1111 -s /usr/bin/bash -dm /home/example pysnow
      

      image-20211213013330599

      注意事项

      • 如果在创建用户的时候除了用户名以外什么都不指明的话,那就会默认为一下结果

        comment的信息为空或者*
        
        家目录默认在/home下与当前该创建的用户名字相同的文件夹内
        
        uid会默认在当前所有用户中最高的uid的基础上加1,比如说我当前系统中用户uid数值最大的是1314,那我通过useradd example命令创建的用户,它的uid就该为1315
        
        gid默认会与uid相同除非你主动去配置或者修改它,而且当你通过-g添加用户组的时候,选择的gid必须是已经存在的
        
        bash默认使用/bin/sh
        
        • 通过-o选项创建的两个或者多个uid相同的用户时,会把这多个用户看做时一个用户,但是不影响这几个用户的功能,也就是说从功能上看这几个用户还是分开的
删除用户

​ 删除用户实际上就是对文件部分信息的删除,也就是删除/etc/passwd,/etc/shadow中有关该用户的信息等等

​ 命令

            ```bash

userdel [option] 用户名
```

常见的option选项有-r,即递归删除,将该用户的家目录一同删除
userdel -r 用户名
修改用户

​ 修改用户的属性,也就是前面useradd里所提到的那些属性

usermod [option] 用户名
常见的option如上
		-c comment 指定一段注释性描述。
        -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
        -g 用户组 指定用户所属的用户组。
        -G 用户组,用户组 指定用户所属的附加组。
        -s Shell文件 指定用户的登录Shell。
        -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
管理用户口令

也就是管理用户的登录密码,之前我们通过useradd命令创建的用户默认是没有口令的,也就是没有登陆密码,是别系统锁定的,无法登陆以及使用,所以我们为了登陆使用该新增用户,必须为其添加口令

passwd [option] 用户名  //修改其它用户口令,一般时用root用户进行操作
passwd [option]			   //修改默认用户名,也就是当前用户

​ 常用option如下

-l(lock) 锁定口令,即禁用账号。
-u(unlock) 口令解锁。
-d(delete) 使账号无口令。
-f(force) 强迫用户下次登录时修改口令。

注意事项

  • 普通用户为自己修改口令的时候,会询问当前用户口令,类似于qq修改密码
  • 而是用root为别人修改口令的时候不会询问,类似qq的召回密码功能
  • 当使用-d选项将某一用户或者将自己当前用户的口令修改为无的时候,下次再次尝试登陆的时候系统会默认不让你登陆,也可以使用-l选项达到同样不被允许登陆的目的

linux用户属性

用户属性
用户名:是代表用户账号的字符串。
通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符。
为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。

口令:即用户名的登录密码,一些系统中,存放着加密后的用户口令字
虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux 系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”

用户标识符(uid):是一个整数,系统内部用它来标识用户。
一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。
通常用户标识号的取值范围是0~65 535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。

组标识符:类比于用户标识符,表示用户所属的组,且/etc/passwd是与/etc/group对应的

comment(注释性描述):类似于编程里面的注释,编译运行的时候不会运行,但可以起到帮助别人快速看懂代码,字段记录着用户的一些个人情况。
例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux 系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。

主目录:也就是用户的起始工作目录。
它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。

登陆shell:
用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。
Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。
系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。
用户的登录Shell也可以指定为某个特定的程序(此程序不是一个命令解释器)。
利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux 系统要求只有那些在系统中登记了的程序才能出现在这个字段中。
*伪用户:
这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。
用户相关文件
  • 在linux中的/etc目录有一个文件叫做passwd,里面存放了当前系统的所有用户的信息,即用户的属性

  • 同样在当前/etc目录下有个文件叫shadow,用来用户口令加密后的信息,一般普通用户是无权访问的

  • 再同样在当前目录下放着一个文件叫做skel,这是一个配置文件,用于配置创建用户时的那些默认属性

接下来我将对这前两个文件进行详解

  1. /etc/passwd文件

    image-20211213022158006

    用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
    例子:pysnow:x:1314:1111::/home/example:/usr/bin/bash
    用户名:pysnow
    口令:x
    用户标识号:1314
    组标识号:1111
    comment描述:无
    家目录:/home/example
    登陆bash: /usr/bin/bash
    

    image-20211213022714428

    可以看到这个文件中每一行就是代表一个用户的信息,每行的信息都是通过分号将用户的属性分隔开的

  2. /etc/shadow文件

    image-20211213024205048

    由于/etc/passwd文件是所有用户都可读的,如果用户的密码太简单或规律比较明显的话,一台普通的计算机就能够很容易地将它破解,因此对安全性要求较高的Linux系统都把加密后的口令字分离出来,单独存放在一个文件中,这个文件是/etc/shadow文件。 有超级用户才拥有该文件读权限,这就保证了用户密码的安全性。

    /etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生

    它的文件格式与/etc/passwd类似

    登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
    
    例子:pysnow:!:18973:0:99999:7:::
    登录名:"登录名"是与/etc/passwd文件中的登录名相一致的用户账号
    
    加密口令:口令字段存放的是加密后的用户口令字,长度为13个字符。如果为空,则对应用户没有口令,登录时不需要口令;如果含有不属于集合 { ./0-9A-Za-z }中的字符,则对应的用户不能登录。
    
    最后一次修改时间:表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样
    
    最小时间间隔:指的是两次修改口令之间所需的最小天数。
    
    最大时间间隔:指的是口令保持有效的最大天数。
    
    警告时间:字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
    
    不活动时间:表示的是用户没有登录活动但账号仍能保持有效的最大天数。
    
    失效时间:字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。
    

    image-20211213024437407

linux用户组

每一个用户都有属于他的一个或者多个用户组(附加组),这样做的目的是方便管理,比如说当你的系统用户特别多的时候,你一个一个管理不过来,这时候你就可以安装自己的需要将他们分到不同的组,这样以后可以直接通过对组的操作从而达到批量管理用户信息

在linux中默认的是在生成用户的时候自动生成一个组,且组标识符(gid)与用户标识符(uid)一致

linux用户组管理

添加组:
groupadd [option] 用户组

常用option选项:
    -g GID 指定新用户组的组标识号(GID)。
    -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
删除组:
groupdel 用户组
修改组属性
groupmod [option] 用户组

常用option选项:	
    -g GID 为用户组指定新的组标识号。
    -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
    -n新用户组 将用户组的名字改为新名字

linux用户组相关文件

  • 用户分组是Linux 系统中对用户进行管理及控制访问权限的一种手段。

  • 每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。

  • 当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。

  • 用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。

  • 用户组的所有信息都存放在/etc/group文件中。此文件的格式也类似于/etc/passwd文件,由冒号(:)隔开若干个字段,这些字段有

组名:口令:组标识号:组内用户列表

组名:是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。

口令:字段存放的是用户组加密后的口令字。一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*。

组标识号:与用户标识号类似,也是一个整数,被系统内部用来标识组。

组内用户列表:是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。

linux用户组注意

  • 前面我也说过,一个用户能同时具有多个用户组,其实这里的多个组就是多个附加组,所属组只有一个,怎么说呢,就是一个用户只能对应一个用户组,但是一个用户组能够对应多个用户,而为了实现对应多个用户这个操作就出现了附加组这个概念,就这个意思,这也就是为什么我们的那些虚拟机,云服务器能够提权,切换root用户等,因为同一个用户组里面的所有用户互相共享权限

    image-20211213031123347

    就比如说这里图中的kali,它有个附加组就是root

  • 用户可以通过newgrp切换成其它用户组,当然前提是那个用户组是你这个用户的附加组

    newgrp root  //切换到root组
    
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pysnow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值