用户和组管理(1.0)

linux系统中每一个文件和程序都归属于一个特定的用户。每个用户和我们大家一样都有一个号来标识它,这个号叫作用户ID(UID)。系统中每个用户至少属于一个用户分组,这个小组由系统管理员建立,每个小组都会有一个分组号来标识分组,叫作分组ID(GID)。

每位用户的权限可以被定义为普通用户和根用户。普通用户只能访问其拥有的或者有权限执行的文件。不论根用户是否是这些文件和程序的所有者,根用户能够访问系统全部的文件和程序,根用户通常被称为超级用户,其权限是系统中最大的,可以执行任何操作。

用户账号文件

linux继承了Unix传统的方法,把全部用户信息保存为普通的文本文件。用户可以通过对这些文件的修改来管理用户和组

1.用户账号文件--/etc/passwd

/etc/passwd是一个简单的文本文件,添加新用户的时候,在/etc/passwd文件里就会产生一个对应的设置项。这个文件就是通常所说的“口令文件”,该文件用于用户登录时校验用户的登录名、加密的口令、用户ID、默认的用户分组ID、GECOS(general electric comprehensive operating system)字段、用户登录子目录以及登陆后使用的shell。该文件中每一行保存一个用户的资料,而用户资料的每一个数据项之间采用冒号“:”分隔


(1)登录名:注意它的唯一性,其长度一般不超过32个字符,它们可以包括冒号和换行之外的任何字符。登录名要区分大小写。放在/etc/passwd文件的开头部分的用户是系统定义的虚拟用户bin、daemon

(2)加密的口令:当编辑/etc/passwd文件来创建一个新账号时,在加密口令字段的位置要放一个星号(*)。这个星号防止未授权就使用该账号,直到设置了真实的口令为止。

(3)UID:是32位无符号整数,它能表示从0~4294967296的值。因为和旧系统之间的互操作问题,建议在可能的情况下将站点上的最大UID号限制在32767.root的UID为0.虚拟登录名的UID号比较小。为了能够给将来可能添加的任何非真实用户提供足够的空间,一般从100或更高开始分配真实用户UID。UID在整个机构中是唯一的

(4)GID:组的ID是一个32位整数。GID0是给root的组保留的。GID 1通常指的是名为“bin”的组,GID2指的是“daemon”组

(5)GECOS字段:通常用来定义每个用户的个人信息

(6)用户的登录子目录:每个用户都需要有地方保存自己的配置文件。这就需要让用户工作在自己定制的工作环境中以免改变其他用户的操作环境。这个地方就叫做用户登录子目录。当用户登录之后,他们就进入到自己的主目录中。如果登录时找不到用户的主目录,系统就会显示诸如“no home directory”的消息。要禁止没有主目录的用户登录,可以把/etc/login.defs中的DEFAULT_HOME设置为no

(7)登录shell:用户上机后运行的shell,默认情况下是/bin/bash。可以使用chsh命令来改变自己所用的shell。文件/etc/shells中包括了chsh命令允许用户选择使用的有效shell列表。RED hat会在所选的shell不再此列表中时发出警告。

用“vi”命令查看/etc/passwd的内容如下:


其中有如下传统用户。

bin:系统命令的传统属主

在一些老UNIX系统上,bin用户是包含系统命令的目录的属主,还是大多数命令本身的属主。如今这种账号经常被看作是多余的(或者甚至有些不安全),因此现代操作系统通常就只使用root账号了

daemon:无特权系统软件的属主

为操作系统的一部分却不需要由root作其属主的文件和进程,有时可设定其为daemon。其中的说法是,这种约定能有助于避免采用root做属主带来的危险。出于类似的原因,还有一个叫作“daemon”的组。和bin账号类似,大多数linux发行商也不怎么用daemon账号

nobody:普通NFS用户

网络文件系统使用nobody账号代表其他系统上的root用户用以进行文件共享。为了去掉远程root用户的特权,远程UID为0的用户必须映射成本地UID0之外的某个用户。nobody账号就充当了这些远程root用户的一般替身。由于要求nobody账号代表一个普通的、权利相对来说比较小的用户,因此这个账号不应该拥有任何文件。若它确实拥有文件的话,远程roots就可以控制它们。传统上给nobody用户的UID是-1或者-2,在有些发行版本上仍然能看到这项约定,在这些发行版上,nobody用户的UID是-1或者-2,在有些发行版本上仍然能看到这项约定,在这些发行版本上,nobody用户的UID为65534(-2的16位二进制补码),其它发行版本则指派一个小编号UID,类似任何别的系统用的登录账号,这样做更合理。

