Liunx学习笔记 - 03 - 用户和用户组管理

Liunx学习笔记 - 03 - 用户和用户组管理

1 用户配置文件

1.1 用户信息文件/etc/passwd

用vi /etc/passwd来查看该用户信息配置文件的详细内容

用man 5 passwd来查看该文件的帮助信息(注意,只打文件名,不要打绝对路径)

该文件内容中的每一行代表一个用户的信息,且各类信息用冒号:隔开,共7个字段,如下:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
……省略部分中间行的输出……
meiguanhua:x:1000:1000:meiguanhua,,,:/home/meiguanhua:/bin/bash

这7个字段分别对应用户的如下信息

用户名:密码标识:UID:GID:用户备注:家目录:shell
  • 用户名,即用户名字,比如管理员root,普通用户meiguanhua、zhangsan等
  • 密码标识,早期的UNIX的确是把密码放在passwd字段的,然而用ll /etc/passwd可以发现该passwd文件权限为644,任何人都能随意查看改密码,虽然该密码经过了加密处理显示为加密的字符串,但是依旧可以暴力破解。所以,现在的Linux系统把真正的加密密码串放置在影子文件/etc/shadow中,而影子文件的权限用ll /etc/shadow查到是000,即,这个文件是没有任何权限的,只有超级管理员root用户(读取权限不受任何限制,也可强制手工修改文件内容)才能查看修改它,这样就尽可能地保证了密码的安全。这里的x就是表示密码没放这儿,放到/etc/shadow里了。
  • UID为用户的ID号(ID号是唯一标识号,好比人的身份证号一样),root的UID是0,而1-499是系统用户(伪用户,这些用户是系统或服务正常运行所必需的用户,不能登录,也不能删除),500-65535为普通用户,若把普通用户的UID改为0,则系统会把这个普通用户也当成是root用户(变身凹凸曼了)。
  • GID为用户初始组ID,由于每个用户都有一个初始组,且组名一般是和用户名相同的,用户登陆后即可拥有该初始组的权限,实际上新添加的用户也会有个默认的跟用户名相同的初始组。但是该用户除了默认加入的该初始组之外,还可以加入其他的组,这就是附加组了,好比一个人他叫羽毛球,他有个羽毛球初始组,他也可以加入网球组、乒乓球组等附加组,当然,他也拥有这些附加组的权限。不推荐修改用户的初始组名字,会给管理带来混乱。
  • 用户的备注(说明,介绍,简介),类似于你QQ上给某个账户做个注释讲讲这家伙是谁,便于自己理解而已,这里不添加任何备注也没有问题的。
  • 用户的家目录是用户登录后所在的目录,也是其有权限操作的目录。root用户的是/root,而普通用户的是/home/用户名,比如zhangsan的家目录就是/home/zhangsan,一般创建一个新用户,系统会自动在/home下建立一个以该新用户名命名的目录,作为其家目录。
  • shell是Linux的命令解释器,root用户和普通用户的shell都为/bin/bash,而伪用户的shell显示为/usr/sbin/nologin,表示其不能登录。当然,如果恶作剧把普通用户的shell改成了/usr/sbin/nologin,那么他就没办法登录了。
  • 当用useradd添加了一个新的普通用户后,其最下方会出现一行跟该用户相关的信息,比如添加useradd zhangsan之后,这个/etc/passwd文件自动会加上一行
zhangsan:x:1001:1001::/home/zhangsan:/bin/bash

当然,这里的1001的UID和GID号视情况而定,且默认是没有备注的。

1.2 影子文件/etc/shadow

这个文件存放用户的密码信息,如前所述,用ll /etc/shadow可以看到该文件权限为000,只有root用户采用权限来读取该文件和强制修改保存该文件。

用vi /etc/shadow可查看该文件的内容(注意,用sudo vi /etc/shadow来临时借用root身份执行查看文件的命令)

root:!:18227:0:99999:7:::
daemon:*:18113:0:99999:7:::
bin:*:18113:0:99999:7:::
……省略部分行……
meiguanhua:$6$bD/…太长了省略掉…Y.vOi:18229:0:99999:7:::

其每行代表一个用户的密码信息,且用冒号分割为9个字段

