您的位置:首页 > 运维架构 > Linux

深入理解Linux系统中的用户和组账号

2013-07-15 19:51 274 查看
一、Linux中的用户和组账号概述
与Windows操作系统相比,Linux系统中的用户和组账号的作用本质上是一样的,同样都是基于用户身份来控制对资源的访问,只不过在表现形式及个别细节方面存在些许差异。下面将给大家介绍Linux系统中用户账号和组账号的相关概念。
1、用户账号
在Linux系统中,根据系统管理的需要将用户账号分为不同的类型,其拥有的权限、担任的角色也各不相同。主要包括超级用户、普通用户和程序用户。
【超级用户】:root用户是Linux系统中默认的超级用户账号,对本主机拥有至高无上的完全权限,类似于Windows系统中的Administrator用户。只有当进行系统管理、维护任务时,才建议使用root用户登录系统,日常事务处理建议使用普通用户账号进行。
【普通用户】:普通用户账号需要由root用户或其他管理员用户创建,拥有的权限受到一定限制,一般只在用户自己的宿主目录中有完全权限。
【程序用户】:在安装Linux系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运行。例如:bin、daemon、ftp、mail等。
2、组账号
基于某种特定联系将多个用户集合在一起,即构成一个用户组,用于表示该组内所有用户的账号称为组账号。每一个用户账号至少属于一个组,这个组称为该用户的基本组(或私有组);如果该用户同时还包括在其他的组中,则这些组称为该用户的附加组(或公共组)。
例如,用户gaoke是总经办的员工,与部门内的其他同事同属于基本组zongjingban,后来因工作安排需要,公司将gaoke加入到信息中心组mis。则此时用户gaoke同时属于zongjingban、mis组,zongjingban组是其基本组账号,而mis组是其附加组账号。
最组账号设置的权限,将适用于组内的每一个用户账号。
3、UID和GID号
Linux系统中的每一个用户账号都有一个数字形式的身份标记,称为UID,对于系统核心来说,UID作为区分用户的基本依据,原则上每个用户的UID号应该是唯一的。root用户账号的UID号为固定值0.而程序用户账号的UID号默认在1-499之间,500-60000UID号默认分配给普通用户账号使用。
与UID相类似,每一个组账号也有一个数字形式的身份标记,称为GID。root组账号的GID号为固定值0,而程序组账号的GID号默认在1-499之间,普通组账号使用的UID号默认为500-60000.
普通用户、组账号使用的默认UID、GID号范围定义在配置文件“/etc/login.defs”中。
【例1】:查看“/etc/login.defs”配置文件中定义的默认UID、GID号范围。



二、Linux中的用户账号管理
Linux系统中的用户账号、密码等信息均保存在相应的配置文件中,直接修改这些文件或者使用用户管理命令都可以对用户账号进行管理。
1、用户账号文件
与用户账号相关的配置文件主要有两个,分别是/etc/passwd、/etc/shadow。前者用于保存用户名称、宿主目录、登录Shell等基本信息,后者用于保存用户的密码、账号有效期等信息。在这连个配置文件中,每一行对应一个用户账号,不用的配置项之间使用冒号“:”进行分隔。
passwd文件中的配置行格式】:
系统中所有用户的账号基本信息都保存在“/etc/passwd”文件中,该文件时文本文件,任何用户都可以读取文件中的内容。
【例2】:查看“/etc/passwd”文件中的前两行、后两行的内容。



