Linux账号与组管理
UID与GID
UID:使用者ID(User ID)
GID:用户组(Group ID)
在Linux系统中,每一位用户都有自己唯一的UID,我们输入的用户名与组名只是方便记忆,实际上无论UID还是GID都是以数值的形式存在的,而UID与GID的关系在/etc/passwd文件中维护。(此文件中还包含用户名,默认的shell等等信息)
用户登录过程
1.先寻找/etc/passwd中是否有所输入的账号,如果没有则跳出,如果有的话则将该账号对应的UID与GID(在/etc/group中)读出来,另外,该账号的家目录与shell的设定也一并读出。
2.核对密码,这时Linux回进入/etc/shadow里面找出对应账号的UID,然后核对一下你刚刚输入的密码与文件中的密码是否相符。
3.如果一切都ok,那就进入shell掌控阶段。
/etc/passwd文件结构
此文件中,每一行都代表一个账号,有几行,就代表有几个用户在你的系统中。
不过其中有一些系统账号,如bin,daemon,adm,nobody等等都是系统正常运作所必须的,所以不要轻易修改或删除他们。
此文件中,一共有7个字段,每个字段之间用冒号:分割,具体信息如下:
1.账号名称
是用来提供给使用者的,因为如果让我们用数字当用户名会相当难以记忆,而账号名称要对应UID,比如root的UID是0.
2.密码
UNIX早期的密码就放在这个字段,但由于此文件所有用户都可以读取,容易造成密码泄露,所以后来密码就被放到/etc/shadow文件中,因此一般在该字段你会发现一个x字母。
3.UID
UID就是使用者标识符(UserID)
Linux中UID的限制如下:
id范围 | 该ID使用者特性 |
---|---|
0 (系统管理员) |
当UID是0时,代表,该用户是系统管理员,所以要让其他的账号名称也具有root的权限时, 将该账号的UID改成0即可。也就是说,一个Linux系统上面的系统管理员可以不只有root一个, 不过一般不建议这么做,容易让系统管理员混乱。 |
1~999 (系统账号) |
保留给系统使用的者的ID,除了0之外,其他的UID权限与特性都相同。 由于系统上面启动的网络服务与后台服务等,都希望以较小的权限去运行,不希望用root权限, 所以这些账号就由此范围的UID来提供,而这些系统账号通常是不可登陆的, 所以才会有/sbin/nologin这个特殊的shell存在。 这些账号有大致可以分为2类: 1~200:由distributions自行建立的账号 201~999: |
1000~60000 | 一般使用者用户。 |
4.GID
GID与/etc/group有关,它是用来记录组名与GID的对应关系。
5.用户信息说明栏
用来解释该账号的意义
6.家目录
这个就是用户的家目录,root的家目录在/root,所以当root用户登录之后,就会自动转到/root目录下。
如果你有一个用户下的空间使用量特别大,你想将家目录移动到其他的硬盘上,则可以修改此字段。
默认的家目录为/home/YOUR_USER_NAME
7.Shell
当用户登陆系统之后,就会取得一个Shell来与系统内核进行沟通,以进行用户的操作任务,就如linux大多是以bash作为默认shell一样,这个字段可以指定shell种类。/sbin/nologin无法获取shell环境,无法登陆,但是并不意味着这些用户无法获取系统资源,所以一般而言这些账号是用来启动服务用的,而不是用来登陆操作shell的。
/etc/shadow文件结构
1.账号名称
文件的第一栏就是账号名称,必须要有/etc/passwd相同的名称。
2.密码
经过编码加密的密码,因此你会看到一堆特殊符号和字母,虽然加密后很难破解,但很难不代表不能,所以此文件的权限是-rw-------的,即,只有root用户才能读/写。
# 使用下面的命令可以查看密码是用什么机制加密的
authconfig --test | grep hashing
3.最近一次修改密码的日期
这个字段记录了最近一次,修改密码的日期,不过它用一个整数记录,如16599,这是因为,它是以1970年1月1日作为起始值,即1,开始逐年累加的,那么1971年1月1日即为366。上面的16599其实指的就是2015年5月4日,可以用下面的命令来查看。(天数24小时60分钟*60秒)
4.密码不可以被修改的天数(以第3个字段为基准)
记录了密码修改后,多少天内不允许再次修改密码,如果设置为0,则没有限制,可随时再修改密码,如果设置为10,那么则 意味着,10天之内无法再修改密码。
5.密码需重新修改的天数
一般而言,系统会强制要求大家每隔一段时间修改一次密码,单位是天,如果设置为99999的话(273年)基本上也就不用修改了。。。书归正传,如果设置为30,那么意味着30天内你需要修改密码,否则,密码将会变为过期
状态。
6.密码需要变更的期限前的警告数(以第5个字段为基准)
当第5字段设置的期限快要到时,提前N天来提醒用户修改密码【您的密码再过N天即将过期,请尽快修改密码】之类的。
7.密码过期后的宽限天数
当超过第5字段的期限后,密码处于过期
状态,这里可以设置宽限时限,比如设置为7则意味着密码过期后一周内该账号还可以用来做其他工作,包括登陆,取得bash,不过如果密码过期,登陆时会强制要求用户先修改密码,才能继续使用。如果该字段值为0则表示密码过期后立即失效&#