一、用户和组
1、用户账号类型
在Linux系统中,根据系统管理的需要将用户账号分为不同的类型,其拥有的权限、担任的角色也各不相同。主要包括超级用户、普通用户和程序用户。
【超级用户】:root用户是Linux系统中默认的超级用户账号,对本主机拥有最高的权限,类似于Windows系统中的Administrator用户。只有当进行系统管理、维护任务时,才建议使用root用户登录系统,日常事务处理建议使用普通用户账号进行。
【普通用户】:普通用户账号需要由root用户或其他管理员用户创建,拥有的权限受到一定限制,一般只在用户自己的家目录中有完全权限。
【系统用户】:在安装Linux系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运行。例如:bin、daemon、ftp、mail等。
2、组账号
每一个用户账号至少属于一个组,在用户账号创建之初,如果管理员未指定该用户的特定主组,则系统会默认创建一个与该用户同名的用户组作为其主要组,这个组称为该用户的基本组(或私有组);如果该用户同时还包括在其他的组中,则这些组称为该用户的附加组(或公共组)。一个用户必须拥有自己的基本组,附加组则可有可无。
当某一用户只有私有组时,若将其私有组添加为附加组,当使用id查看该用户信息时,其私有组仍是原来的私有组,并没有附加组的显示,但如果稍后为该用户添加新的私有组后再查看其信息将会将原来的组转换为附加组,示例如下图。
组账号设置的权限,将适用于组内的每一个用户账号。
3、UID和GID号
Linux系统中的每一个用户账号都有一个数字形式的身份标记,称为UID,对于系统核心来说,UID作为区分用户的基本依据,原则上每个用户的UID号应该是唯一的(特殊情况下会出现两个用户使用相同的id)。root用户账号的UID号为固定值0.计算机并不区分用户的名称,仅仅区别其ID,例如将UID为500的用户的UID改为0,则该用户具有与root用户相同的权限,成为管理员用户。而在CENTOS6中程序用户账号的UID号默认在1-499之间(CENTOS7在1-999之间),500-60000(CENTOS7在1000+)的UID号默认分配给普通用户账号使用。
与UID相类似,每一个组账号也有一个数字形式的身份标记,称为GID。root组账号的GID号为固定值0,而程序组(系统组)账号的GID号默认编号与UID的范围是一致的。
普通用户、组账号使用的默认UID、GID号范围定义在配置文件“/etc/login.defs”中。
二、Linux中的用户账号管理
Linux系统中的用户账号、密码等信息均保存在相应的配置文件中,直接修改这些文件或者使用用户管理命令都可以对用户账号进行管理。
1、用户账号文件
与用户账号相关的配置文件主要有两个,分别是/etc/passwd、/etc/shadow。前者用于保存用户名称、宿主目录、登录Shell等基本信息,后者用于保存用户的密码、账号有效期等信息。在这连个配置文件中,每一行对应一个用户账号,不用的配置项之间使用冒号“:”进行分隔。
【passwd文件中的配置行格式】:
系统中所有用户的账号基本信息都保存在“/etc/passwd”文件中,该文件时文本文件,任何用户都可以读取文件中的内容。
在passwd文件开头的部分,包括超级用户root及各程序用户的账号信息,系统中新增加的用户账号信息将保存到passwd文件的末尾。passwd文件的每一行内容中,包括了七个用冒号“:”分隔的配置字段,从左到右各配置字段的含义分别如下所述。
第一字段:用户账号的名称。
第二字段:经过加密的用户密码字串,或者密码占位符“x”。
第三字段:用户账号的UID号。
第四字段:所属基本组账号的GID号。
第五字段:用户全名,可填写与用户相关的说明信息。
第六字段:宿主目录,即该用户登录后所在的默认工作目录。
第七字段:登录Shell等信息,用户完成登录后使用的Shell。
基于系统运行和管理需要,所有用户都可以访问passwd文件中的内容,但是只有root用户才能进行更改。在早期的UNIX操作系统中,用户账号的密码信息也是保存在passwd文件中的,不法用户可以获取密码字串进行暴力破解,这样一来账号安全就存在一定的隐患。因此后来将密码转存入专门的shadow文件中,而passwd文件中仅保留密码占位符“x”。
【shadow文件中的配置行格式】
shadow文件又被称为“影子文件”,其中保存有各用户账号的密码信息,因此对shadow文件的访问应该进行严格限制。默认只有root用户能够读取文件中的内容,而不允许直接编辑该文件中的内容。
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”文件中。
如果结合useradd命令的各种选项,可以在添加用户账号的同时对UID号、宿主目录、登录Shell等相关属性进行指定。以下列出了useradd命令中用于设置账号属性的几个常见选项。
-u:指定用户的UID号,要求该UID号码未被其他用户使用。
-d:指定用户的宿主目录位置。
-e:指定用户的账户失效时间,可使用YYYY-MM-DD的日期格式。
-g:指定用户的基本组名(或使用GID号)。
-G:指定用户的附加组名(或使用GID号)。
-M:不建立使用者目录,即使/etc/login.defs系统档设定要建立使用者目录。
-s:指定用户的登录Shell。
3、passwd命令——为用户账号设置密码
通过useradd命令新添加的用户账号,还必须为其设置一个密码才能用来登陆Linux系统。root用户可以指定账号名称作为参数,对指定账号的密码进行管理。
用户账号具有可用的登录密码以后,就可以从字符终端进行登录了。虽然root用户可以指定用户名作为参数,对指定账号的密码进行管理,但是普通用户却只能执行单独的“passwd”命令修改自己的密码。
普通用户设置自己的密码时,密码要求有一定的复杂性,否则系统可能拒绝进行设置。
使用passwd命令除了可以修改账号的密码以外,还能够对用户账号进行锁定、解锁,或者也可以将用户的密码设置为空(无需密码即可登录)。相关的几个选项如下:
-d:清空指定用户的密码,仅使用用户名即可登录系统。
-l:锁定用户账户。
-S:查看用户账户的状态(是否被锁定)。
-u:解锁用户账户。
4、usermod命令——修改用户账号属性
对于系统中已经存在的用户账号,可以使用usermod命令重新设置各种属性。usermod命令同样需要指定账号名称作为参数。较常使用的几个选项如下所述:
-u:修改用户的UID号。
-d:修改用户的宿主目录位置。
-e:修改用户的账户失效时间。
-g:修改用户的基本组名。
-G:修改用户的附加组名。
-M:不为用户建立并初始化宿主目录。
-s:指定用户的登录Shell。
-l:更改用户账号的登录名称。
-L:锁定用户账户。
-U:解锁用户账户。
使用usermod命令时,其大部分的选项与useradd命令的选项是相对应的,作用也相似。除此以外,还有两个选项“-U”、“-L”,分别用于解锁、锁定用户账号。这连个选项与passwd命令的“-l”、“-u”选项作用基本相同,只不过大小写存在区别。
5、userdel命令——删除用户账号
当系统中的某个用户账号已经不再需要使用时,可以使用userdel命令将该用户账号删除。使用该命令也需要指定账号名称作为参数。添加“-r”选项时可以将该用户的宿主目录一并删除。
6、用户账号的初始配置文件
在Linux系统中添加用户账号后,useradd命令会在该用户的宿主目录中建立一些初始配置文件。这些文件来自于账号模板目录“/etc/skel”,基本上都是隐藏文件,较常用的初始配置文件包括“.bash_logout”、“.bash_profile”、“.bashrc”。
其中,“.bashrc_profile”文件中的命令将在该用户每次登陆时被执行;“.bashrc”文件中的命令会在每次加载“/bin/Bash”程序时(当然也包括登陆系统)被执行;而“.bash_logout”文件中的命令将在用户每次退出登陆时被执行。理解这些文件的作用,便于我们安排一些自动运行的后台管理任务。
如果希望为所有用户添加登录后自动运行的命令程序、自动设置变量等,可以直接修改“/etc”目录下的类似文件,如“/etc/bashrc”、“/etc/profile”文件。
原创文章,作者:poetic snow,如若转载,请注明出处:http://www.178linux.com/82332