无论是出于Linux本身的多用户多任务分时操作的性质,还是出于系统安全的考虑,Linux用户和用户组都是这个系统最重要的几块拼图之一。无论是日常使用,还是作为服务器来应用Linux,创建合适的用户、组别,赋于相应的权限,是基本的使用方法。
明天小编为你们整理了Linux用户及用户组管理的相关内容,整篇文字超过一万字,力图为你们展示Linux用户管理的概貌。假如你对于这种知识还不是很熟悉,这么就一定仔细阅读文章了哦~
概述
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个帐号,之后以这个帐号的身分步入系统。
用户的帐号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制她们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每位用户帐号都拥有一个唯一的用户名和各自的口令。
用户在登入时键入正确的用户名和口令后,就才能步入系统和自己的主目录。
完成用户管理的工作有许多种方式,而且每一种方式实际上都是对有关的系统文件进行更改。
用户管理文件介绍
与用户和用户组相关的信息都储存在一些系统文件中linux 用户统一管理,这种文件包括/etc/passwd,/etc/shadow,/etc/group等。
下边分别介绍这种文件的内容。
1./etc/passwd
/etc/passwd文件是用户管理工作涉及的最重要的一个文件。
Linux系统中的每位用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。
这个文件对所有用户都是可读的。它的内容类似下边的事例:
从前面的事例我们可以看见,/etc/passwd中一行记录对应着一个用户,每行记录又被逗号(:)分隔为7个数组,其格式和具体涵义如下:
1)"用户名"是代表用户帐号的字符串。
一般宽度不超过8个字符,但是由大小写字母和/或数字组成。登陆名中不能有逗号(:),由于顿号在这儿是分隔符。
为了兼容起见,登陆名中最好不要包含点字符(.),而且不使用连字符(-)和减号(+)打头。
2)“口令”一些系统中,储存着加密后的用户口令字。
其实这个数组储存的只是用户口令的加密串,不是明文,然而因为/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。为此,如今许多Linux系统(如SVR4)都使用了shadow技术linux 用户统一管理,把真正的加密后的用户口令字储存到/etc/shadow文件中,而在/etc/passwd文件的口令数组中只储存一个特殊的字符,比如“x”或者“*”。
3)“用户标示号”是一个整数,系统内部用它来标示用户。
通常情况下它与用户名是一一对应的。假如几个用户名对应的用户标示号是一样的,系统内部将把它们视为同一个用户,并且它们可以有不同的口令、不同的主目录以及不同的登陆等。
一般用户标示号的取值范围是0~65535。0是超级用户root的标示号,1~99由系统保留,作为管理帐号,普通用户的标示号从100开始。在Linux系统中,这个界限是500。
4)“组标示号”字段记录的是用户所属的用户组。
它对应着/etc/group文件中的一条记录。
5)“注释性描述”字段记录着用户的一些个人情况。
比如用户的真实姓名、电话、地址等,这个数组并没有哪些实际的用途。在不同的Linux系统中,这个数组的格式并没有统一。在许多Linux系统中,这个数组储存的是一段任意的注释性描述文字,用做finger的输出。
6)“主目录”,也就是用户的起始工作目录。
它是用户在登入到系统以后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用房主目录的名称就是该用户的登陆名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则依照具体情况设置。
7)用户登陆后,要启动一个进程,负责将用户的操作传给内核linux关机,这个进程是用户登入到系统后运行的协程或某个特定的程序,即Shell。
Shell是用户与Linux系统之间的插口。Linux的Shell有许多种,每种都有不同的特性。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。
系统管理员可以依据系统情况和用户习惯为用户指定某个Shell。倘若不指定Shell,这么系统使用sh为默认的登陆Shell,即这个数组的值为/bin/sh。
用户的登陆Shell也可以指定为某个特定的程序(此程序不是一个命令类库)。
借助这一特性,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就手动退出了系统。有些Linux系统要求只有这些在系统中登记了的程序能够出现在这个数组中。
8)系统中有一类用户称为伪用户(psuedousers)。
那些用户在/etc/passwd文件中也占有一条记录,而且不能登入,由于它们的登陆Shell为空。它们的存在主要是便捷系统管理,满足相应的系统进程对文件属主的要求。
常见的伪用户如下所示:
其他账户文件
1、除了前面列举的伪用户外,还有许多标准的伪用户,比如:audit,cron,mail,usenet等,它们也都各自为相关的进程和文件所须要。
因为/etc/passwd文件是所有用户都可读的,假如用户的密码太简单或规律比较显著的话,一台普通的计算机就能否很容易地将它破解,因而对安全性要求较高的Linux系统都把加密后的口令字分离下来,单独储存在一个文件中,这个文件是/etc/shadow文件。有超级用户才拥有该文件读权限,这就保证了用户密码的安全性。
2、/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令按照/etc/passwd中的数据手动形成。
它的文件格式与/etc/passwd类似,由若干个数组组成,数组之间用":"隔开。这种数组是:
"登陆名"是与/etc/passwd文件中的登陆名相一致的用户帐号
"口令"数组储存的是加密后的用户口令字,宽度为13个字符。假如为空,则对应用户没有口令,登陆时不须要口令;假如富含不属于集合{./0-9A-Za-z}中的字符,则对应的用户不能登入。
"最后一次更改时间"表示的是从某个时刻起,到用户最后一次更改口令时的天数。时间起点对不同的系统可能不一样。诸如在SCOLinux中,这个时间起点是1970年1月1日。
"最小时间间隔"指的是两次更改口令之间所需的最小天数。
"最大时间间隔"指的是口令保持有效的最大天数。
"警告时间"数组表示的是从系统开始警告用户到用户密码即将失效之间的天数。
"不活动时间"表示的是用户没有登陆活动但帐号仍能保持有效的最大天数。
"失效时间"数组给出的是一个绝对的天数,假如使用了这个数组,这么就给出相应帐号的生存期。届满后,该帐号就不再是一个合法的帐号,也就不能再拿来登陆了。
下边是/etc/shadow的一个反例:
3、用户组的所有信息都储存在/etc/group文件中。
将用户分组是Linux系统中对用户进行管理及控制访问权限的一种手段。
每位用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。
当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登陆时所属的默认组,而其他组称为附加组。
用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。
用户组的所有信息都储存在/etc/group文件中。此文件的格式也类似于/etc/passwd文件,由逗号(:)隔开若干个数组,这种数组有:
"组名"是用户组的名称,由字母或数字构成。与/etc/passwd中的登陆名一样,组名不应重复。
"口令"数组储存的是用户组加密后的口令字。通常Linux系统的用户组都没有口令,即这个数组通常为空,或则是*。
"组标示号"与用户标示号类似,也是一个整数,被系统内部拿来标示组。
"组内用户列表"是属于这个组的所有用户的列表/b],不同用户之间用冒号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
/etc/group文件的一个反例如下:
用户管理命令
1.添加用户
创建或添加新用户使用useradd命令来实现,其命令用法为:
该命令的option选项较多,常用的主要有:
-c注释用户设置对帐户的注释说明文字
-d主目录指定拿来替代默认的/home/username的主目录
-m若主目录不存在,则创建它。-r与-m相结合,可为系统帐户创建主目录
-M不创建主目录
-edate指定帐户过期的日期。日期格式为MM/DD/YY
-fdays账号过期几日后永久停权。若指定为-,则立刻被停权,若为-1,则关掉此功能
-g用户组指定将用户加入到那个用户组,该用户组必须存在
-G用户组列表指定用户同时加入的用户组列表,各组用逗分隔
-n不为用户创建私有用户组
-sshell指定用户登入时使用的shell,默认为/bin/bash
-r创建一个用户ID大于500的系统帐户,默认不创建对应的主目录
-u用户ID自动指定新用户的ID值,该值必须惟一,且小于499
-ppassword为新建用户指定登陆密码。此处的password是对应登陆密码经MD5加密后所得到的密码值,不实真实密码原文,因而在实际应用中,该参数选项使用较少,一般单独使用passwd命令来为用户设置登陆密码。
示例:
若要创建一个名为nisj的用户,并作为babyfish用户组的成员,则操作命令为:
添加用户时,若未用-g参数指定用户组,则系统默认会手动创建一个与用户账号同名的私有用户组。若不须要创建该私有用户组,则可选用-n参数。
例如,添加一个名为nsj820的帐户,但不指定用户组,其操作结果为:
创建用户帐户时,系统会手动创建该用户对应的主目录,该目录默认置于/home目录下,若要改变位置,可以借助-d参数指定;对于用户登入时使用的shell,默认为/bin/bash,若要修改,则使用-s参数指定。
比如,若要创建一个名为vodup的帐户,主目录置于/var目录下,并指定登陆shell为/sbin/nologin,则操作命令为:
2.设置账号属性
对于已创建好的用户,可使用usermod命令来更改和设置帐户的各项属性,包括登陆名,主目录,用户组,登陆shell等,该命令用法为:
部份option选项:
(1)改变用户账户名
使用-l参数来实现,命令用法为:
比如,若要将用户nsj820改名为nsj0820,则操作命令为:
从输出结果可见,用户名已修改为nsj0820。主目录仍为原先的/home/nsj820,若也要修改为/home/nsj0820,则可通过执行以下命令来实现
(2)锁定帐户
若要临时严禁用户登入,可将该用户帐户锁定。锁定帐户可借助-L参数来实现,其命令用法为:
linux锁定用户,是通过在密码文件shadow的密码数组前加“!”来标示该用户被锁定。
但通过root用户进去,之后su到被锁定的用户,是可以进去的。
(3)解锁帐户
要解锁帐户,可以使用带-U参数的usermod命令来实现。
3.删掉帐户
要删掉帐户,可以使用userdel命令来实现,其用法为:
-r为可选项,若带上该参数,则在删掉该帐户的同时,一并删掉该帐户对应的主目录。
若要设置所有用户帐户密码过期的时间,则可通过更改/etc/login.defs配置文件中的PASS_MAX_DAYS配置项的值来实现,其默认值为99999,代表用户帐户密码永不过期。其中PASS_MIN_LEN配置项用于指定帐户密码的最小宽度,默认为5个字符。
4.设置用户登入密码
使用passwd命令来设置,其命令用法为:
若指定了账户名称,则设置指定帐户的登陆密码,原密码手动被覆盖。只有root用户才有权设置指定帐户的密码。通常用户只能设置或更改自己帐户的密码(不带参数)。
比如,若要设置nisj帐户的登录密码,则操作命令为:
帐户登入密码设置后,该帐户就可以登入系统了。
5.锁定/解锁帐户密码及查询密码状态、删除帐户密码
在linux中,不仅用户帐户可被锁定外,帐户密码也可被锁定,任何一方被锁定后,都将难以登陆系统。只有root用户才有权执行该命令,锁定帐户密码使用带-l选项的passwd命令,其用法为:
要查询当前帐户的密码是否被锁定,可以使用带-S参数的passwd命令来实现linux应用程序,其用法为:
比如
如要删掉帐户的密码,使用带-d参数的passwd命令来实现,该命令也只有root用户才有权执行,其用法为:
账户密码被删掉后,将不能登入系统,除非重新设置密码。
6.创建用户组
用户和用户组属于多对多关系,一个用户可以同时属于多个用户组,一个用户组可以包含多个不同的用户。
创建用户组使用groupadd命令,其命令用法为:
若命令带有-r参数,则创建系统用户组,该类用户组的GID值大于500;若没有-r参数,则创建普通用户组,其GID值小于或等于500.
7.更改用户组属性
用户组创建后,按照须要可对用户组的相关属性进行更改。对用户组属性的更改,主要是更改用户组的名称和用户组的GID值。
(1)改变用户组的名称
若要对用户组进行重命名,可使用带-n参数的groupmod命令来实现,其用法为:
对于用户组更名,不会改变其GID的值
例如,若要将student用户组改名为teacher用户组,则操作命令为:
(2)重设用户组的GID
用户组的GID值可以重新进行设置更改,但不能与已有用户组的GID值重复。对GID进行更改,不会改变用户名的名称。
要更改用户组的GID,可使用带-g参数的groupmod命令,其用法为:
比如,若要将teacher组的GID修改为506,则操作命令为:
8.删掉用户组
删掉用户组使用groupdel命令来实现,其用法为:
在删掉用户组时,被删掉的用户组不能是某个帐户的私有用户组,否则将难以删掉,若要删掉,则应先删掉引用该私有用户组的帐户,之后再删掉用户组。
9.添加用户到指定的组/从指定的组中移除用户
可以将用户添加到指定的组,使其成为该组的成员。其实现命令为:
若要从用户组中移除某用户,其实现命令为:
比如:
10.设置用户组管理员
添加用户到组和从组中移除某用户,不仅root用户可以执行该操作外,用户组管理员也可以执行该操作。
要将某用户委派为某个用户组的管理员,可使用以下命令来实现;
用户管理员只能对授权的用户组进行用户管理(添加用户到组或从组中删掉用户),无权对其他用户组进行管理。
11.用户其他相关
另外,linux还提供了id,whoami和groups等命令,拿来查看用户和组的状态。id命令用于显示当前用户的uid,gid和所属的用户组的列表;whoami用于查询当前用户的名称;groups用于产看指定用户所隶属的用户组。
同时,我们可以使用图形界面来管理用户和用户组,系统--->管理--->用户和组群可以打开相应的配置界面。
附:
将一个用户添加到用户组中,千万不能直接用:
这样做会使你离开其他用户组,仅仅做为这个用户组groupA的成员。
应当用加上-a选项:
-a代表append,也就是将自己添加到用户组groupA中,而毋须离开其他用户组。
本文原创地址://gulass.cn/lyhgldqmfscz.html编辑:刘遄,审核员:暂无