2.用户影子文件--shadow

由于/etc/passwd是一个简单的文本文件,以纯文本显示加密口令的做法存在安全隐患。同时,由于/etc/passwd文件是全局可读的,加密算法公开,恶意用户取得了/etc/passwd文件,便极有可能破解口令。linux/UNIX广泛采用了“shadow文件”机制,将加密的口令转移到/etc/shadow文件里,该文件只可被root超级用户读取,同时/etc/passwd文件的密文域显示一个x,从而最大限度的减少了密文泄露的机会

shadow文件的每行是8个冒号分隔的9个域,格式如下:


登录名

加密后的口令

上次修改口令的时间

两次修改口令之间的最少天数

两次修改口令之间的最大天数。若最大天数是99999,则永远不过期。

在口令作废之前多少天,login程序应该开始警告用户口令即将过期

在达到了最大口令作废天数之后,登录账号作废之前必须等待的天数

账号过期的天数,若该字段的值为空,则该账号永远不过期

保留字段,目前为空

使用vi编辑器查看影子文件/etc/shadow内容如下


3.使用pwck命令验证用户文件

linux提供了pwck命令分别验证用户文件,以保证账号文件的一致性和正确性。pwck命令用来验证用户账号文件和影子文件的一致性,验证文件中的每个数据项中每个域的格式以及数据的正确性。如果发现错误,该命令将会提醒用户删除错误的数据项。

该命令主要验证每个数据项是否具有正确的域数目、唯一的用户名、合法的用户和组标识、合法的主要群组、合法的主目录和合法的登录shell

域数目与用户名错误是致命的,需要用户删除整个数据项。其他的错误均为非致命的,需要用户修改,不一定要删除整个数据项

输入pwck验证/etc/passwd文件


添加用户

1.添加用户命令--useradd

功能是向系统中添加用户或更新创建用户的默认信息

该命令的使用格式为:

useradd 【选项】 username

选项如下

-c comment:描述新用户账号,通常为用户全名

-d home-dir:设置用户主目录,默认值为用户的登录名,并放在/home目录下

-e expire_day:用YYYY-MM-DD设置账号过期日期expire_day

-f inactivity:设置口令失效时间。inactivity值为0时,口令过期后账号立即失效(被禁用);inactivity值为-1时,口令过期后账号不会被禁用

-g group-name:用户默认组的组名或组号码,该组在指定前必须存在

-G 组名:指定用户附加组

-m:主目录不存在则创建它

-M:不要创建主目录

-n:不要为用户创建用户私人组

-r:创建一个UID小于500的不带主目录的系统账号,即伪用户账号

-s:shell类型,设定用户使用的登录shell

-u:用户ID,它必须是唯一的,且大于499

在linux账号中可以分为超级用户、普通用户和伪用户。超级用户的UID为0,普通用户的UID在500~60000之间,而且其操作权限受到限制。伪用户又叫系统用户,其UID在1~499之间,仅限制在本机登录。

2.设置密码命令--passwd

处于系统安全考虑,linux系统中每一个用户除了有用户名外,还有其对应的用户口令。因此,使用useradd命令增加用户时,还需要用passwd命令为每一个新增加的用户设置口令。用户以后可以随时用passwd命令改变自己的口令

该命令的使用格式为:

passwd  用户名

其中用户名需修改口令的用户名,只有超级用户可以使用“passwd 用户名”来修改其他用户的口令,普通用户只能用不带参数的passwd命令修改自己的口令

提示:口令至少应该是6位,最好设置字符、字母、数字等混合密码,普通数字密码也可以执行。

设置密码的时候需要输入两次口令,如果两次不匹配,系统会给出提示。如果输入的口令过于简单,系统也会给出提示。

又如,建立一个用户名为jerry,描述信息为Jerry,用户组为jerry,登录shell为/bin/csh,登录主目录为/home/Jeffery,用户ID·为480,账户失效日期为2026-12-31,使用如下命令:

useradd -r jeffery -c "Jerry" -g jerry -s /bin/csh -d /home/Jeffery -u 480 -e 2026-12-31

注意:当设置密码时,输入的密码并不显示在光标处,此时直接输入即可,输入完毕后按回车键。

修改用户信息

usermod命令用于修改用户信息,其功能是用来修改使用者账号,具体修改信息和useradd命令所添加的信息一样。

该命令的使用格式为:

usermod 【选项】 用户名

选项如下。

-l 新用户名 当前目录名:更改用户名

-d 路径:更改用户主目录

-G 组名:修改附加组

-L 用户账号名:锁定用户账号(不能登录)

-U 用户账号名:解锁用户账号

提示:usermod不允许改变正在使用系统的账号。当“usermod”用来改变user ID时,必须确认该user没在系统中执行任何程序。

删除用户

userdel 命令的功能是用来删除系统中的用户信息

该命令的使用格式为:

userdel 【选项】 用户名

选项如下:

-r:删除账号时,连同账号主目录一起删除

提示:删除用户账号时非用户主目录下的用户文件并不会被删除,管理员必须使用“find”命令搜索删除这些文件

用户组账号文件

/etc/passwd 文件中包含着每个用户默认的分组ID(GID),在/etc/group 文件中,这个GID被映射到该用户分组的名称以及同一分组中的其他成员。/etc/group 文件中含有关于小组的信息,/etc/passwd 的每个GID文件中应当有相应的入口项,入口项中列出了小组名和小组中的用户。这样可以方便地了解每个小组的用户,否则,必须根据GID在/etc/passwd文件中从头至尾寻找同组用户,这提供了一个快捷的寻找途径。

1.用户组账号文件--group

/etc/group 文件包含了linux组的名称和每个组中的成员列表。例如:

wheel: x: 10: evi,garth,trent

每一行代表了一个组,其中包含以下4个字段

·组名

·被加密的口令(已被废弃,很少使用)

·GID

·成员列表,彼此用逗号隔开(注意不要加空格)

为了避免与厂家提供的GID发生冲突,一般从GID100开始分配本地组

使用vi命令查看/etc/group,信息如下


以上文件中第二行作为例子,它说明在系统中存在一个bin用户组,信息如下

用户组名为bin

用户口令已经加密用“x”表示

GID为1

同组的组成员有root,bin,daemon

2.用户组账号影子文件-gshadow

如同用户账号文件的作用一样,组账号文件也是为了加强组口令的安全性,防止黑客对其实施暴力攻击,而采用的一种将组口令与组的其他信息相分离的安全机制,其格式如下:

·用户组名

·加密的组口令

·组成员列表

3.使用grpck命令验证组文件

与pwck命令类似,grpck命令用来验证组账号文件(/etc/group)和影子文件(/etc/gshadow)的一致性和正确性。该命令验证文件中每一个数据项中每个域的格式以及数据的正确性,如果发现错误,该命令将会提示用户删除错误数据项。

该命令主要验证每个数据项是否具有:

正确的域数目

唯一的组群标识

合法的成员和管理列表

如果检查发现域数目和组名错误,则该错误是致命的,用户要删除整个数据项,其他的错误均为非致命的,将会需要修改,而不一定要删除整个数据项


建立租

groupadd 命令功能是指定组群名来建立新的组账号,需要时可从系统中取出新的组值。该命令的使用格式为:

groupadd 【选项】 用户组名

选项如下。

-g GID:组ID值。除非使用-o参数,否则该值必须唯一。并且数值不可为负。预设值最小不得小于500而逐次增加,数值0~499传统上是保留给系统账号使用的

-o:配合上面的-g使用可以设定不唯一的组ID

-r:该参数用来建立系统账号即私有组账号

-f:新增一个已经存在的账号,系统会出现错误信息然后结束命令执行操作,此时不新增这个组群;如果使用-f,即使新增组群所使用的GID系统已经存在,结合使用-o选项也可以成功创建组群。

在创建的组中有私有组和标准组。私有组是指创建用户时自动创建的组,标准组是可以包含多个用户的组

修改用户组属性

groupadd命令的功能是修改用户信息

