Linux账号管理(一)
系统会依据/etc/passwd和/etc/group的内容找到UID/GID对应的账号与组名显示出来。
用户账号
登录系统数据账号密码后,系统做了什么呢
1、先找/etc/passwd里是否有你输入的账号,如果没有则跳出,如果有将该账号对应的UID与GID(在/etc/group中)读出来,另外,该账号
的主文件夹与shell设置一并读出来。
2、再来核对密码表,这时Linux进入etc/shadow里面找出对应的账号UID,然后核对一下你刚才输入的密码与文件中密码是否相符。
3、如果一切OK的话,进入shell控管阶段。
大致情况如此,如果要登录linux主机,/etc/passwd与/etc/shadow必须让系统读取。如果要备份Linux系统账号的话,那么这两个文件一定需要备份才行。
/etc/passwd文件结构
- 这个文件每一行代表一个账号,每一行使用 ";" 分割开,共有七个字段。有几行代表有几个账号在系统中。里面很多账号是系统正常运行所必须要的,我们称它为系统账号。
1、账号名称,就是账号例如root
2、密码,密码数据放到/etc/shadow中,这里只会看到一个"x"
3、UID,用户标识符。UID有几个限制,需要说明一下:
4、GID,与/etc/group有关。/etc/group与/etc/passwd差不多,只是它是用来规定组名与GID的对应而已。
5、用户信息说明列,这个字段基本上没有什么重要用途,只是用来解释账号信息。如果你提供使用finger功能,他能提供很多信息。
6、主文件夹,用户的主文件夹。root的主文件夹在/root中,当root登录之后,就会立刻到/root目录里面。如果有个账号
的使用空间很多,你想将该账号的主文件夹移动到其他的硬盘去,可以在这个字段进行修改。默认用户主文件夹在/home/yourlDname。
7、Shell,当用户登录系统后会取得一个Shell来与系统内核通信以进行用户的操作任务。为何默认shell使用bash呢,就是在这个字段指定的。
有一个shell可以用来让账号无法取得shell环境的登录操作。那就是/sbin、nologin。这可以用来制作纯pop邮件账号。
/etc/shadow文件结构
很多程序的运行都与权限有关,而权限与UID/GID有关。因此各程序当然需要读取/etc/passwd来了解不同账号的权限。因此/etc/passwd
的权限需设置为-rw-r--r--。处于安全考虑,将密码移到/etc/shadow这个文件。/etc/shadow文件:
shadow同样以":"分隔,共有9个字段:
1、账号名称,密码需要与账号对应。这个文件第一列就是账号,必须要与/etc/passwd相同才行。
2、密码,经过编码的密码。只会看到有一些特殊字符好于字母。虽然这些吉阿米果的密码难被解出来,但是不等于“不可能”被解出来。所以
这个文件默认权限是“-rw-------”或者是“-r--------”。
3、最近修改密码的日期,记录密码改动的日期,14126是因为计算Linux日期的时间是以1970年1月1日作为1而累加的。1971年1月1日则为366。
4、密码不可被改动的天数,记录了这个账号的密码在最近一次被修改后经过几天才可以仔被更改。如果是0的话,表示棉麻随时可以改动。这个是为了怕密码被某些人一改再改而设计的。
5、密码需要重新更改的天数,为了强制改动密码,这个字段可以指定最近一次更改密码后多少天需要再次更改密码才行。你必须在这个天数内重新设置你的密码,
否则这个账号的密码将会变为过期。
6、密码需要更改期限前的警告天数,密码到期之前的多少天内,系统会警告该用户。
7、密码过期后的账号宽限时间(密码失效日),密码有效日期 = 更新日期 + 重新更改日期,过了期限后用户依旧没有更新密码那该密码就算过期了。虽然密码过期但是该账户还是可以
用来进行其他工作的包括登录系统获取bash。如果密码过期了当你登录系统时,系统会强制要求比必须要重新设置密码才能登录继续使用。这个字段的功能是密码在过期几天后,
如果用户还是没有登录更改密码,那么这个账号的密码将会“失效”,该账号再也无法使用该密码登录了。
8、账号失效日期,这个账号表示:这个账号在此字段规定的日期之后,将无法再使用。这就是所谓的“账号失效”,此时无论你的密码是否过期,这个账号
都不再被使用。这个字段会被使用通常应该是在“收费服务”的系统中,你可以规定一个日期让该账号不能再被使用。
9、保留
shadow有这样的重要性,因此不能随意修改。在某些情况下得要使用各种方法处理这个文件。如果密码忘记了该怎么办呢?
一般用户:请管理员帮忙,利用root身份使用passwd命令来处理即可。
root密码忘记了:这时无法用root身份登录。因此需要使用各种可行方法开机进入Linux进行修改。例如重启系统进入用户维护模式,系统会主动给与root权限的bash接口,再以passwd修改密码即可。
用户组
/etc/group结构
这个文件就是记录GID与组名的对应。
文件每一代表一个用户组,以 “:” 作为字段分隔符。共分为四列:
1、用户组名称
2、用户组密码,通常不用设置,这个设置通常给“用户组管理员”使用。密码已经移到/etc/gshadow中,因此这个字段只会显示“x”。
3、GID,用户组ID
4、此用户组支持的账号名称,我们知道一个账号可以加入多个用户组,账号想要加入用户组时,将该账号填入这个字段即可。
UID/GID与密码之间的关系如图:
每个用户都可以拥有多个支持的用户组,那么用户在作业时,到底是以哪个用户组为准?
有效用户组与初始用户组
- 在/etc/passwd第四列的GID就是“初始用户组”(initial group),即当用户登录系统,立刻就拥有这个用户组的相关
权限的意思。因为是初始用户组,用户一登录就会主动取得,不需要在/etc/group的第四个字段写入该账号的。
- 如果是非initial group必须在/etc/group这个文件中将账号加入用户组的第四列。
- 如果一个账号同时属于多个用户组,那么账号同时拥有所有用户组拥有的权限。如果新建一个文件或是目录,新建文件属于哪个组
就要检查一下当时的有效用户组了。
有效用户组查看:groups
查看账号属于的用户组
可以知道dmtsai同时属于dmsai及users这两个组,第一个输出的用户组即为有效用户组了。也就是说,所以如果以touch创建一个新文件
那么这个文件的所有者为dmtsai。
有效用户组的切换:newgrp
想要切换的用户组必须是你已经属于的用户组
这个命令可以更改目前用户的有效用户组,是另外以一个shell来提供的,新打开shell被给与新的有效GID。
一个账号加入不同的用户组有两种方式:一个是通过系统管理员用usermod加入,另一种事通过用户组管理员以gpasswd加入他所管理的用户组中。
/etc/gshadow
/etc/gshadow内容
同样是使用 “;” 作为分隔字符。
1、用户组名
2、密码列,开头为!表示无合法密码,所以无用户组管理员
3、用户组管理员的账号
4、该用户组所属账号。
账号管理
新增与删除用户
useradd
在创建用户时系统默认会以如下方式实现:
- 在/etc/passwd 创建一行与账号相关的数据,包括创建UID/GID主文件夹等;
- 在/etc/shadow将此账号的密码参数填入,但是尚未有密码
- 在/etc/group加入一个与账号名一模一样的组名
- 在/home下面创建一个与账号名同名的目录作为用户文件夹,且权限为700
- 由于在/etc/shadow内仅会有密码参数而不会有加密过的密码,因此我们在创建账号时,还需要使用“passwd账号”来给予密码才算是完成
创建用户的流程。一般账号UID应该是500以后,用户自己创建的系统账号一般是100以后。
passwd
useradd创建了账号之后,默认情况下,该账号是暂时被封锁的,无法登陆。如何解除封锁,设置密码(passwd)就好了
chage
除了使用passwd -S之外,还有更详细的密码参数显示功能 chage
usermod
userdel
删除用户相关数据,删除的数据有:
- 用户账号/密码:/etc/passwd,/etc/shasow
- 用户组:/etc/group,/etc/gshadow
- 用户个人数据:/home/username,/var/spool/mail/username