一、用户user

Linux用户分为管理员和普通用户,普通用户又分为系统用户和自定义用户。可以查看/etc/passwd来查看。如下所示:(部分)

root:x:0:0:root:/root:/bin/bash
pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
lilei:x:500:500::/home/lilei:/bin/bash
wangcai:x:502:503::/home/wangcai:/bin/bash


1、系统管理员:即root帐户,UID号为0,拥有所有系统权限,它类似于Windows系统中的administrator帐户,是整个系统的所有者。
2、系统用户:linux为满足自身系统管理所内建的账号,通常在安装过程中自动创建,不能用于登录操作系统。UID在1-499之间(centos7为1-999之间)。像上面的sshd、pulse等等用户即是此类用户。它类似于Windows中的system帐户,当然权限远没有system帐户高。
3、自定义用户:由root管理员创建供用户登录系统进行操作使用的账号,UID在500以上(centos7为1000以上)。它类似于Windows系统中users用户组中的帐户 。

而在该文件中,每一行用户记录的各个数据段用“:”分隔,分别定义了用户的各方面属性。各个字段的顺序和含义如下:

我们以这个wangcai普通用户为例

wangcai:x:502:503::/home/wangcai:/bin/bash

注册名:口令:用户标识号(uid):组标识号(gid):注释性描述:用户主目录:用户登陆的shell类型


 (1)注册名(login_name):用于区分不同的用户。在同一系统中注册名是惟一的。在很多系统上,该字段被限制在8个字符的长度之内;并且要注意,通常在Linux系统中对字母大小写是敏感的,登录名中不能有冒号(:),因为冒号在这里是分隔符。为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。这与MSDOS/Windows是不一样的。


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


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


(4)组标识号(GID):这是当前用户的工作组标识。具有相似属性的多个用户可以被分配到同一个组内,每个组都有自己的组名,且以自己的组标 识号相区分。像UID一样,用户的组标识号也存放在passwd文件中。在现代的Unix/Linux中,每个用户可以同时属于多个组。除了在 passwd文件中指定其归属的基本组之外,还在/etc/group文件中指明一个组所包含用户。


(5)注释性描述(users):字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。


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


(7)登录Shell(Shell):用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。而当用户shell类型为/sbin/nologin,则是该用户无法登陆系统。

  用户的登录Shell可以指定为某个特定的程序(此程序不是一个命令解释器)。利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux系统要求只有那些在系统中登记了的程序才能出现在这个字段中



二、组group

在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念。同样用户组的信息我们可以在/etc/group中查看。如下所示(部分)

root:x:0:
bin:x:1:bin,daemon
stapdev:x:158:
tcpdump:x:72:
screen:x:84:
lilei:x:500:
admins:x:502:
wangcai:x:503:
sysadmins:x:504

这里我同样只展示出了一部分,它们各个数据间同样用:分隔,每个数据代表的意义也各有不同

我们同样用bin组为例

bin:x:1:bin,daemon

组名:组密码:组标识号(GID):附加组成员

linux组的类别:

  用户的主要组(primary group):用户必须属于一个且只有一个组

  用户的附加组(supplementary group):一个用户可以属于一个或者零个附加组


而文件一般分为

- 所有者

- 所在组

- 其它组


 

所有者

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

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

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

 

文件所在组

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

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

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

 

其它组

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


Linux用户和组的主要配置文件

-/etc/passwd:用户机器属性信息(名称、UID、主组ID等)

-/etc/group:组及其属性信息

-/etc/shadow:用户密码及其相关信息

-/etc/gshadow:组密码及其相关信息


前两个配置文件我们已经介绍过了,这里我们讲一下/etc/shadow文件,/etc/shadow 是/etc/passwd的密码映射过去产生的文件,因为/etc/passwd为所有用户都可读的文件所以会导致用户密码不安全,而/etc/shadow文件只有root能看,其他用户不能访问。

pwconv 将passwd当中的密码映射到了/etc/shadow

pwunconv 取消映射,密码仍然放在/etc/passwd当中

/etc/shadow里的文件如下所示(部分)

postfix:!!:17539::::::
gdm:!!:17539::::::
pulse:!!:17539::::::
sshd:!!:17539::::::
tcpdump:!!:17539::::::
lilei:$6$uPmj3VzY$xXEir7SSxj9R.sjbki3PfqDjNmdjavplQ5HXZjcGtULLiyenLv1VLHe.6cdidI1wQNjEkijiDfbfXWQc0Plss0:17544:0:99999:7:::
wangcai:!!:17547:0:99999:7:::

这里同样以:为分隔符,隔个字段含义如下

登陆用户名:

用户密码(!!表示没有设置密码):

从1970年1月1日起到密码最近一次被更改的时间:

密码再过几天可以被更改(0表示可以随时被修改):

密码再过几天必须被更改(99999表示99999天后过期,也就相当于永不过期):

密码过期前几天系统提醒用户(默认为一周):

密码过期几天后账号会被锁定:

从1970年1月1日算起,多少天后账号失效:


/etc/gshdow文件同样是/etc/group文件里的密码映射文件

 

grpconv 将组密码映射到了/etc/gshadow

 grpunconv 取消组密码的映射


/etc/gshadow里的文件如下所示:(部分)

stapdev:!::
tcpdump:!::
screen:!::
lilei:!::
admins:!::
wangcai:!::
sysadmins:!::

组名:组密码:组管理员列表:以当前组为附加组的用户列表(分隔符为逗号)