登录Linux时我们都需要输入账号和密码,但Linux只会识别账号所对应用ID号,这个ID号就称为UID。
同理每个用户组也都拥有相对应的组ID号,即GID。
Linux根据/etc/passwd文件的内容来查找当前登录用户是否为合法用户。
上图中标注的即为root用户所对应的UID和GID。
一、用户账号信息
1、/etc/passwd文件
此文件件中每一行为一个用户的信息,以“:”分隔,共七个字段,各字段含义如下:
1)账号名称
就是我们用来登录系统的账号名。
2)密码
由于/etc/passwd文件任何程序都可以读取,出于安全考虑Linux已经把密码存放在/etc/shadow文件中了,此处只用"x"来占位表示。
3)UID
用户ID;Linux将用户划分为以下几类:
id | 用户类型 | 用户特性 |
0 | 管理员 | 可以对系统做任何操作,没人能阻止 |
1-499 | 系统账号 | 专门用来运行程序的用户,此类用户不可以登录系统 |
500以上 |
普通用户 | 可以登录系统的有限权限的用户 |
4)GID
组ID与用户ID的规定相类似,只不过它是用来定义用户组的,与其相关的文件有/etc/group。
5)信息说明列
用于描述账号的用途,没有实际作用。
6)用户家目录
用于指定用户的家目录的位置。
7)shell
指定用户登录系统后使用的默认shell程序,由于系统用户为不可登录用户,其shell为/sbin/nologin;另外,如果指定的shell在/etc/shells文件中不存在,则此用户将无法登录系统。
2、/etc/shadow文件
前文提到此文件保存了所有登录用户的密码信息,下面来详细了解一下这个文件的内容:
1)账号名称
与/etc/passwd文件中的账号名称相对应。
2)密码
密码以加密的形式存放,sha512加密(centos6),centos5中使用MD5。
3)最近更改密码的日期
此字段中的数字表示,从1970年1月1日开始到最后一次修改密码所经过的天数。
4)密码最少使用天数
此字段定义了用户在最后一次修改密码后,密码必须使用的天数;0表示随时可以修改。
5)密码最多使用天数
此字段定义如果在此时间内没有更改密码的话,密码将会过期,用户登录系统时会被强制要求修改密码。
6)警告天数
密码需要修改前的警告天数,在第5个字段到期前,系统根据此字段的设置提醒用户密码所能使用的天数。
7)密码过期后的宽限时间
这个字段表示密码过期后的多少天内,如果还没有修改密码,密码将会失效,此用户将无法登录系统了。
8)账号失效日期
在指定的日期之后,账号将无法登录系统;日期的指定方法与第3个字段相同。
9)保留字段
二、组账号信息
1、/etc/group文件
此文件每一行代表一个用户组,以“:”作为字段分隔符,共四列,其含义如下:
1)用户组名称
2)用户组密码
不常用,密码信息被保存在/etc/gshadow文件中。
3)GID
与/etc/passwd文件中的第四段对应。
4)组成员
此组中所包含的用户。不过从上图可以看到root组中此字段为空,本来root是属于root组的,可是在这里为什么没有显示呢?因为此字段只显示以此组做为附加组的用户列表。
2、/etc/gshadow
此文件内容格式与/etc/group相似,各字段含义如下:
1)用户组名称
2)用户组密码
3)用户组管理列表
4)将此组作为附加组的用户列表
三、账号管理
1、用户管理
1)useradd命令
命令格式:useradd [options] 用户账号名
-u UID:为用户指定UID;
-g GID:所属的基本组;
-G GID:所属的附加组;
-c ‘COMMENT’:注释信息;
-d /path/to/somewhere:为用户创建家目录,如果目录存在会警告;
-s SHELL:指定用户的默认Shell;
-m:强制给用户创建家目录;
-M:不给用户创建家目录;
-r:创建系统用户;
-e:后跟日期,格式为“YYYY-MM-DD”,指对账号失效日期,对应shadow文件的第八个字段。
命令演示:
从上面的两个例子可以看出,创建用户后其家目录都保存在了/home目录下,我们可以在创建用户时修改家目录的位置。
我们来可以指定用户登录时使用的默认shell。
下面我们再来看一下useradd的默认值:
[root@localhost ~]# useradd -D
GROUP=100 默认的用户组;
HOME=/home 默认的家目录;
INACTIVE=-1 密码失效时间,对应shadow文件中的第7列;
EXPIRE= 密码过期时间,对应shadow文件中的第8列;
SHELL=/bin/bash 默认登录shell;
SKEL=/etc/skel 默认家目录中的数据源目录;
CREATE_MAIL_SPOOL=yes 是否为用户创建邮箱。
GROUP=100:
此设置表示新建的用户其默认的用户组ID为100,但实际情况并不是这样的,我们创建用户时默认的用户组ID与用户ID是相同的。而且GID对应的用户组是users,我们也从来没有见到过此且户组。其实在Linux中用户组有两种机制:私有用户组和公有用户组。
公有用户组是以GID=100做为新建用户的默认用户组,新建用户都处于同一组中,也就是users组,组中用户可以共享家目录中的数据。
而CentOS采用的是私有用户组的机制,所以GROUP=100不生效。
SKEL=/etc/skel:
我们在创建好用户后,可以在其家目录中发现已经存在一些默认的隐藏目录与文件,如下图所示:
这些文件用于定义用户的环境变量,而这些文件就是从/etc/skel目录中复制过来的。
CREATE_MAIL_SPOOL=yes:
用户创建后都会自动生成一个与用户对应的邮箱,就是靠此设置控制的。
那么如何修改这些默认设置呢?可以通过修改/etc/default/useradd来修改默认值。
上图中将默认的用户家目录改到了/tmp目录中,下面再来创建个新用户:
2)passwd命令
命令格式:passwd [-k] [-l] [-u] [-d] [-e] [-n mindays] [-x maxdays] [-w warn-days] [-i inactivedays] [-S] [–stdin] [username]
不带任何选项:修改当前用户的密码;
-k:修改密码时要求输入账号现在使用的密码;
-l:锁定用户;
-u:解锁用户;
-d:删除用户密码;
-e:设置用户密码为过期密码,用户登录时必须修改密码;
-n:密码最小使用天数,与shadow第4个字段对应;
-x:密码最大使用天数,与shadow第5个字段对应;
-w:密码过期前的警告天数,与shadow第6个字段对应;
-i:密码失效日期,与shadow的第7个字段对应;
-S:列出与密码有关的相关参数;
–stdin:可以通过管道进行密码设置。
命令演示:
(1)使用默认选项修改用户密码
上面两个实例中,root用户修改密码时要求直接输入新的密码即可,如果我们想在修改密码前先输入用户的当前密码,再输入新密码,可以使用-k选项。
(2)要求root用户修改密码时提供被修改用户的当前密码
上图中要求先输入当前的密码,认证不通过的话是修改不了密码的,在普通用户中-k是默认选项。
(3)查看密码的相关信息:
上图中的命令结果是以空格分隔的7个字段,各字段含义如下:
第一个字段:用户账号名;
第二个字段:账号的状态;
第三个字段:密码新建的时间;
第四个字段:密码最小使用天数;
第五个字段:密码最长使用天数;
第六个字段:警告天数;
第七个字段:密码是否有效;
(4)锁定账号密码
如果我们想让某个用户暂时无法使用账号来登录系统,可以将密码锁定,如下所示:
与之对应的在/etc/shadow文件中test1的密码也发生变化,如下所示:
(5)解锁账号密码
使用-u选项即可为用户解锁:
(6)清空账号密码
(7)设置密码过期
设置密码过期后,用户再次登录系统时会要求修改密码。
(8)设置密码的使用时限
(9)不使用交互方式为账号设置密码
3)chage命令
命令格式:chage [options] 用户账号名
-l:显示账号密码的详细信息;
-d:后接日期,最近更改密码的日期,格式YYYY-MM-DD,对应shadow文件第三字段;
-m:后接天数,密码最少使用天数,对应shadow文件第四字段;
-M:后接天数,密码最多使用天数,对应shadow文件第五字段;
-w:后接天数,密码过期前的警告日期,对应shadow文件第六字段;
-I:后接天数,密码失效前的宽限期限,对应shadow文件第七字段;
-E:后接日期,账号失效日期,格式YYYY-MM-DD,对应shadow文件第八字段。
4)usermod命令
用于修改用户的的属性。
命令格式:usermod [options] 用户账号名
-a:以追加的方式将用户添加到附加组,与-G连用;
-c:添加账号说明;
-d:修改家目录,与-m连用可以保证家目录一定会被创建;
-e:后接日期,账号过期日期,格式:YYYY-MM-DD,shadow文件第八字段;
-f:密码失效前的宽限期限,shadow文件第七字段;
-g:修改用户所在的用户基本组;
-G:修改用户所在的用户附加组;
-l:修改账号名称;
-L:锁定账号;
-U:解锁账号;
-m:移动家目录中的内容到新的位置,与-d一起使用;
-s shell:修改用户的默认shell;
-u UID:修改用户的UID;
命令演示:
(1)将用户加入一个附加组中;
(2)修改用户家目录的位置
5)userdel命令
命令作用:删除用户
命令格式:userdel [options] 用户账号名
-f:强制删除用户,即使用户处于登录状态;
-r:同时删除用户家目 二
录;
2、组管理
1)groupadd命令:
命令格式:groupadd [options] 组名
-g GID:指定GID;
-r:创建系统组;
2)groupmod命令:
命令格式:groupmod [options] 组名
-g:修改GID;
-n:修改组名;
(1)修改GID
(2)修改组名
3)groupdel命令
命令格式:groupdel group
三、账号查询与控制
1、查看用户信息
1)id命令
命令格式:id [OPTION]… [USERNAME]
-g:显示基本组ID;
-G:显示所有组ID;
-u:显示用户ID;
-n:以名称代替ID显示;
2)whoami命令 2、查看当前登录系统的用户
1)w命令
2)who命令
2、用户信息控制
1)chfn命令
命令格式:chfn [option] 用户名
2)chsh命令
命令作用:更改用户默认登录shell。
命令格式:chsh [-s shell][username]
四、用户切换
通常出于安全的考虑,建议使用普通用户来登录系统,在有需要时再切换为管理员进行操作,用户之间的切换有以下几种方法:
1、使用Ctrl+Alt+F[2-6]键,打开新的终端登录;
2、使用ssh远程登录时,可以使用不同的用户登录系统;
3、如果想在同一窗口中进行用户切换,可以使用su命令来实现;
命令格式:su [OPTION] [USERNAME]
-,-l:使用登录shell的方式切换用户;
-c 'COMMAND':使用指定的用户来执行命令;
-m:使用非登录shell的方式来切换用户;
-s SHELL:切换用户时指定shell,此shell必须是中/etc/shells中存在的;
1)使用非登录shell的方式来切换用户。
2)使用登录shell来切换用户
3)使用普通用户查看/etc/shadow文件内容
原创文章,作者:petmaster,如若转载,请注明出处:http://www.178linux.com/3240
评论列表(1条)
哟,乍看以为又是书生,petmaster新作相当给力哇,赞