Linux系统用户与用户组管理 — 常用命令

1. /etc/passwd 解说

在这里插入图片描述

  • 第1个字段为用户名
  • 第2个字段存放的是该账号的口令
  • 第3个字段为一个数字
  • 第4个字段也是数字,表示组标识号,也称gid
  • 第5个字段为注释说明,没有实际意义
  • 第6个字段为用户的家目录,当用户登录时,就处在这个目录下。
  • 最后一个字段为用户的shell
2. /etc/shadow 解说

在这里插入图片描述

  • 第1个字段为用户名,与/etc/passwd对应。
  • 第2个字段为用户密码,是该账号的真正密码。
  • 第3个字段为上次更改密码的日期,这个数字以1970年1月1日和上次更改密码的日期为基准计算而来。
  • 第4个字段为要过多少天才可以更改密码,默认为0,既不受限制。
  • 第5个字段为密码多少天后到期,即在多少天内必须更改密码。
  • 第6个字段为密码到期前的警告期限。
  • 第7个字段 为账号失效期限。
  • 第8个字段为账号的生命周期。
  • 最后一个字段作为保留用的,没有什么意义。
3. 新增组的命令 groupadd

在这里插入图片描述
如果加上 -g 选项,则可以自定义gid创建组:
在这里插入图片描述

4. 删除组的命令 groupdel

在这里插入图片描述

如果遇到不能删除的组,若是组中有账户则要先删除账户再删除组。
5. 增加用户的命令 useradd

命令格式:useradd[-u UID] [-g GID] [-d HOME] [-M] [-s]

  • -u:表示自定义UID。
  • -g:表示使新增用户属于已经存在的某个组,后面可以跟组id,也可以跟组名。
  • -d:表示自定义用户的家目录。
  • -M:表示不建立家目录。
  • -s:表示自定义shell。
6. 删除账户的命令 userdel
  1. 若直接接用户名就直接删除用户名
  2. 若想把家目录一并删除就要加上选项 -r
7. 命令 passwd
  1. 输入passwd回车即为更改root账户的密码
  2. 前提登录的是root账户,想删除普通账户就可以直接在:passwd后加指定的账户名称 (只有登录的是root才可以修改其他账户的密码,普通账户只能修改自己的密码)
8. 命令 mkpasswd

命令mkpasswd用于生成密码。我们安装的Linux默认是没有这个命令的,需要安装一个expect软件包,安装命令如下:
在这里插入图片描述
1.输入命令直接回车即可以生成密码。
2.可以指定长度的密码。
在这里插入图片描述
3.也可以指定密码中有几个特殊字符或几个数字: -l 设置指定长度 ;-s (special) 设置特殊符号位数 ;-d (digit) 设置数字

在这里插入图片描述

9. 命令 su
  1. 我一般是使用在根目录下su - 就会直接回到家目录
  2. 直接在su - 后接账户名即可进入指定账户
    在这里插入图片描述
10. 命令 sudo

sudo 可以让普通用户临时执行一条命令,让普通用户临时拥有 root 身份;默认情况下,只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的

使用visudo命令编辑/etc/sudoers配置文件(必须使用root账户)
添加用户内容:
在这里插入图片描述
但是这样有一个问题:每增加一个用户就设置一行太麻烦了,所以我们可以找到**## Allows people in group wheel to run all commands# %wheel ALL=(ALL) ALL**前的#去掉即可。
在这里插入图片描述
在这里插入图片描述

如果在编辑/etc/sudoers/退出保存失败可以强制保存退出:wq!;或者先修改/etc/sudoers的权限:chmod 777 /etc/sudoers,编辑完文件要把权限改回原来的: chmod 440 /etc/sudoers

5.5课后习题

(1)查看配置文件/etc/shadow第一行中root账号的第3个字段(由:分隔)中的数字,请算一下这个数字是怎么得来的?
答:在我个人虚拟机上第三个字段为0,就搞不懂为什么…
所以我这里采用书籍上的结果,如图:
在这里插入图片描述
在这里插入图片描述
根据书籍提供的例子,得出:
已知 365*(2012-1970)+(2012-1970)/4+1=12341,求17212是怎么得出的?
解:设年份为x
得: 365*(x -1970)+(x -1970)/4+1=17212
365x - 719050 + x/4 - 492.5 + 1 = 17212
365x + x/4 = 17212+719050+492.5-1
两边同时乘以4得 1460x + x = 2947014
x =2017.12115
由结果得知,并试验得出:小数点后都要保留,不然验证的结果是不正确的!

