用户和组 1.1 用户和组
Linux是一个具有很好的稳定性与安全性的多用户、多任务操作系统,在幕后保障Linux系统安全的则是一系列复杂的配置工作。
Linux系统对用户分配如下:系统管理员(root)、系统用户(不可登录)和普通用户(可登录)。我们登录linux系统时输入的是账号,但是Linux系统并不会直接识别账号,而是通过我们建立账号时系统分配的ID号码,其中,系统管理员(root)ID为0,可登录的普通用户ID为1000~65535。
在建立用户账号时,系统会为用户账号分配至少两个ID,一个用户ID(User ID,UID),一个组ID(Group ID,GID)。UID的知识已经在前面介绍过了,下面了解一下GID,管理员(root)组ID为0,非系统组ID为1000~65535。
对于一个用户而言,只有唯一一个UID,但是可以有多个不同的组,分别为主组群和附属组,主组群名与用户名相同,且只有一个用户(本身),也可以称为私有组。主组群以外的组为附属组。
在Linux系统中,用户账号、用户密码、用户组信息和用户组密码均存放在不同的配置文件中,所创建的用户账号及其相关信息(密码除外)均存放在/etc/passwd配置文件中。由于所有用户对passwd文件均有读取的权限,因此密码信息并未保存在该文件中,而是保存在/etc/shadow配置文件中。
1 2 3 4 5 6 7 8 9 在passwd配置文件中,一行定义一个用户账号,每行均由多个不同的字段构成,各字段值间用“:”分隔如下。 [root@fishyoung~]# cat /etc/passwd //查看passwd文件信息 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin ……省略部分信息…… fishyoung:x:1000:1000::/home/fishyoung:/bin/bash [root@fishyoung~]#
因为passwd不再保存密码信息,所以用x占位代表,若要使某个用户账户不能登录Linux,只需设置该用户所使用的shell为/sbin/nologin即可。
1.2 添加,修改,删除 用户账户的管理工作主要涉及用户账户的添加、修改和删除。添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录shell等资源,刚添加的账号是被锁定的,无法使用。
1 2 3 (1)useradd命令用来添加新的用户账户,该命令操作的语法格式为: useradd[参数选项]用户名
使用useradd命令在创建用户账户时,默认家目录是 /home/“创建用户名”,默认的shell解释器为/bin/bash,同时会创建一个同名的主组群。这些默认值都是可以搭配参数选项进行更改的,具体的参数及作用见表3-2。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 【例3-1】创建一个普通用户zs。 [root@fishyoung~]# tail -1 /etc/passwd fishyoung:x:1000:1000::/home/fishyoung:/bin/bash [root@fishyoung~]# useradd zs [root@fishyoung~]# tail -2 /etc/passwd fishyoung:x:1000:1000::/home/fishyoung:/bin/bash zs:x:1001:1001::/home/zs:/bin/bash [root@fishyoung~]# ls /home fishyoungzs [root@fishyoung~]# id zs uid=1001(zs) gid=1001(zs) groups=1001(zs) 分析得出:zs用户的UID为1001,GID为1001,同时创建用户私有组为1001,用户家目录默认为/home/zs,shell默认为/bin/bash。
【例3-2】创建一个普通用户ls,用户的UID为1111,GID为1001,不创建用户私有组,所属的附属组群为0和1,用户家目录为/home/lshome,shell为/sbin/nologin(不能登录使用)。
1 2 3 4 5 6 7 8 9 10 11 [root@fishyoung~]# tail -1 /etc/passwd fishyoung:x:1000:1000::/home/fishyoung:/bin/bash [root@fishyoung~]# useradd -u 1111 -g 1001 -n -G 0,1 -d /home/lshome -s /sbin/nologin ls [root@fishyoung~]# tail -3 /etc/passwd fishyoung:x:1000:1000::/home/fishyoung:/bin/bash zs:x:1001:1001::/home/zs:/bin/bash ls:x:1111:1001::/home/lshome:/sbin/nologin [root@fishyoung~]# ls /home fishyounglshomezs [root@fishyoung~]# id ls uid=1111(ls) gid=1001(zs) groups=1001(zs),0(root),1(bin)
【例3-3】创建一个普通用户ww,用户账户过期日期为2018年4月7日。
1 2 3 4 5 6 7 8 [root@fishyoung~]# date Sat Apr7 11:28:52 CST 2018 [root@fishyoung~]# useradd -e 2018-04-07 ww [root@fishyoung~]# ls /home fishyounglshomewwzs [root@fishyoung~]# id ww uid=1112(ww) gid=1112(ww) groups=1112(ww)
学习使用passwd命令来设置用户登录密码,该命令操作的语法格式为:
若指定了账户名称,则设置指定账户的登录密码,原密码被自动覆盖。只有root用户才有权设置指定账户的密码,一般用户只能设置或修改自己账户的密码(不带参数)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 设置账户登录密码后,该账户就可以登录系统了,就可以继续完善【例3-3】了。 首先用ssh登录测试(ssh的用法后面会讲到),再更改系统时间为2018年4月6日 23:59:00,用ssh再次登录Linux系统进行测试。 [root@fishyoung~]# date //查看当前系统时间 Sat Apr7 11:49:30 CST 2018 [root@fishyoung~]# ssh [email protected] //用ww账户登录系统 [email protected] ’s password: //输入登录密码Your account has expired; please contact your system administrator Authentication failed.∥账户过期,登录失败 [root@fishyoung~]# date -s "2018-04-06 23:59:00" //设置系统时间 Fri Apr6 23:59:00 CST 2018 [root@fishyoung~]# ssh [email protected] //用ww账户再次登录 [email protected] ’s password:Last failed login: Sat Apr7 11:49:36 CST 2018 from 192.168.244.128 on ssh:notty There were 1 failed login attempts since the last successful login. [ww@fishyoung~]$ pwd //登录成功,查看当前目录 /home/ww
(3)usermod命令用来修改用户的属性,该命令操作的语法格式为:
usermod[参数选项]用户账户名
Linux系统中的一切都是文件,系统管理员可以直接用文本编辑器来修改其中的用户参数项目,也可以用usermod命令修改已经创建的用户信息,如用户的UID、主组群、附属组群、默认shell等。usermod命令具体的参数及作用见表3-4。
1 2 3 4 5 6 7 8 【例3-5】修改ww账户的过期时间为2018年5月7日,再进行登录测试。 [root@fishyoung~]# date Sat Apr7 12:39:59 CST 2018 [root@fishyoung~]# usermod -e "2018-05-07" ww //修改过期时间 [root@fishyoung~]# ssh [email protected] ∥登录测试 [email protected] ’s password: //输入ww密码[ww@fishyoung~]
(4)userdel命令用来删除用户,该命令操作的语法格式为:
“-r”为可选项,若带上该参数,则在删除该账户的同时一并删除该账户对应的主目录。 【例3-7】删除之前创建的zs、ls、ww账户及其家目录。
1 2 3 4 5 6 7 8 9 10 11 12 13 [root@fishyoung~]# tail -4 /etc/passwd fishyoung:x:1000:1000::/home/fishyoung:/bin/bash zs:x:1001:1001::/home/zs:/bin/bash ls:x:1111:1001::/home/lshome:/sbin/nologin ww:x:2222:1000::/home/wwhome:/bin/bash [root@fishyoung~]# ls /home fishyounglshomewwhomezs [root@fishyoung~]# userdel -rf zs //强制删除账户及其家目录 [root@fishyoung~]# userdel -rf ls [root@fishyoung~]# userdel -rf ww [root@fishyoung~]# ls /home fishyoung [root@fishyoung~]#
1 2 3 4 5 6 7 8 9 10 11 12 13 (1)groupadd命令用来增加一个新的用户组,该命令操作的语法格式为: groupadd[-g]用户组 groupadd命令在创建用户组时,可以通过“-g”参数来指定GID号。 【例3-8】增加两个新组groupA和groupB。 [root@fishyoung~]# groupadd groupA [root@fishyoung~]# groupadd -g 2222 groupB [root@fishyoung~]# tail -3 /etc/group fishyoung:x:1000: groupA:x:1001: groupB:x:2222: [root@fishyoung~]# 用命令向系统中增加了一个新组groupA,新组的组标识号是在当前已有的最大组标识号的基础上加1,另外用命令向系统中增加了一个新组groupB,同时指定新组的组标识号为2222。
1 2 3 4 5 6 7 8 9 10 【例3-9】新增两个用户组groupA和groupB。 [root@fishyoung~]# groupadd groupA [root@fishyoung~]# groupadd -g 2222 groupB [root@fishyoung~]# tail -3 /etc/group fishyoung:x:1000: groupA:x:1001: groupB:x:2222: [root@fishyoung~]# 用命令向系统中增加了一个新组groupA,新组的组标识号是在当前已有的最大组标识号的基础上加1,另外用命令向系统中增加了一个新组groupB,同时指定新组的组标识号为2222。
1 2 3 4 5 6 7 8 9 【例3-10】修改组groupA的GID号为3333和groupB的组名为NewgroupB。 [root@fishyoung~]# groupmod -g 3333 groupA [root@fishyoung~]# groupmod -n NewgroupB groupB [root@fishyoung~]# tail -3 /etc/group fishyoung:x:1000: groupA:x:3333: NewgroupB:x:2222: [root@fishyoung~]#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (3)groupdel命令用来删除用户组,该命令操作的语法格式为: userdel[参数选项]用户账户名 【例3-11】删除上述创建的groupA和NewgroupB两个用户组。 [root@fishyoung~]# tail -3 /etc/group fishyoung:x:1000: groupA:x:3333: NewgroupB:x:2222: [root@fishyoung~]# groupdel groupA [root@fishyoung~]# groupdel NewgroupB [root@fishyoung~]# tail -3 /etc/group postdrop:x:90: postfix:x:89: fishyoung:x:1000: [root@fishyoung~]#