目录
一、用户及用户组存在的意义
1、用户存在的意义
系统资源是有限的,如何合理分配系统资源?
在这个问题解决时必须要有连个资源配合
1)身份 account
2)授权author
3)认证auth
3A机制,3A机制组成系统中最底层的安全架构
2、用户组存在意义
用户组是一个逻辑容器
对用户进行归类和统一授权
二、用户及用户组在系统中的存在方式
电脑对数字敏感---------------id
人类对字符串敏感-----------名称
id<-------> 名称 必须要记录到文件当中用户才能存在
用户就是</etc/passwd>文件中的一行字符
用户组存在的方式就是</etc/group>文件中的一行字符
三、用户切换
1、用户查看命令
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>
2、用户切换
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用户下进行,所以我们接下来转虚拟机里操作。
1、建立监控用户操作的命令
watch -n 1 "tail -n 4 /etc/passwd /etc/group;echo ~~~~~~;ls -l /home"
命令解析:<watch> 是监视命令,<1>是更新频率,单位为秒;引号中的命令为我们要运行的命令,多条命令中间可以用分号<;>隔开,这样就可以每隔1秒刷新一次引号内容的变化。
2、useradd:建立新用户
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。
3、userdel:删除用户
userdel -r username #删除用户并删除此用户的系统配置文件
4、groupadd:创建用户组
groupadd groupname #创建用户组
groupadd -g id groupname #创建用户组并指定组id
5、groupdel:删除用户组
groupdel groupname #删除用户组
六、用户和用户组的信息管理
usermod:更改用户和用户组基本信息
这里解释一下即将要涉及到的几个名词的区别:
用户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更改成功。
七、用户认证信息管理
1、/etc/shadow文件内容说明
zzh:!!:18904:0:99999:7:::
#用户名称:用户密码的加密字符:用户密码最后一次被修改时间:密码最短有效期:密码最长有效期:密码过期前警告期:账号非活跃期:账号到期时间:用户自定义(未使用)
查询此文件内容得到的一串字符表示的含义是:
用户名称 : zzh(也就是创建用户时设置的用户名)
用户密码的加密字符 : !!(没有设置密码时这里显示为“!!”,设置密码后显示为密码的加密字符)
用户密码最后一次被修改时间 : 18904(默认日期是1970年1月1日,到现在为止已经过了18904天)
密码最短有效期 : 0(两次修改密码之间所需的最小天数,即本次更改密码后多少天后才可以再次进行更改)
密码最长有效期 : 99999(此密码保存的最大天数,即本次更改密码后多少天内至少更改一次密码,否则密码就会过期)
密码过期前警告期 : 7(密码失效前的7天里系统会给用户发警告信息要求该密码)
账号非活跃期 : (账号密码过期后,允许不修改密码的时间,即该修改新密码前的“缓冲区”)
账号到期时间 : (设置后就意味着给了账号使用期,过期后就不能再登录了)
用户自定义(未使用) :
2、用户名称
passwd -S username #查看密码状态
passwd -S lee #查看密码状态
这个命令可以查看账户密码的基本状态,包含锁定状态、创建日期、密码最短有效期、密码最长有效期、密码过期前警告等。
3、用户加密字符
(1)passwd username #更改密码
(2)passwd -l username #锁定账户
passwd -u username #解锁账户
(3)passwd -d username #删除密码
(4)passwd -e username
chage -d 0 username #修改密码默认使用时间为0,清零后,账号必须修改密码才能登录系统
(5)passwd -n 1 username
chage -m 1 username #修改密码的最短有效期,这里修改的是用户在1天内不能该密码
(6)passwd -x 40 username
chage -M 40 username #修改密码的最长有效期,这里修改的是用户在40天内至少改一次密码
(7)passwd -w 2 username
chage -W 2 username #修改密码过期警告,这里修改的是密码过期前2天发出改密警告
(8)passwd -i 3 username
chage -I 3 username #修改认证的非活跃天数,即账号超过最大认证时间后还能用多久
(9)chage -E "2020-05-11“ username #到2020-05-11这天账户会被冻结
(1)passwd lee #更改密码
这里先创建一个新用户<lee>,通过监视窗口可以看出初始账户没有设置密码时</etc/shadow>文件中的<lee>账户的密码处显示的是“!!”,使用此命令修改完密码后变成了一串加密的字符。
(2)passwd -l lee #锁定账户
passwd -u lee #解锁账户
这里可以看出,在没有执行锁定账户命令前,账户的<passwd -S lee>状态第二格显示的是“PS”状态,且</etc/shadow>中的第二格密码加密字符前没有感叹号;锁定账户后,“PS”变成了“LK”状态,且密码加密字符前加上了两个感叹号。
(3)passwd -d lee #删除密码
这里可以看出,在账户有密码时,</etc/shadow>中账户<lee>的第二格有一长串密码加密字符,执行此命令后,这一串密码加密字符消失了。
(4)passwd -e lee
chage -d 0 lee #修改密码默认使用时间为0,清零后,账号必须修改密码才能登录系统
(5)passwd -n 1 lee
chage -m 1 lee #修改密码的最短有效期,这里修改的是用户在1天内不能该密码
(6)passwd -x 40 lee
chage -M 40 lee #修改密码的最长有效期,这里修改的是用户在40天内至少改一次密码
(7)passwd -w 2 lee
chage -W 2 lee #修改密码过期警告,这里修改的是密码过期前2天发出改密警告
(8)passwd -i 2 lee
chage -I 2 lee #修改认证的非活跃天数,即账号超过最大认证时间后还能用多久
(9)chage -E "2020-05-11“ lee #到2020-05-11这天账户会被冻结
八、用户权力下放
1、为什么要把权限下放给普通用户?
答:在系统中普通用户偶尔也要执行系统管理命令,但是普通用户并没有权限对系统文件或命令进行操作,所以这时需要root用户适当把相应权力下放给普通用户,让该普通用户也可以执行以上操作。
2、sudo:普通用户的授权方式
在普通用户执行被限制的命令时,可以在命令前加上<sudo>,表示此命令是以指定的有权限的用户身份运行的。
3、授权方法
visudo :直接运行,默认编辑</etc/sudoers>,并提供语法检测
注意:这里的<visudo>命令是专门编辑这个系统配置文件的,不可以用<vim>编辑。
开始编辑</etc/sudoers>文件后,定位到第100行左右添加要放权的用户及权限。
执行格式:
基本格式:
username hostname=(newusername) [NOPASSWD:] /command, /command1
免密状态下:
#lee用户 在linux.westos.com主机=(用超级用户身份) 执行useradd命令
lee linux.westos.com=(root) /usr/sbin/useradd
需要密码状态下:
#lwestos用户 在linux.westos.com上 使用超级用户 执行useradd和userdel命令
westos linux.westos.com = (root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/userdel
<[NOPASSWD]>可以根据需要设置用户在使用系统权限时是否需要密码。每条权限之间用<逗号+空格>隔开。
这里新建了一个用户<zzh>,可以看出在新建的普通用户下新建用户显示“没有权限”,那么接下来就按上述操作让此用户有管理用户的权限。
先通过<visudo>把对用户的管理权限增加在普通用户<zzh>上,需要的<hostname>的名称可以直接在shell窗口获得,最后<NOPASSWD>参数可以让普通用户在使用这些权限的时候不输入密码。(通常来讲,root用户的目的是为了更合理地分配权限,也就是说用户需要那些权限就给他哪些权限,用户没有说要的权限就不能给,以防权限滥用。)
设置好用户<zzh>的权限后再次进入用户下,执行创建用户<zzh1>的操作,但是报错,原因还是没有权限,这是因为如果直接执行命令的话用户<zzh>还是没有权力调用<useradd>命令;所以需要在此命令之前再加上<sudo>表示通过这个“权限列表”调用的此命令,加上这个命令后可以看出,普通用户<zzh>成功创建新用户<zzh1>。
九、测试
在系统中完成以下用户操作
1.建立用户组shengchan,caiwu,jishu并满足以下要求
*shengchan组id为8000
*caiwu组id为8001
*jishu组id为80022.建立westoslee,linux,lee,westosadmin等用户并完成以下要求
*westoslee用户的附加组为shengchan和jishu
*lee的主组为caiwu,附加组为jishu,lee的uid和gid必须一致
*linux为系统账号,不能直接被操作着使用
*westosadmin用户不属于以上三个部门,但是可以在系统中自由地管理用户3.
*以上用户密码均为westoslee,并要求用户首次登录时强制修改密码
*设定以上用户密码必须在30天内进行修改,并在过期前2天发出警告
实验步骤:
第一题:创建用户组时加上参数<-g>,可以指定用户组的id。
第二题:(1)添加附加组需要用到<usermod -aG gid username>命令。
(2)更改主组用到<usermod -g gid username>命令;更改附加组用到<usermod -G gid username>命令;更改用户id用到<usermod -u uid username>命令
(3)系统账号不能直接被操作者使用,意味着此用户的shell为非交互式,用到的<usermod -s /sbin/nologin username>命令把用户的shell更改成非交互式shell,更改完成后使用<su - >命令显示无法切换用户,更改成功。
(4)要求用户可以在系统中自由管理用户,那么就需要给这个用户赋予管理用户的全部权限,所以通过<visudo>命令修改用户权限,定位到100行左右,在最后添加上此用户可以使用的这些系统文件。
第三题:
(1)修改密码使用<passwd username>命令,但是这个命令修改密码时会要求输入两次来确认密码,所以这里我们使用了管道符“|”,命令改为<echo westoslee | passwd --stdin username>,对每个用户改密码时只需要执行一次就可以了;
(2)首次登录强制改密这是由于把账户的默认使用天数清零造成的,所以这里我们执行命令<passwd -e username>或者<chage -d 0 username>,两条命令都可以。
(3)设定用户密码必须30天之内修改,是要设置密码的最长有效期,使用命令<passwd -x 30 username>或者<chage -M 30 username>,两条命令都可以修改最长有效期。
(4)设置密码过期警告,使用<passwd -w 2 username>或者<chage -W username>,两条命令都可以设置密码过期警告天数。
十、本章总结
这章学完以后还有几个地方含糊不清,需要多花时间来熟练掌握的。
1、监视用户状态的时候一般要用到</etc/passwd>、</etc/group>、</etc/shadow>这三个文件和</home>目录,记住这四个文件/目录的作用。
2、设置系统账户时,如果要求此账户不可访问(或者此账户为非交互账户),那么我们应该把这个账户的shell从“可交互shell“变为”非交互shell”,相应的shell设置为</sbin/nologin>。
3、在给普通用户赋予管理其他账户的权限时,要用到的文件是</usr/sbin/useradd>、</usr/sbin/userdel>、</usr/sbin/usermod>、</bin/passwd>。
4、关于锁定与解锁账户的两个命令<usermod><passwd>的区别:
usermod -L lee #会在密码符文前添加一个< ! >
usermod -U lee #会在密码符文前取消一个< ! >
passwd -l lee #会在密码符文前添加两个< ! >
passwd -u lee #会在密码符文前取消两个< ! >
经过测试,两条命令的功能可以通用,用<passwd>命令设置的两个“!”,可以通过<usermod>命令执行两次取消。
5、~~~~~未完待续,以后想到了什么再补~~~~~~~~