该命令的使用格式为:

groupadd【选项】用户组名

选型如下。

·-g GID:组ID。必须唯一的ID组,除非用-o选项。数字不可为负值。预设最小不得小于99而逐次递增,0~99传统上是保留给系统账号使用的

·-o:配合上面的-g选项使用可以设定不唯一的组ID值

·-n group_name:更改组名

删除组群

groupdel命令比较简单,其功能是用来删除系统中存在的用户组。该命令的使用格式为:

groupdel 用户组名

例如:

//删除用户组 user

groupdel user

提示:如果有任何一个组群的用户在系统中使用并要删除的组为该用户的主分组的时候,不能删除该组群,必须先删除该用户之后才能删除该组群

添加/删除组成员

gpasswd命令的功能是指定组中添加用户或从指定组中删除用户

该命令的使用格式为:

gpasswd 【选项】 组名

选项及含义如下

·-a用户名:向指定组添加用户

·-d 用户名:从指定组中删除用户

例如:

gpasswd -a u1 root             //将u1用户添加到组root中

gpasswd -d u1 root            //将u1用户从组root中删除

显示用户所属组

“groups”命令的功能是显示用户所属的组

该命令的使用格式为:

groups 【用户名】

例如:

groups                      //显示当前用户所属组

groups root            //显示root用户的所属组

批量新建多个用户账号

作为管理员,有时需要新建多个账号,如果使用单个命令将非常费时费力,而通过预先编写用户信息文件和口令文件,利用newusers等命令,则可以批量添加用户账号。

例如,将新入学的2018级学生添加为RHEL5计算机新用户,每个学生账号的用户名是“s+学号”的组合。他们都属于同一个组群15 students。可通过以下步骤完成

1.创建公用组群 15students

groupadd -g 800 15students

2.编辑用户信息文件

使用任何一种文本编辑器输入用户信息,用户信息必须符合/etc/passwd文件的格式,每一行内容为一个用户账号信息,即包含用户名、密码、用户ID、组ID、用户描述、用户主目录和用户使用的shell七项内容。每个用户账号和UID各不相同。编辑完成用户文件(假设文件名为“student.txt”);

s20150101:*:801:800::/home/s20150101:/bin/bash

s20150102:*:802:800::/home/s20150102:/bin/bash

s20150103:*:803:800::/home/s20150103:/bin/bash

s20150104:*:804:800::/home/s20150104:/bin/bash

s20150105:*:805:800::/home/s20150105:/bin/bash

……

3.创建用户口令文件

使用任何一个文本编辑器输入用户名和口令信息。每一行内容为一个用户账号信息,用户名与用户信息文件相对应。假如学生的口令文件保存为“passwd.txt”,其内容如下:

s20150101:111111

s20150102:111111

s20150103:111111

s20150104:111111

s20150105:111111

……

4.利用newusers命令批量创建用户账号

超级用户利用newusers命令批量创建用户账号,只需要把用户信息文件重定向给newusers程序,系统会根据文件信息创建新用户账号:

newusers<student.txt

如果命令执行规程中没有出现错误信息,那么查看/etc/passwd就发现有student.txt文件中用户名出现。系统还会在/home目录中为每一个用户创建主目录。

5.利用pwunconv命令暂时取消shadow加密

为了使口令文件中指定的口令可用,必须先取消原有shadow加密。超级用户利用pwunconv命令能将/etc/passwd文件加密口令解密后保存在/etc/passwd中,并删除/etc/shadow文件;

语法如下:

pwunconv

6.利用chpasswd命令为用户设置口令

超级用户利用chpasswd命令能批量更新用户口令,只需把用户口令文件重定向给chpasswd程序,系统会根据文件中信息设置用户口令:

chpasswd<passwd.txt

如果没有出现任何错误信息,再次查看/etc/passwd文件,会发现passwd.txt文件中的口令均出现在/etc/passwd相应用户的口令字段。

7.利用pwconv命令恢复shadow加密

pwconv命令的功能是将/etc/passwd文件中口令进行shadow加密,并将口令保存在/etc/shadow中:

pwconv

至此批量完成创建用户的所有操作


猜你喜欢

转载自blog.csdn.net/mez_blog/article/details/80350486