U
NIX是一个多用户多任务(Multiple-User and Multiple-Tasking)的操作系统,也就是说 UNIX 可以在同一时间提供给很多人使用;而且每一个用户同时间又可以执行多项工作。为了避免不合法的用户滥用 UNIX 的系统资源,于是 UNIX 一开始就发展出账号的机制,以便让 UNIX 系统能够辨识用户的身份,从而决定用户在 UNIX 系统上的权限。
Linux是一套免费使用和自由传播的类Unix操作系统,因此,Linux也会提供账号的机制。
01
什么是账号?
账号(Account),是一种用来记录单个用户或是多个用户的数据。Linux中每一个合法的用户都必须要拥有账号,才能使用 Linux。这是因为Linux 必须依靠账号来验证用户的身份,以及决定用户可以在Linux 上从事哪些工作。
02
账号的分类
在Linux上账号可以分为两类:
1
用户账号:用来储存单一用户的数据,你可以使用一个用户账号,来储存某一个用户的数据。
2
组账号:用来储存多个用户的信息,每一个群组账号可以用来记录一组用户的数据。
我们还可以把Linux的所有账号按照账号的位置和账号的功能进行分类。
按照账号的位置
本机账号:存储于本机硬盘中的账号数据,我们称为本机账号(Local Account)。本机账号使用范围局限在账号建立的 Linux 系统上,如果超出范围时,比如调用其他计算机时,本机账号将无法使用。
域账号:你也可以把大量的计算机组织成为一个域(Domain),然后在域中的某一台Linux 上建立账号数据,并且通过LDAP通信协议将账号数据分享出来。当其他计算机需要取得账号数据时,再通过网络调用这些分享的账号即可。这种账号我们称为域账号 (Domain Account)。
按照账号的功能
无论是本机账号还是域账号,按照账号的功能可以分为如图几类:
用户账号部分:包含了超级用户、系统用户和普通用户
超级用户:超级用户(Superuser)在 Linux 系统上拥有完整的控制能力,你可以利用超级用户读取或写入 Linux 上任何文件、安装或删除软硬件、启动或停止服务,甚至关机与停止系统的执行。
系统用户:系统账号主要是提供给 Linux 系统本身使用。为了满足某些软件使用特定的账号运行,创建的账号。例如:运行MySQL的mysql账号。
普通用户:普通账号主要是用户登录到Linux系统的账号,普通账号在Linux系统上会受到权限和权力的限制,只能调用具备权限的文件,如果没有足够的权限,普通用户是完全无法调用的。
组账号部分:包含了超级用户组、系统组以及普通组三大类。
超级用户组:Linux 有一个叫做 root 的群组,因为这个群组的名称与 root 这个超级用户(Superuser)的名称相同,所以,我们习惯把 root 群组叫做超级用户群组 (Superuser Group)。
系统用户组:与系统账号一样,系统群组(System Group)也是给 Linux 系统本身,或是某个软件所使用。
普通用户组:普通用户组和普通用户相对应,通常,默认创建一个普通用户会创建一个同名的普通用户组,我们将这个组称为“主要组”
03
用户账号管理命令
Linux系统下提供了useradd、usermod和userdel命令来实现添加、修改和删除账号。
3.1
添加用户账号:useradd
如果你要添加一个用户的账号,你可以使用 useradd 这个工具。
命令语法
useradd [-u UID [-o]] [-g GROUP] [-G GROUPS... ] [-d HOME][-s SHELL] [-c COMMENT] [-p PASSWORD] [-n] [-r] [[-m] | [-M]] USERNAME
useradd命令参数详细意义如下:
举个例子
使用useradd命令,我们以创建jinlong账号为例:
# id jinlong
id: jinlong: No such user
# useradd jinlong
# id jinlong
uid=610(jinlong) gid=610(jinlong) groups=610(jinlong)
① 先检查是否有 jinlong 这个用户账号,结果告诉我们此用户不存在。
② 使用 useradd 建立出 jinlong 用户账号,这里全部采用默认值。
③ 再次查询 jinlong账号数据,就能显示 jinlong的帐户信息,因此,useradd已经帮我们建立出 jinlong 这个账号了。
3.2
修改用户账号:usermod
要修改账号的数据,你可以使用 usermod 命令。
命令语法
usermod [-u UID] [-g GROUP] [-G GROUPS... ] [-d HOME] [-s SHELL]
[-c COMMENT] [-l NEWNAME] [[-L] | [-U]] USERNAME
usermod 与 useradd 使用的参数很多是相同的,因此,你可以在 usermod 使用useradd命令提到的各种参数。usermod 另外还提供下列几个:
举个例子
使用usermod命令修改jinlong账号的UID为1000为例
# id jinlong
uid=610(jinlong) gid=610(jinlong) groups=610(jinlong)
# ls -lnd /home/jinlong/
drwx------ 2 608 610 4096 Jun 14 15:10/home/jinlong/
# usermod -u 1000 jinlong
# id jinlong
uid=1000(jinlong) gid=610(jinlong) groups=610(jinlong)
# ls -lnd /home/jinlong/
drwx------ 2 1000 610 4096 Jun 14 15:10/home/jinlong/
① 先查询一下目前 jinlong的帐户信息,请注意,此时 jinlong的 UID 为 610。
② 检查一下 jinlong 的主目录,目前的属主也是 jinlong。
③ 接着使用 usermod 将 jinlong 的 UID 修改成为 1000。
④ 你会发现,jinlong 的 UID 变成 1000 了!
⑤ 而且jinlong 的家目录也会自动的修改属主的 UID 的。
用户经常使用 usermod 的时候,主要是用于修改用户的次要组(Secondary Groups)信息。在 Linux 中,你使用 usermod -G 可以修改用户次要群组的内容。
以users和mail组为jinlong的次要组为例:
# id jinlong
uid=1000(jinlong) gid=610(jinlong) groups=610(jinlong)
# usermod -G users,mail jinlong
# id jinlong
uid=1000(jinlong) gid=610(jinlong) groups=610(jinlong),12(mail),100(users)
# usermod -G '' jinlong
# id jinlong
uid=1000(jinlong) gid=610(jinlong) groups=610(jinlong)
① 目前 jinlong 只有一个次要组:jinlong。
② 使用 usermod -G 为 jinlong 增加 users 与 mail两个次要组。
③ 现在 jinlong 就有 jinlong、users 与 mail 三个次要群组了。
④ 接着删除 users 与 mail这些次要组。由于 usermod 不提供直接删除次要群组的方法,所以我们必须要指定“设置后的次要群组内容”!
⑤ 最后,jinlong 只剩下 jinlong 这个次要组了。
3.3
删除用户账户:userdel
要删除用户账号,你可以使用 userdel 命令。
命令语法
userdel [-r] USERNAME
userdel 命令只有一个 -r 的参数,这个参数是用来删除用户的下列数据:
用户的主目录 (Home Directory)
用户的邮箱
在 Linux 系统中,-r 参数默认是停用的,也就是说,除非特别指定,否则 Linux 将不会删除用户的个人资料。
举个例子
以下是使用userdel命令删除jinlong这个账号为例:
# id jinlong
uid=1000(jinlong) gid=610(jinlong) groups=610(jinlong)
# userdel -r jinlong
# id jinlong
id: jinlong: No such user
① 先查询 jinlong账号是否存在,通过输出的的信息,jinlong账号的确存在。
② 使用用 userdel -r 把 jinlong 账号删除。
③ 再查询一次,jinlong 账号已经找不到了,说明成功删除。
关注我们
云运维联盟
专注Linux云平台运维
领取专属 10元无门槛券
私享最新 技术干货