13.2.1 新增与移除使用者: useradd, 相关配置文件, passwd,usermod, userdel
我们登陆系统时会输入(1)帐号与 (2)密码, 所以创建一个可用的帐号同样的也需要这两个数据。那帐号可以使用 useradd 来新建使用者,密码的给予则使用 passwd 这个指令!这两个指令下达方法如下:
useradd
其实系统已经帮我们规定好非常多的默认值了,所以我们可以简单的使用“ useradd 帐号 ”来创建使用者即可。 CentOS 这些默认值主要会帮我们处理几个项目:
在 /etc/passwd 里面创建一行与帐号相关的数据,包括创建 UID/GID/主文件夹等;
在 /etc/shadow 里面将此帐号的密码相关参数填入,但是尚未有密码;
在 /etc/group 里面加入一个与帐号名称一模一样的群组名称;
在 /home 下面创建一个与帐号同名的目录作为使用者主文件夹,且权限为 700
由于在 /etc/shadow 内仅会有密码参数而不会有加密过的密码数据,因此我们在创建使用者帐号时, 还需要使用“ passwd 帐号 ”来给予密码才算是完成了使用者创建的流程。如果由于特殊需求而需要改变使用者相关参数时, 就得要通过上述表格中的选项来进行创建了,参考下面的案例:
在这个范例中,我们创建的是指定一个已经存在的群组作为使用者的初始群组,因为群组已经存在, 所以在 /etc/group 里面就不会主动的创建与帐号同名的群组了! 此外,我们也指定了特殊的 UID 来作为使用者的专属 UID 。了解了一般帐号后,我们来瞧瞧那啥是系统帐号(system account)
我们在谈到 UID 的时候曾经说过一般帐号应该是 1000 号以后,那使用者自己创建的系统帐号则一般是小于 1000 号以下的。 所以在这里我们加上 -r 这个选项以后,系统就会主动将帐号与帐号同名群组的 UID/GID 都指定小于 1000 以下, 在本案例中则是使用 699(UID) 与699(GID)。此外,由于系统帐号主要是用来进行运行系统所需服务的权限设置, 所以系统帐号默认都不会主动创建主文件夹的。
由这几个范例我们也会知道,使用 useradd 创建使用者帐号时,其实会更改不少地方,至少我们就知道下面几个文件:
使用者帐号与密码参数方面的文件:/etc/passwd, /etc/shadow
使用者群组相关方面的文件:/etc/group, /etc/gshadow
使用者的主文件夹:/home/帐号名称
useradd 参考档
其实 useradd 的默认值可以使用下面的方法调用出来:
GROUP=100:新建帐号的初始群组使用 GID 为 100 者
系统上面 GID 为 100 者即是 users 这个群组,此设置项目指的就是让新设使用者帐号的初始群组为 users 这一个的意思。 但是我们知道 CentOS 上面并不是这样的,在 CentOS 上面默认的群组为与帐号名相同的群组。 举例来说, vbird1 的初始群组为 vbird1 。怎么会这样啊?这是因为针对群组的角度有两种不同的机制所致, 这两种机制分别是:
私有群组机制:
系统会创建一个与帐号一样的群组给使用者作为初始群组。 这种群组的设置机制会比较有保密性,这是因为使用者都有自己的群组,而且主文件夹权限将会设置为 700 (仅有自己可进入自己的主文件夹) 之故。使用这种机制将不会参考 GROUP=100 这个设置值。代表性的distributions 有 RHEL, Fedora, CentOS 等;
公共群组机制:
就是以 GROUP=100 这个设置值作为新建帐号的初始群组,因此每个帐号都属于 users 这个群组, 且默认主文件夹通常的权限会是“ drwxr-xr-x ... username users ... ”,由于每个帐号都属于 users 群组,因此大家都可以互相分享主文件夹内的数据之故。代表 distributions 如SuSE等。
由于我们的 CentOS 使用私有群组机制,因此这个设置项目是不会生效的。
HOME=/home:使用者主文件夹的基准目录(basedir)
使用者的主文件夹通常是与帐号同名的目录,这个目录将会摆放在此设置值的目录后。所以vbird1 的主文件夹就会在 /home/vbird1/ 了。
INACTIVE=-1:密码过期后是否会失效的设置值
第七个字段的设置值将会影响到密码过期后, 在多久时间内还可使用旧密码登陆。这个项目就是在指定该日数。如果是 0 代表密码过期立刻失效, 如果是 -1 则是代表密码永远不会失效,如果是数字,如 30 ,则代表过期 30 天后才失效。
EXPIRE=:帐号失效的日期
是 shadow 内的第八字段,你可以直接设置帐号在哪个日期后就直接失效,而不理会密码的问题。 通常不会设置此项目,但如果是付费的会员制系统,或许这个字段可以设置。
SHELL=/bin/bash:默认使用的 shell 程序文件名
系统默认的 shell 就写在这里。假如你的系统为 mail server ,你希望每个帐号都只能使用email 的收发信件功能, 而不许使用者登陆系统取得 shell ,那么可以将这里设置为/sbin/nologin ,如此一来,新建的使用者默认就无法登陆! 也免去后续使用 usermod 进行修改的手续。
SKEL=/etc/skel:使用者主文件夹参考基准目录
举我们的范例一为例, vbird1 主文件夹 /home/vbird1 内的各项数据,都是由 /etc/skel 所复制过去的。所以,未来如果我想要让新增使用者时,该使用者的环境变量 ~/.bashrc 就设置妥当的话,您可以到 /etc/skel/.bashrc去编辑一下,也可以创建 /etc/skel/www 这个目录,那么未来新增使用者后,在他的主文件夹下就会有 www 那个目录了。
CREATE_MAIL_SPOOL=yes:创建使用者的 mailbox
使用“ ll /var/spool/mail/vbird1 ”看一下,会发现有这个文件的存在。这就是使用者的邮件信箱。
除了这些基本的帐号设置值之外, UID/GID 还有密码参数又是在哪里参考的呢?那就得要看一下 /etc/login.defs 。 这个文件的内容有点像下面这样:
这个文件规范的数据则是如下所示:
mailbox 所在目录: 使用者的默认 mailbox 文件放置的目录在 /var/spool/mail,所以vbird1 的 mailbox 就是在 /var/spool/mail/vbird1。
shadow 密码第 4, 5, 6 字段内容: 通过 PASSMAX_DAYS 等等设置值来指定的。要注意的是,由于目前我们登陆时改用 PAM 模块来进行密码检验,所以那个 PASS_MIN_LEN是失效的。
UID/GID 指定数值: 虽然 Linux 核心支持的帐号可高达 232 这么多个,不过一部主机要作出这么多帐号在管理上也是很麻烦的! 所以在这里就针对 UID/GID 的范围进行规范就是了。上表中的 UID_MIN 指的就是可登陆系统的一般帐号的最小 UID ,至于 UID_MAX则是最大 UID 之意。
要注意的是,系统给予一个帐号 UID 时,他是 (1)先参考 UID_MIN 设置值取得最小数值; (2)由 /etc/passwd 搜寻最大的 UID 数值, 将 (1) 与 (2) 相比,找出最大的那个再加一就是新帐号的 UID 了。我们上面已经作出 UID 为 1500 的 vbird2 , 如果再使用“ useradd vbird4 ”时,你猜 vbird4 的 UID 会是多少?答案是: 1501 。 所以中间的1004~1499 的号码就空下来。
而如果我是想要创建系统用的帐号,所以使用 useradd -r sysaccount 这个 -r 的选项时,就会找“比 201 大但比 1000 小的最大的 UID ”就是了。
使用者主文件夹设置值: 为何我们系统默认会帮使用者创建主文件夹?就是这个“CREATE_HOME = yes”的设置值。这个设置值会让你在使用 useradd 时, 主动加入“ -m ”这个产生主文件夹的选项。如果不想要创建使用者主文件夹,就只能强制加上“-M ”的选项在 useradd 指令执行时。至于创建主文件夹的权限设置呢?就通过 umask这个设置值。因为是 077 的默认设置,因此使用者主文件夹默认权限才会是“ drwx------ ”
使用者删除与密码设置值: 使用“USERGROUPS_ENAB yes”这个设置值的功能是: 如果使用 userdel 去删除一个帐号时,且该帐号所属的初始群组已经没有人隶属于该群组了, 那么就删除掉该群组,举例来说,我们刚刚有创建 vbird4 这个帐号,他会主动创建vbird4 这个群组。 若 vbird4 这个群组并没有其他帐号将他加入支持的情况下,若使用userdel vbird4 时,该群组也会被删除的意思。 至于“ENCRYPT_METHOD SHA512”则表示使用 SHA512 来加密密码明文,而不使用旧式的 MD5。
使用 useradd 这支程序在创建 Linux 上的帐号时,至少会参考:
/etc/default/useradd
/etc/login.defs
/etc/skel/*
这些文件,不过,最重要的其实是创建 /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow还有使用者主文件夹。如果你了解整个系统运行的状态,也是可以手动直接修改这几个文件就是了。