系统资源是有限的,如何合理分配系统资源?
在这个问题解决时必须要有连个资源配合
1)身份 account
2)授权author
3)认证auth
3A机制,3A机制组成系统中最底层的安全架构
用户组是一个逻辑容器
对用户进行归类和统一授权
二、用户及用户组在系统中的存在方式
电脑对数字敏感---------------id
人类对字符串敏感-----------名称
id<-------> 名称 必须要记录到文件当中用户才能存在
用户就是</etc/passwd>文件中的一行字符
用户组存在的方式就是</etc/group>文件中的一行字符
1)whomai #查看当前用户
2)id #查看用户id信息
-u #查看用户的用户id(-u --user)
-g #查看用户主组id(-g --group)
-G #查看用户所有的组的id(-G --group)
-n #显示名称(-n --name)
3)用户id范围:
0-65535(2的16次方)
0:#Linux超级用户ID
1-999:#Liunx系统自用ID
1000-65535:#用户级ID
#以上ID设定规则都被记录在</etc/login.defs>
su username #切换用户名,但是不切换用户环境,一般很少用
su - usernam #切换用户名,也切换用户环境。(<->可以理解为用户环境,<username>可以理解为用户名)
su username #切换用户名,但是不切换用户环境,一般很少用 su - usernam #切换用户名,也切换用户环境。
#切换用户环境(可以概括为超级用户想看谁就看谁,普通用户想看自己之外的任何人都需要密码)
#如果root ----> commonuser不需要后者密码
#commonuser ----> root需要密码
#commonuser ----> commonuser需要密码
#注意:在做用户切换时当使用完毕用户身份及时退出,不要在一个shell中反复执行su命令。在一个shell中反复执行su命令会导致环境错乱。
1)/etc/passwd ##用户身份信息文件
#存储格式从左到右依次是:###用户名称:用户密码:用户id:用户主组id:用户说明:用户家目录:用户默认shell###
westos:x:1000:1000:westos:/home/westos:/bin/bash #用户名称:用户密码:用户id:用户主组id:用户说明:用户家目录:用户默认shell
2)/etc/group #组身份信息文件
#组名称:组密码:组id:组的附加成员
这里使用<tail>命令查看了上述两个文件的最后10行内容,如下图所示。
3)/etc/skel/.* #用户环境配置文件模板(用户配置文件如果出现任何问题,可以把此目录下的</.*>文件复制到家目录进行恢复)
4)/etc/shadow #用户认证信息文件
5)/home/username #用户家目录
6)/var/spool/mail/username #用户邮箱文件
注意:这一步开始要管理系统用户以及稍后的分配权限,都要在root用户下进行,所以我们接下来转虚拟机里操作。
watch -n 1 "tail -n 4 /etc/passwd /etc/group;echo ~~~~~~;ls -l /home"
命令解析:<watch> 是监视命令,<1>是更新频率,单位为秒;引号中的命令为我们要运行的命令,多条命令中间可以用分号<;>隔开,这样就可以每隔1秒刷新一次引号内容的变化。
useradd username #新建用户 useradd -u id username #新建用户并指定用户id useradd -g id username #新建用户并指定主组id useradd -G id username #新建用户并指定附加组id useradd -d dir username #指定用户家目录 useradd -M username #新建用户时不建立家目录 useradd -c word username #指定用户说明 useradd -s shell username #指定用shell #id范围 0————表示超级用户 1-200————(系统预留id) 201-999————(系统用户) 1000-60000————用户级用户(普通用户)
useradd test1 #新建用户
useradd -u 1234 test2 #新建用户并指定用户id
useradd -g 7777 test3 #新建用户并指定主组id
useradd -G 1234 #新建用户并指定附加组id
(注意:使用这两条命令时要求所加入的“组”必须存在,否则程序无法向后执行)
可以看出,创建<test1>用户时没有指定用户id,默认id是从1000往后排序;创建<test2>用户时指定用户id是1234,从监视窗口可以看出<test2>的id是指定的1234;创建<test3>时主组id指定的为7777,但是报错了,所以指定的组必须要存在才可以执行,所以先创建了一个id为7777的组<testa>,然后重新创建用户<test3>,监视窗口显示创建成功,且主组id为7777;同样的,在创建用户<test4>时,指定它的附加组为<1234>,这个id刚好是用户<test2>的主组,所以通过<id>命令可以看到<test4>用户除了自己的主组之外还有一个附加组<test2>。
useradd -d /tmp/hahaha/ test5 #新建用户并指定家目录
这里先创建了一个目录</tmp/hahaha>,然后创建用户<test5>并指定其家目录为这个路径,切换用户后可以看到,此用户的家目录已经在指定的路径了,同时查看之前创建的用户<test4>的家目录,没有经过特别设置默认家目录就在</home/test4>下。
useradd -M test6 #创建用户且不建立家目录
useradd -c “hello zzh” test7 #创建用户时指定用户说明(这个说明会在登陆时显示)
useradd -s /bin/sh test8 #创建用户时指定此用户使用的shell
这里创建<test6>时没有创建家目录,所以使用<su>命令切换时会显示“家目录不存在”;创建<test7>时指定用户说明为“hello zzh”,在监视窗口可以看到给用户<test7>指定的说明,此说明会在登陆用户时显示;创建<test8>用户时,先看了一下<etc/shells>文件中有哪些可以使用的shell,从中选择了</bin/sh>作为此用户的shell,创建完成后在监视窗口可以看到<test8>的信息中最后一处已经成为了我指定的shell。
userdel -r username #删除用户并删除此用户的系统配置文件
groupadd groupname #创建用户组 groupadd -g id groupname #创建用户组并指定组id
groupdel groupname #删除用户组
这里解释一下即将要涉及到的几个名词的区别:
用户id:用户创建下来就带有的id,类似于张三出生时就拿到的身份证号,想改变的话只有超级用户可以改。
主组:用户创建下来默认属于的主组,类似于张三出生后他的家庭就是他的主组,主组只能有一个。
附加组:区别于用户的主组,类似与于张三加入了学生会、党组织等等,张三具有这些组织的组内成员的身份,这些组织都是张三的附加组。
用户说明:一般在登陆的时候显示出来的名称,如果不特别设置默认就是用户名称。
usermod -l newname oldname #更改用户名称 usermod -u id username #更改用户id usermod -g id username #更改用户主组id usermod -G id username #更改用户附加组id usermod -aG id username #增加用户附加组组id usermod -c "hello zzh" username #更改用户说明 usermod -d /home/haha username #更改家目录指向,但不改变家目录名称 usermod -md /home/hahaha username #更改家目录指向,也改变家目录名称 usermod -s /bin/bash username #更改默认shell usermod -L username #锁定用户 usermod -U username #解锁用户
usermod -l zzhlinux zzh #更改用户名称
usermod -u 1234 zzhlinux #更改用户id
usermod -g 1002 zzhlinux #更改用户主组id
这里先创建了用户<zzh><zzh1>,用户组<linux><linux1>。先修改了用户<zzh>的用户名为<zzhlinux>;然后再通过第二条命令改变了用户<zzhlinux>的用户id为“1234”;接下来再通过第三条命令更改用户主组id为“1002”,这里可以看出,这个用户和用户<zzh1>的属于同一个主组。
usermod -G 1003 zzh1 #更改用户附加组id
usermod -aG 1004 zzh2 #增加用户附加组组id
这里可以看出,用户<zzh1>原本的附加组就是自己本身,通过执行第一条命令后(<1003>),给它的附加组增加了用户组<linux>下的新身份,再次执行同样的操作(<1004>),发现只保留了用户组<1004>附加组身份,可见此命令会更改用户的附加组身份,不会保留之前已经拥有的附加组身份;但是通过再次执行第二条命令<1003>后,发现此用户的附加组既有<linux>又有<linux1>,也就是说第二条命令可以在添加用户的附加组身份的同时不改变之前的附加组身份。
usermod -c "hello zzh" zzh1 #更改用户说明
usermod -d /home/haha zzh1 #更改家目录指向,但不改变家目录名称
usermod -md /home/hahaha zzhlinux #更改家目录指向,也改变家目录名称
这里分别用第二条命令和第三条命令对<zzh1>和<zzhlinux>执行操作(悄悄说一句,这里我看不到两个命令有啥不同,但一般改家目录指向的时候家目录名称也一起改了,这样便于后续操作,即参数取<-md>);对用户<zzh1>执行第一条命令,可以把用户说明改称想要的名称,在登陆账户的时候显示用的。
usermod -s /usr/bin/bash zzh1 #更改默认shell
usermod -L username #锁定用户
usermod -U username #解锁用户
这里先查看</etc/shells>文件中我们有哪些可用的shells,然后执行第一条命令将用户<zzh1>的shell由</bin/bash>改为了</usr/bin/sh>,通过命令监视窗口可以看出用户<zzh1>的shell更改成功。
~~~~~~~~~~未完待续~~~~~~~~~~~~~~~~