useradd
[root@linux ~]# useradd [-u UID] [-g initial_group] [-G other_group] \
> -[Mm] [-c 说明栏] [-d home] [-s shell] username
参数:
-u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个账号;
-g :后面接的那个群组名称就是我们上面提到的 initial group 啦~
该 group ID (GID) 会被放置到 /etc/passwd 的第四个字段内。
-G :后面接的群组名称则是这个账号还可以支持的群组。
这个参数会修改 /etc/group 内的相关资料喔!
-M :强制!不要建立使用者家目录
-m :强制!要建立使用者家目录!
-c :这个就是 /etc/passwd 的第五栏的说明内容啦~可以随便我们设定的啦~
-d :指定某个目录成为家目录,而不要使用默认值;
-r :建立一个系统的账号,这个账号的 UID 会有限制 (/etc/login.defs)
-s :后面接一个 shell ,预设是 /bin/bash 的啦~
范例:
范例一:完全参考默认值建立一个使用者,名称为 vbird1
[root@linux ~]# useradd vbird1
[root@linux ~]# ls -l /home
drwxr-xr-x 3 vbird1 vbird1 4096 Aug 30 17:33 vbird1
[root@linux ~]# grep vbird1 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird1:x:502:502::/home/vbird1:/bin/bash
/etc/shadow:vbird1:!!:13025:0:99999:7:::
/etc/group:vbird1:x:502:
# 做这个范例只是想要让您了解,其实系统已经规范好了一些新增使用者时的参数了!
# 因此,当我们使用 useradd 时,系统会主动的去修改 /etc/passwd 与 /etc/shadow,
# 而这两个档案内的相关字段参考值,则会以一些设定档的内容来规范喔!
# 同时也要注意到,使用 useradd 新增使用者时,这个使用者的 /etc/shadow
# 密码栏会是不可登入的 (以 !! 为开头),因此还需要使用 passwd
# 来给予 vbird1 密码后,才算新增完毕!
范例二:我知道我的系统当中有个群组名称为 users ,且 UID 700 并不存在,
请用这两个参数给予 vbird2 建立一个账号!
[root@linux ~]# useradd -u 700 -g users vbird2
[root@linux ~]# ls -l /home
drwxr-xr-x 3 vbird2 users 4096 Aug 30 17:43 vbird2
[root@linux ~]# grep vbird2 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird2:x:700:100::/home/vbird2:/bin/bash
/etc/shadow:vbird2:!!:13025:0:99999:7:::
# 看一下,UID 与 initial group 确实改变成我们需要的了!
范例三:建立一个系统账号,名称为 vbird3
[root@linux ~]# usradd -r vbird3
[root@linux ~]# grep vbird3 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird3:x:101:102::/home/vbird3:/bin/bash
/etc/shadow:vbird3:!!:13025::::::
/etc/group:vbird3:x:102:
# 很重要喔!您会发现, UID 竟然是 101 ,而 GID 怎么会是 102,
# 并且与 /etc/group 有对应的关系喔!有没有加 -r 差很多ㄟ!
我的天吶!这个指令更动的档案怎么怎么多啊?对啊!你才知道啊~ 这也是为啥我们说账号管理是很复杂的啦~而且他参考的设定档才更多哩! 这个指令至少可能会更动到的地方有:
• /etc/passwd
• /etc/shadow
• /etc/group
• /etc/gshadow
• /home/username
那请教一下,您有没有想过,以上述的第一个范例一好了,为何 useradd vbird1 他会主动在 /home/vbird1 建立起使用者的家目录?家目录内有什么数据且来自哪里? 为何预设使用的是 /bin/bash 这个 shell ?呵呵!这就得要说明一下 useradd 所使用的参考档案啰!
• 相关设定档
我们使用 useradd 去新增使用者时,一些在 /etc/passwd 当中的值会去参考『 /etc/default/useradd 』 ,这个档案的内容有点像这样:
GROUP=100 <==预设的群组
HOME=/home <==预设的家目录所在目录
INACTIVE=-1 <==在 /etc/shadow 内的第 7 栏
EXPIRE= <==在 /etc/shadow 内的第 8 栏
SHELL=/bin/bash <==预设的 shell
SKEL=/etc/skel <==使用者家目录的内容数据参考目录
关于群组的建立机制: 当我们直接使用 useradd 来新增账号时,在预设的情况下,相关的信息都是参考 /etc/default/useradd 这个档案内容的设定的。不过,对于使用者群组的建立机制中, 则有两种不一样的机制存在的:
• 以 FC4 为代表,新建使用者时,若无指定 initial group , 则系统会主动建立一个与账号相同的群组名称,以该群组作为使用者的 initial group;
• 以 SuSE 9 为代表,新建使用者时,预设不会建立新群组,而以 /etc/default/useradd 内的 GROUP 设定值作为使用者的 initial group 。
关于使用者家目录的参考:/etc/skel/* 在这个档案当中,比较奇怪的是 SKEL 这个玩意儿了,他是啥? 其实,这个咚咚就是使用者家目录的参考目录啰~举我们的范例一为例,我利用 useradd vbird1 时,他在 /home/vbird1 这个使用者家目录内的各项数据,都是由 /etc/skel 所复制过去的~所以呢,未来如果我想要让新增使用者时,该使用者的环境变量 ~/.bashrc 就设定妥当的话,您可以到 /etc/skel/.bashrc 去编辑一下,也可以建立 /etc/skel/public_html 这个目录,那么未来新增使用者后,在他的家目录下就会有 public_html 那个目录了!这样瞭呼? 关于使用者 UID/GID 的设定: 另外,与密码还有 UID/GID 有关的设定档则是在 /etc/login.defs 里面, 这个档案有点像这样:
MAIL_DIR /var/spool/mail <==使用者预设邮件信箱放置目录
PASS_MAX_DAYS 99999 <==/etc/shadow 内的第 5 栏
PASS_MIN_DAYS 0 <==/etc/shadow 内的第 4 栏
PASS_MIN_LEN 5 <==密码最短的字符长度,建议可以改到 6 以上
PASS_WARN_AGE 7 <==/etc/shadow 内的第 6 栏
UID_MIN 500 <==使用者最小的 UID,意即小于 500 的 UID 为系统保留
UID_MAX 60000 <==使用者能够用的最大 UID
GID_MIN 500 <==使用者自订群组的最小 GID,小于 500 为系统保留
GID_MAX 60000 <==使用者自订群组的最大 GID
CREATE_HOME yes <==在不加 -M 及 -m 时,是否主动建立使用者家目录?
看到这个档案后,您应该晓得的是,为何新建的使用者的 UID 都会大于 500 了吧? 而且某些版本的 distributions (例如 SuSE server 9) 则是将 UID_MIN 设定为 1000 , 所以,他的一般身份使用者的 UID 就会从 1000 起跳啰~这样了解吗?! 那如果我现在新增一个使用者,这个使用者的 UID 会是多少?答案是:『 如果 /etc/passwd 里面的账号所属的 UID 没有大于 /etc/login.defs 里头的 UID_MIN (在本例中是 500)时,则以 UID 500 来作为一个新账号的 UID。 如果 /etc/passwd 已有大于 500 以上的 UID 时,则取 /etc/passwd 内最大的那个 UID + 1 作为新设帐号的 UID。』而如果我是想要建立系统用的账号,所以使用 useradd -r sysaccount 这个 -r 的参数时,就会找『比 500 小的最大的那个 UID + 1 』就是了。 ^_^ 关于家目录预设是否建立: 另外也要注意那个 CREATE_HOME 的设定值,这个设定值也很重要。一般来说,在 FC4 的环境下, 我们使用 useradd useraccount 时,预设是会主动的建立家目录的,除非使用 -M 这个参数~ 至于 SuSE server 9 这个版本来说,嘿嘿!他预设是不建立家目录的,除非使用 -m 这个参数呢! 因此,在这里鸟哥也要建议您,如果肯定要建立家目录的话,不论在那个版本, 你最好还是加上 -m 这个参数来强制建立家目录吧! ^_^ 那么您就能知道啰, useradd 这支程序在建立 Linux 上的账号时,至少会参考:
• /etc/default/useradd
• /etc/login.defs
• /etc/skel/*
这些档案,不过,最重要的其实是建立 /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow 还有使用者家目录就是了~所以,如果您了解整个系统运作的状态, 也是可以手动直接修改这几个档案就是了。