用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

第1字段为用户名,比如超级用户root,伪用户daemon,普通用户meiguanhua等

第2字段为加密密码,如果密码是!或是*表示没有密码,不能登录,如果是用一大串数字字母字符组成的,则是把用户的密码用SHA512散列加密算法加密后的加密字串,尽管经过加密处理,但是这些明文字串也有可能被人暴力破解,所以还是小心保护为好。那么如果不想让某个用户登录,可以把他的密码前面加个叹号!就可以屏蔽他登陆了。

第3字段为密码的最后一次修改日期,但是这里的时间比较奇怪,它叫时间戳,是从1970年1月1日开始算,每过1天加1,也就是最后一次修改日期是发生在1970年1月1日之后的第X天。比如root的18227算下来的话就是2019年11月27日,可以从网上找些日期计算器来算,也可以用date -d "1970-01-01 18227 days"命令来计算。
在这里插入图片描述

第4字段为两次密码修改的最小间隔时间(与第3字段相比),默认是0,即随时可以修改密码,如果是10,则表示修改完密码之后,10天以内不允许再修改密码,这个可以限制某些人频繁修改密码。

第5字段为密码的有效期(与第3字段相比),单位为天,默认是99999,即修改完密码后,其在99999天都是有效的,即99999/365=274年都有效,考虑到人寿命也就七八十年,所以基本可以认为默认是密码永久有效了。如果把这里改成90,那么意思是每隔3个月旧密码就作废,让用户换个新密码。管理服务器的时后,可以通过这个字段强制用户定期修改密码,提高安全性。

第6字段为密码过期前多少天提醒用户(与第5字段相比),单位为天,默认是7,那么如果第5字段设置为90的话,改过密码后,在第83-90天,系统会提示该用户密码过几天就要失效了,请及时更改之类的。

第7字段为密码过期后的宽限天数(和第5字段相比),表示密码失效后还能给用户宽限多少天来修改密码,如果再不修改,就禁用该用户。不写或者0表示密码过期后不做宽限,直接禁用该用户。写成-1表示永远宽限,即密码永不失效。如果是10,则表示密码过期后,还能有多出来的10天时间让用户继续登录和修改密码。

第8字段为账号失效时间,和第 3 个字段一样,使用自1970年1月1日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!

第9字段为保留字段,等待后续开发加入功能。

如果给新用户zhangsan用passwd zhangsan设置了密码的话,那么这个shadow里面就会多出来一行关于zhangsan的密码信息

zhangsan:……SHA512对密码加密后的超长的一串字符……:18248:0:99999:7:::

1.3 组信息文件/etc/group和密码文件/etc/gshadow

组信息文件/etc/group,用vim /etc/group查看如下

root:x:0:
daemon:x:1:
bin:x:2:
……省略中间行……
meiguanhua:x:1000:
zhangsan:x:1001:

每一行对应着一个组的信息,同样用冒号分隔,共有4个字段

组名:组密码标识:GID:组中附加用户(不包含初始用户)
  • 组名即用户组名称
  • 组密码标识一般是x,即表示密码放在/etc/shadow影子文件里。
  • 组密码是个什么鬼??用户设置密码是为了验证用户的身份,那用户组设置密码是用来做什么的呢?用户组密码主要是用来指定组管理员的,由于系统中的账号可能会非常多,root 用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代 root 进行管理。但是这项功能目前很少使用,我们也很少设置组密码。如果需要赋予某用户调整某个用户组的权限,则可以使用 sudo 命令代替。所以呢,这个用户组密码基本没啥用了~~
  • GID即组的ID号
  • 组中附加用户,即除了该组的创建者(一般跟该组名是一样的,除非你闲着蛋疼改了/etc/passwd文件中用户的初始组信息)之外,还有那些用户加入了该组。
  • 再次强调一下,用户只有一个初始组,但是可以有多个附加组,比如用usermod -G zhangsan meiguanhua将用户meiguanhua添加到组zhangsan中去,再查看该/etc/group文件,便会发现对应的zhangsan组信息行变成了
zhangsan:x:1001:meiguanhua

表明meiguanhua用户是zhangsan组的附加用户。

组密码文件/etc/gshadow,用vim /etc/gshadow查看如下

