一、用户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:!::
组名:组密码:组管理员列表:以当前组为附加组的用户列表(分隔符为逗号)