验证
把x值代入365*(x -1970)+(x -1970)/4+1=17212得 :
365* (2017.12115 - 1970)+ (2017.12115-1970)/4+1
=736249.22-719050 + 12.7802875
=17212.0003
≈17212
这叫反推法,如果没有例子的情况下可能是行不通的,百度上的方法看得不是很懂,就不提出,因为也没有唯一的解答。

(2)写出一个你认为很强大的密码。
答: 3ZcdKmn@#drhq9

(3)查资料弄清楚/sbin/nologin和/bin/false的区别。你知道它们分别用在什么场合吗?
答:/sbin/nologin 不允许账号登陆,但是可以使用在ftp账号上,也就是说ftp账号即使设置了该项也可以通过ftp登陆。
/bin/false 严格禁止用户登录系统,禁止使用一切服务。

(4)当我们创建一个新的账号时,系统会修改哪几个文件呢?
答:/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow

(5)假如我们已经创建了一个普通用户userl,默认这个用户的家目录为/home/user1,做试验证明能否直接修改/etc/passwd配置文件中user1的家目录那个字段而改变user1的家目录呢?(提示:你可以使用cd~命令进入当前用户的家目录来验证)
答:在这里插入图片描述

(6)/etc/passwd文件以:为分隔符,第3、4个字段表示什么含义?如果把某一行的第3个字段改为0,会发生什么呢?
答:第三个表示用户id,第四个为组id,如果把第三个字段改为0,那么该用户会变成 root

(7)先新增一个组group11,然后再新增一个账号user12,使该账号所属组为group11组。
答:如图:
在这里插入图片描述
在这里插入图片描述

(8)如果删除一个组时报错:cannot remove the primary group of user’aming,这是什么意思?如何解决该问题呢?
答:因为删除的组内有用户,需要先删除该组内的账号,再删除组。

(9)如何在删除某个账户时一并删除这个账户的家目录?
答:
在这里插入图片描述

(10)如果你的Linux没有命令mkpasswd,需要安装什么软件包?
答: yum install -y expect
在这里插入图片描述

(11)普通账户可以修改自己的密码吗?
答:可以。切换到要修改的普通用户,然后输入:passwd ,回车;然后先输入自己的旧密码,再输入两遍新密码即可(这里我不演示修改)
在这里插入图片描述

(12)使用su命令时,后面加-表示什么含义?
答: 加上 - 表示,切换用户时,使用该用户的所有环境变量。

(13)sudo命令的作用是什么?
答:普通用户想临时使用超级管理员权限时使用sudo。

(14)创建系统账号时,账户名要符合什么样的规范?
答:百度:可以是大小写字母、数字、减号(不能出现在首位)、点以及下划线,其他字符不合法。虽然用户名中可以出现点,但不建议使用,尤其是首位为点时,另外减号也不建议使用,因为容易造成混淆。

(15)Linux系统里,你知道uid最大是多少吗?创建一个普通账号的默认uid最小是多少?
答:百度:普通用户的uid最大为65535,目前的 linux 核心 (2.6.x 版)已经可以最大支持到 4294967295 (2^32-1) 。默认普通账号的最小uid为500。

(16)一个用户可以同时属于多个用户组吗?如果可以,如何把一个用户加入到另外的组里?如何
同时加入多个组?

答:可以;如图所示:
在这里插入图片描述


补充命令:

1.如何使用命令把一个用户加入多个组?

usermod -G 组1,组2,…,组X 用户名 (组与组之间用逗号隔开)

2.查看当前用户所属的组

groups

3.查看某个账号所属组

groups 账号名

4.sed命令

除了拥有查找功能外,还拥有替换功能
sed -i :直接修改读取的文件内容,而不是输出到终端。
像上述习题解答的第(5)小问出现:unknown option to `s’ ; 这是因为替换的字符串包含有分隔符 / ,解决办法:改成井号 # 或者 ! 等其他来分割即可。
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