root:*::
daemon:*::
bin:*::
…省略中间行…
meiguanhua:!::
zhangsan:!::

每行为一个组密码的信息,同样冒号分隔,共有4个字段

组名:组密码:组管理员用户名:组中附加用户
  • 不难发现,组密码基本都是没有的,用*或者!表示。
  • 所以这个gshadow文件,也基本没啥用处。

查看某个用户的初始组,可以先vim /etc/passwd查询到该用户的初始组的GID,然后再vim /etc/group查询到该GID所对应的组名,便是该用户的初始组。

2 用户管理相关文件

2.1 用户的家目录

普通用户:/home/用户名/,所有者和所属组都是此用户,权限为755。
超级用户:/root/,所有者和所属组都是root,权限500。

2.2 用户邮箱

/var/spool/mail/用户名

2.3 用户模板目录

/etc/skel/

用ll /etc/skel查看该目录,发现下面有文件examples.desktop和三个隐藏文件.bash_logout、.bashrc和.profile,这个模板目录的意思是,当用useradd添加了新用户之后,模板目录下面的文件将自动拷贝一份到该新用户的家目录,即/home/用户名/中去,当作其配置文件。

3 用户管理命令useradd、passwd、usermod、chage、userdel、id、su、whoami、env、exit

3.1 添加用户(手工添加、useradd)

经过前面的介绍,不难发现,用户只不过是写在配置文件里的信息罢了,所以不用命令,也可以通过手工修改配置文件的方式来创建新用户,即:

  1. 在/etc/passwd文件中添加新用户信息行
  2. 在/etc/shadow文件中添加新用户密码信息行(密码后续再设置)
  3. 在/etc/group文件中添加新用户初始组信息行
  4. 在/etc/gshadow文件中添加初始组密码信息行(不添加也没啥影响)
  5. 创建新用户的家目录/home/新用户名(修改该目录的权限)
  6. 在新用户家目录中创建相应的配置文件(从/etc/skel拷贝过来就好)
  7. 创建新用户的邮箱目录/var/spool/mail/新用户名
  8. 用passwd来设置新用户的密码(该密码将自动加密后写入到/etc/shadow文件相应位置)

显然,手工添加太过麻烦了,可以用命令useradd直接来添加用户。

命令格式:useradd [设置选项] 用户名
选项:
-u UID 手工指定用户UID号
-d 家目录 手工指定用户的家目录(不推荐,还要手工修改权限)
-c 用户说明 手工指定用户说明(即/etc/passwd中的备注字段,若有空格,则将备注用""包含起来)
-g 组名 手工指定用户初始组(不推荐更改)
-G 组名 手工指定用户的附加组(可用指定多个附加组,用逗号分隔开)
-s shell 手工指定用户的登陆shell,默认为/bin/bash
示例:

useradd -u 888 -G root,zhangsan -c "best friend" -d /home/lisi -s /bin/bash lisi

上述操作,即添加了一个名为lisi的新用户,其UID(用户ID号)指定为吉利的888,其初始组用默认的lisi,该用户同时别拉到附加组root和zhangsan中,该用户的备注是best friend,该用户家目录指定为/home/lisi,该用户的shell为/bin/bash。可以通过查看/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow来确认该设置已经生效。

可以用useradd -D来查看添加用户的默认选项,也可以打开/etc/default/useradd文件来查看这些默认选项,用useradd -D查到的默认选项为:

GROUP=100					#用户默认组,100不知啥东西,但默认是创建与用户名同名的组
HOME=/home					#用户家目录
INACTIVE=-1					#密码失效宽限天数,-1表示永不失效
EXPIRE=						#密码失效时间,没有表示永不失效
SHELL=/bin/sh				#默认shell
SKEL=/etc/skel				#模板目录
CREATE_MAIL_SPOOL=no		#是否创建邮箱

3.2 设置用户密码passwd

命令格式:passwd [选项] 用户名
选项:
-S 查询用户密码的密码状态(gshadow中的信息),仅root用户可用。
-l 暂时锁定用户,仅root用户可用,即让该用户暂时无法登陆。
-u 解锁用户,仅root用户可用。
–stdin 可以通过管道符输出的数据作为用户的密码。
示例:

