理解linux中账户的实质,初步掌握创建账
户和对账户口令的管理命令;了解账户管理中涉及的相关文件,并掌握基本权限的设置。
一用户、组管理
1 观察系统中root账户的相关信息(在/etc/passwd,/etc/shadow和/etc/group中查看),并对查到的每条记录分析每个字段的含义)。
etc/passwd下每个字段的含义
[root@bogon /etc]# cat passwd
root:x:0:0:root:/root:/bin/bash
//第一个字段是login name:登录用名root
//第二个字段是passwd(密码):x已加密
//第三个字段是UID:用户身份编号0
//第四个字段是GID:登录默认所在组编号0
//第五个字段是GECOS:用户全名或注释root;
//用户的全名和一些信息,可用finger查看(如果没有该命令需安装)chfn命令可以修改这些信息:
[root@bogon /etc]# finger root
Login: root Name: root
Directory: /root Shell: /bin/bash
On since 日 12月 22 12:39 (CST) on tty1 13 minutes 3 seconds idle
On since 日 12月 22 12:41 (CST) on pts/0 from :0
11 minutes 43 seconds idle
On since 日 12月 22 12:45 (CST) on pts/1 from 192.168.179.64
7 seconds idle
New mail received 五 11月 15 16:57 2019 (CST)
Unread since 五 11月 15 16:54 2019 (CST)
No Plan.
//第六个字段:用户主目录/root
//第七个字段shell:用户默认使用shell(/bin/bash)默认shell可用chsh修改 chsh -s /sbin/nologin root 测试完要修改回来
etc/shadow下每个字段的含义
[root@bogon /etc]# cat shadow
root:$6$.CzwaMWMBkNMM1dw$IJSzAObtgQ8jKejObSjaJvPljvzO4qC6ILRCGWIgFlp6m5Rz25CCjX78aI53yQpunNfQV5jUsGZ270uwg8t7m0::0:99999:7:::
//第一字段root:登录用名
//第二字段$6$.CzwaMWMBkNMM1dw$IJSzAObtgQ8jKejObSjaJvPljvzO4qC6ILRCGWIgFlp6m5Rz25CCjX78aI53yQpunNfQV5jUsGZ270uwg8t7m0:用户密码
//第三字段 :从1970年1月1日起到密码最近一次被更改的时间 表示未被更改过
//第四字段0:密码再过几天可以被变更(0表示随时可被变更)
//第五字段99999:密码再过几天必须被变更(99999表示永不过期)
//第六字段7:密码过期前几天系统提醒用户(默认为一周)
//第七组段缺省值空:该字段允许密码到期之后N天之内还依然可以登录。
//第八字段缺省值空:该字段表示一个绝对的天数,意为到期之后不允许登录,也可以理解为密码的有效存活期
etc/group字段
[root@bogon /etc]# cat group
root:x:0:
jk:x:1004:stu2,stu3
//第一字段root:用户组名
//第二字段x:一般为x 密码
//第三字段0:GID
//第四字段 :组内的成员列表。文件中显示的账户名都是将该组作为附加组,如果是主组,在此不显示。
//如用户stu2、stu3的附加组是jk
提示:可以用groups 用户名 查看所属的组有哪些
说明:
root账户和root用户组是两码事,某个账户就算是加入了root组,那么也不代表它
具备root权限。
因为在linux系统,默认情况下,用户的权限高于用户组。
Linux id命令用于显示用户的ID,以及所属群组的ID。
如 id stu2
uid=1007(stu2) gid=1007(stu2) 组=1007(stu2),1004(jk)
//-g或--group 显示用户所属群组的ID。
//-G或--groups 显示用户所属附加群组的ID。
[root@localhost /etc]# id -G stu2
1007 1004
[root@localhost /etc]# id -g stu2
1007
#grep ‘root’ /etc/passwd /etc/shadow /etc/group
三个文件中信息的相互关系如下图所示。
2 用户账户和群组账户的创建
1)创建一个与你名字同名的普通账户(例如zhanghh)
[root@localhost /etc]$useradd zhanghh
-g 属组
-u 设置uid
-m 创建家目录
-M 没有家目录
-G 指定属于多个组
-s 指定登录shell
-d 指定家目录
-c 注释
-D 改变它默认的属性
-e 指定的日期是帐号失效的日期,
在xshell中可以man一下useradd
2)创建一个班级群组账户(指定gid是556),创建一个社团群组账户(比如linux开源工作室),指定其gid是558。
groupadd -g 556 wlwclass
groupadd -g 558 linux
修改组:
groupmod 参数 用户组名
-g: GID 为用户组指定新的组标识号。
-o:与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n:新用户组 将用户组的名字改为新名字
//将用户组名为linux改为linuxkygzs、且GID558
[root@localhost ~]# groupmod -g 558 -n linuxkygzs linux
[root@localhost ~]# cat /etc/group|grep linuxkygzs
linuxkygzs:x:558:
3)将该账户(例如zhanghh)加入到这些群组中去。
#usermod -G 556,558 zhanghh
修改用户:
usermod 参数 用户名
-c:修改用户帐号的备注文字。
-d:修改用户登入时的目录。
-e:修改帐号的有效期限。
-f: 改在密码过期后多少天即关闭该帐号。
-g:修改用户所属的群组。
-G:修改用户所属的附加群组。
-l:修改用户帐号名称。
-L:锁定用户密码,使密码无效。
-s:修改用户登入后所使用的shell。
-u:修改用户ID。
-U:解除密码锁定
4)查看zhanghh的账户信息
[root@localhost /etc]# id zhanghh
uid=1010(zhanghh) gid=1010(zhanghh) 组=1010(zhanghh),556(wlwclass),558(linuxkygzs)
3 口令的管理
1)设置用户的口令
[root@localhost /etc]# passwd zhanghh
2)修改用户的口令时效(假设修改为密码必须在60内更新,到期前3天进行提醒,超期后宽限7天,账户的禁用期为2021-01-01)
chage命令用于密码实效管理,该是用来修改帐号和密码的有效期限。它可以修改账号和密码的有效期
1. 命令语法:
chage [options] user
命令参数: 参数 描叙
-d 指定密码最后修改日期
-E 密码到期的日期,过了这天,此账号将不可用。0表示马上过期,-1表示永不过期。
-h 显示帮助信息并退出
-I 密码过期后,锁定账号的天数
-l 列出用户以及密码的有效期
-m 密码可以更改的最小天数。为零代表任何时候都可以更改密码。
-M 密码保持有效的最大天数。
-W 密码过期前,提前收到警告信息的天数。
[root@localhost /etc]#chage -M 60 -W 3 -I 7 -E 2021-01-01 zhanghh
[root@localhost /etc]# grep zhanghh /etc/shadow
zhanghh:$6$fGYWvfpa$R.0pYa.MSWbaIwlB47vy9.W9/GluRp47UZzyK0yuA4jLSB.bsTZcOeFX.jej0wMvh2p/b3U07jE7tRbvIrwlo0:18252:0:60:3:7:18628:
3)显示修改用户的口令
[root@localhost /etc]#echo 123456 |passwd --stdin zhanghh
4)修改用户口令为下次登陆必须修改
[root@localhost /etc]#chage -d 0 zhanghh
4 用户登录
1)打开一个新的虚拟终端(ctrl+alt+F1)
或(su - test
退出普通用户exit
)并用zhanghh的身份登陆(由于上个chage -d 0 kelsey 的操作,导致登陆以后必须先修改密码,请先修改密码,然后再重新登陆,注意输入密码时是不回显的)
2)查看登陆系统的用户有哪些
[zhanghh@localhost ~]$ who
root tty1 2019-12-22 14:08
root pts/0 2019-12-22 14:09 (192.168.179.64)
root pts/1 2019-12-22 14:42 (192.168.179.64)
root pts/2 2019-12-22 15:44 (192.168.179.64)
3)查看该终端上的用户是谁
[zhanghh@localhost ~]$ whoami
zhanghh
4)查看该用户的信息
[zhanghh@localhost ~]$ id
uid=1010(zhanghh) gid=1010(zhanghh) 组=1010(zhanghh),556(wlwclass),558(linuxkygzs)
5)退出该用户登录
[zhanghh@localhost ~]$exit
5 观察用户,有效群组和文件之间的关系
1)以zhanghh身份登陆
Ctrl+alt+f1
2)创建一个普通用户test,并将该用户的初始群组设定为linux开源社区群组。
#useradd -g linuxkygzs test
3)给test设置密码
#passwd test
4)让test在终端2上登陆(即用ctrl+alt+f2打开的终端上登陆)
Ctrl+alt+f2
5)zhanghh用户在自己的家目录中创建一个文件k1
$ touch k1
6)观察k1文件的属性
$ll k1
7)切换zhanghh的有效群组为linux开源社区
$groups
$newgrp linuxkygzs
8)zhanghh再次创建一个新文件k2并观察该文件的属性。
$touch k2
$ll k2
9)test也在自己的家目录创建文件t1,观察t1的属性。
$touch t1
$ll t1
6 用户的注销与删除
首先要记录以下/etc/passwd、/etc/shadow和/etc/group文件中的内容,最后要做对比的。
1)zhanghh退出登录
$exit
2)test退出登录
$exit
3)root将zhanghh与test用户彻底删除
#userdel -r zhanghh
#userdel test
4)观察/home下面是否还有zhanghh和test的家目录。
#ls /home
5)观察/etc/passwd,/etc/shadow,/etc/group中信息的变化。
二 基本权限管理
1 观察文件的基本权限。
在当前用户(以stu01的身份登陆,如果该用户不存在自己建立)的家目录中创建文件file1,并用ls命令列出该文件的属性信息,分析每个字段的含义。观察文件的默认权限并解释为何如此。
[stu01@localhost ~]$touch file1
[stu01@localhost ~]$ls -l file1
[stu01@localhost ~]$umask
2 设定file1文件的权限为仅拥有者可读写,其他人无任何操作权限。
[stu01@localhost ~]$chmod 600 file1
3 临时切换身份为root用户,将file1的拥有者改为stu02(不存在请创建),组改为jk(jk组不存在请创建),并对file1的权限加上组内用户可读写的权限设定。最后退出root身份登陆。
[stu01@localhost ~]$su
[root@localhost ~]#groupadd jk
[root@localhost ~]#useradd stu02
[root@localhost ~]#chown stu02:jk file1
[root@localhost ~]# ll file1
-rw------- 1 stu2 jk 0 12月 22 18:35 file1
[root@localhost ~]# chmod g+wr file1
[root@localhost ~]# ll file1
-rw-rw---- 1 stu2 jk 0 12月 22 18:35 file1
[root@localhost ~]#exit
【思考题】
假设需要的账号数据如下表所示,如何在系统中实现这样的设定。并要求用户登陆后强制先修改自己的密码chage -d 0 用户名
;才能进行其他操作。
账号名称 账号全名 支持的次要群组 可否登入主机 密码
myuser1 1st user Linux 可以 123456
myuser2 2nd user Linux 可以 123456
myuser3 3rd user 无 不可以 123456