在passwd文件开头的部分,包括超级用户root及各程序用户的账号信息,系统中新增加的用户账号信息将保存到passwd文件的末尾。passwd文件的每一行内容中,包括了七个用冒号“:”分隔的配置字段,从左到右各配置字段的含义分别如下所述。
第一字段:用户账号的名称。
第二字段:经过加密的用户密码字串,或者密码占位符“x”。
第三字段:用户账号的UID号。
第四字段:所属基本组账号的GID号。
第五字段:用户全名,可填写与用户相关的说明信息。
第六字段:宿主目录,即该用户登录后所在的默认工作目录。
第七字段:登录Shell等信息,用户完成登录后使用的Shell。
基于系统运行和管理需要,所有用户都可以访问passwd文件中的内容,但是只有root用户才能进行更改。在早期的UNIX操作系统中,用户账号的密码信息也是保存在passwd文件中的,不法用户可以获取密码字串进行暴力破解,这样一来账号安全就存在一定的隐患。因此后来将密码转存入专门的shadow文件中,而passwd文件中仅保留密码占位符“x”。
shadow文件中的配置行格式
shadow文件又被称为“影子文件”,其中保存有各用户账号的密码信息,因此对shadow文件的访问应该进行严格限制。默认只有root用户能够读取文件中的内容,而不允许直接编辑该文件中的内容。
【例3】:查看“/etc/shadow”文件中的前两行、后两行内容。



shadow文件的每一行内容中,包含了九个用冒号“:”分隔的配置字段,从左到右各配置字段的含义分别如下所述。
第一字段:用户账号名称。
第二字段:使用MD5加密的密码字串信息,当为“*”或“!!”时表示此用户不能登录到系统。若该字段内容为空,则该用户无需密码即可登录系统。
第三字段:上次修改密码的时间,表示从1970年01月01日算起到最近一次修改密码时间隔的天数。
第四字段:密码的最短有效天数,自本次修改密码后,必须至少经过该天数才能再次修改密码。默认值为0,表示不进行限制。
第五字段:密码的最长有效天数,自本次修改密码后,经过该天数以后必须再次修改密码。默认值为99999,表示不进行限制。
第六字段:提前多少天警告用户口令将过期,默认值为7.
第七字段:在密码过期之后多少天内禁用此用户。
第八字段:账号失效时间,此字段指定了用户作废的天数(从1970年1月1日起计算),默认值为空,表示账号永久可用。
第九字段:保留字段,目前没有特定用途。
2、useradd命令------添加用户账号
useradd命令可以用于添加用户账号,其基本的命令格式如下所示。
useradd [选项] 用户名
最简单的用法是,不添加任何选项,只使用用户名作为useradd命令的参数,按系统默认配置建立指定的用户账号。在CentOS5系统中,useradd命令在添加用户账号的过程中主要完成以下几项任务。
a、在“/etc/passwd”文件和“/etc/shadow”文件的末尾增加该用户账号的记录。
b、若未明确指定用户的宿主目录,则在“/home”目录下自动创建与该用户账号同名的宿主目录,并在该目录中建立用户的初始配置文件。
c、若没有明确指定用户所属的组,则自动创建与该用户账号同名的基本组账号,组账号的记录信息将保存到“/etc/group”、“/etc/gshadow”文件中。
【例4】:创建名为test01的用户账号,查看passwd、shadow文件中的变化,并确认该用户宿主目录中的初始配置文件。



如果结合useradd命令的各种选项,可以在添加用户账号的同时对UID号、宿主目录、登录Shell等相关属性进行指定。以下列出了useradd命令中用于设置账号属性的几个常见选项。
-u:指定用户的UID号,要求该UID号码未被其他用户使用。
-d:指定用户的宿主目录位置。
-e:指定用户的账户失效时间,可使用YYYY-MM-DD的日期格式。
-g:指定用户的基本组名(或使用GID号)。
-G:指定用户的附加组名(或使用GID号)。
-M:不建立使用者目录,即使/etc/login.defs系统档设定要建立使用者目录。
-s:指定用户的登录Shell。
【例5】:创建名为test02的用户账号,并将其UID号指定为504.
#useradd -u 504 test02
【例6】创建一个辅助管理员账号admin,将其基本组指定为“wheel”、附加组指定为“root”,宿主目录指定为“/admin”。



【例7】:创建一个考试测试用的账号exam01,指定属于users组,该账号于2009-07-30失效。
#useradd -g users -e 2009-07-30 exam01
【例8】:创建用于FTP访问的用户账号ftpuser,将登陆Shell指定为“/sbin/nologin”(禁止登陆),且不为其创建宿主目录。
#useradd -M -s /sbin/nologin ftpuser
在Linux系统中,实际上大部分的程序用户都是被禁止登陆到系统的。