例子功能
passwd修改当前用户的密码
passwd root修改root密码
passwd meiguanhua修改用户meiguanhua的密码
  • root可以给所有人修改密码,普通用户则只能给自己修改密码。
  • echo “123” | passwd --stdin zhangsan则是用管道符“|”将echo “123”的运行结果123设置为zhangsan的密码。这个主要用于在shell编程中批量添加用户和批量初始化密码。

3.3 修改用户选项usermod和修改用户密码状态chage

修改用户选项usermod
命令格式:usermod [选项] 用户名
选项:
-u UID 修改用户UID号
-c 用户说明 修改用户说明
-G 组名 修改用户的附加组
-L 临时锁定用户
-U 临时解锁用户
-g 组名 修改用户的初始组(不推荐更改)
示例:

usermod -c “boy friend” -G root -u 666 lisi

上述操作,即对lisi用户,将其UID改为666,其附加组改为root,备注改为boy friend。

修改用户密码状态chage
命令格式:chage [选项] 用户名
选项:
-l 列出用户的详细密码状态
-d 日期 修改密码最后一次更改日期(shadow的第3字段)
-m 天数 两次密码修改间隔(shadow的第4字段)
-M 天数 密码有效期(shadow的第5字段)
-W 天数 密码过期前警告天数(shadow的第6字段)
-I 天数 密码过期后的宽限天数(shadow的第7字段)
-E 日期 账号失效时间(shadow的第8字段)

  • 其实用这个和手动修改shadow文件的效果是一样的。
  • 如果chage -d 0 lisi则lisi的密码修改日期为0,会强制让lisi修改密码。

3.4 删除用户userdel、查看用户号id、切换用户su、whoami、env、exit

删除用户userdel
语法:userdel [-r] 用户名
选项:-r 删除用户的同时删除用户的家目录(一般都加r)

当然,也可以手动删除用户,即修改etc/passwd、/etc/shadow、/etc/group、/etc/gshadow四个配置文件的信息,并删除用户家目录、用户邮箱目录这两个目录,就好了。显然,userdel更方便快捷。

查看用户ID用id命令
语法:id 用户名
功能:显示用户的uid(用户id)、gid(初始组id)和组id(含初始组合附加组)

切换用户身份命令su
语法:su [选项] 用户名
选项:

-  代表连同用户的环境变量一同切换(一般都加这个-选项)。
-c 代表仅执行一次命令,而不切换用户身份(也就是临时切换身份执行一次命令的时候用这个选项)。

su - root -c “useradd user88”即临时切换root并执行添加新用户user88的操作

  • Ubuntu里面好像没办法用su - root来切换到root用户,而是要用“sudo 命令”来临时切换root身份并执行命令,或者用sudo su直接切换到root身份来整,用exit退出root用户。
  • 可以用whoami查询当前用户
  • 可以用env查看环境变量,即家目录、邮箱等
  • 可以用exit退回到之前的用户

4 用户组管理命令groupadd、groupmod、groupdel、gpasswd

4.1 添加用户组groupadd

语法:groupadd [选项] 组名
选项:-g GID 指定组的ID号
示例:groupadd -g 999 tennis
创建用户组tennis,指定其GID为999。

4.2 修改用户组groupmod

语法:groupmod [选项] 组名
选项:
-g GID 修改组ID
-n 新组名 修改组名(不建议修改)
示例:groupmod -n badminton tennis
将tennis用户组名字修改为badminton

4.3 删除用户组groupdel

语法:groupdel 组名
注意:

  • 如果组中有初始用户,则显示不能删除(因为初始用户和初始组是绑定在一起的)
  • 如果组中仅有附加用户,则可以删除(比如你新建了一个组,他不属于任何初始用户,当然可以删除了)

4.4 用户组中删除或添加用户gpasswd

语法:gpasswd 选项 组名
选项:
-a 用户名 把用户加进来
-d 用户名 把用户踢出去
实例:
gpasswd -a lisi badminton把lisi加到badminton组里,查看/etc/group文件可确认该添加
gpasswd -d lisi badminton把lisi提出badminton组里,查看/etc/group文件可确认该删除

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值