3、passwd命令------为用户账号设置密码
通过useradd命令新添加的用户账号,还必须为其设置一个密码才能用来登陆Linux系统。root用户可以指定账号名称作为参数,对指定账号的密码进行管理。
【例9】:指定用户名test01作为参数,为该用户设置一个登陆密码,重复输入两次进行确认,并查看shadow文件中该用户的密码字串信息。



用户账号具有可用的登录密码以后,就可以从字符终端进行登录了。虽然root用户可以指定用户名作为参数,对指定账号的密码进行管理,但是普通用户却只能执行单独的“passwd”命令修改自己的密码。
普通用户设置自己的密码时,密码要求有一定的复杂性,否则系统可能拒绝进行设置。
【例10】:使用用户账号test01登录终端后,及时更改本账号的登录密码,需要原密码进行验证。



使用passwd命令除了可以修改账号的密码以外,还能够对用户账号进行锁定、解锁,或者也可以将用户的密码设置为空(无需密码即可登录)。相关的几个选项如下:
-d:清空指定用户的密码,仅使用用户名即可登录系统。
-l:锁定用户账户。
-S:查看用户账户的状态(是否被锁定)。
-u:解锁用户账户。
【例11】:将用户账号test01的密码予以锁定,查看shadow文件中的变化(密码串前多了一个“!!”号)并检查用户密码状态。解除对用户test01的锁定,再次检查用户密码状态。



4、usermod命令------修改用户账号属性
对于系统中已经存在的用户账号,可以使用usermod命令重新设置各种属性。usermod命令同样需要指定账号名称作为参数。较常使用的几个选项如下所述:
-u:修改用户的UID号。
-d:修改用户的宿主目录位置。
-e:修改用户的账户失效时间。
-g:修改用户的基本组名。
-G:修改用户的附加组名。
-M:不为用户建立并初始化宿主目录。
-s:指定用户的登录Shell。
-l:更改用户账号的登录名称。
-L:锁定用户账户。
-U:解锁用户账户。
使用usermod命令时,其大部分的选项与useradd命令的选项是相对应的,作用也相似。除此以外,还有两个选项“-U”、“-L”,分别用于解锁、锁定用户账号。这连个选项与passwd命令的“-l”、“-u”选项作用基本相同,只不过大小写存在区别。
【例12】:将admin用户的宿主目录移动至/home目录下,并使用usermod命令做相应调整。



【例13】:使用usermod命令锁定用户账号test01,确认状态后解除其锁定。



【例14】:将用户账号的登录名称admin更改为webmaster,下次登录时生效。



5、userdel命令------删除用户账号
当系统中的某个用户账号已经不再需要使用时,可以使用userdel命令将该用户账号删除。使用该命令也需要指定账号名称作为参数。添加“-r”选项时可以将该用户的宿主目录一并删除。
【例15】:删除系统中的用户账号test01,但是保留其宿主目录。



【例16】:删除系统中的用户账号test02,同时删除其宿主目录。



6、用户账号的初始配置文件
在Linux系统中添加用户账号后,useradd命令会在该用户的宿主目录中建立一些初始配置文件。这些文件来自于账号模板目录“/etc/skel”,基本上都是隐藏文件,较常用的初始配置文件包括“.bash_logout”、“.bash_profile”、“.bashrc”。
其中,“.bashrc_profile”文件中的命令将在该用户每次登陆时被执行;“.bashrc”文件中的命令会在每次加载“/bin/Bash”程序时(当然也包括登陆系统)被执行;而“.bash_logout”文件中的命令将在用户每次退出登陆时被执行。理解这些文件的作用,便于我们安排一些自动运行的后台管理任务。
如果希望为所有用户添加登录后自动运行的命令程序、自动设置变量等,可以直接修改“/etc”目录下的类似文件,如“/etc/bashrc”、“/etc/profile”文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息