Linux用户与用户组管理

Linux用户与用户组管理

上一节已经提到了一些Linux用户的知识

大部分 Linux 系统在安装时都会建议用户新建一个用户而不是直接使用 root 用户进行登录,当然也有直接使用 root 登录的例如 Kali(基于 Debian 的 Linux 发行版,集成大量工具软件,主要用于数字取证的操作系统)。一般我们登录系统时都是以普通账户的身份登录的,要创建用户需要 root 权限,要用到 sudo 命令。

切换用户

1
su <user\>

使用户切换到user,需要输入目标用户的密码

sudo 可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码

1
su - <user\>

切换用户,但是同时用户的环境变量和工作目录也会跟着改变成目标用户所对应的

创建用户

1
sudo adduser \<user>

默认情况下,添加用户操作也会相应的增加一个同名的组,用户属于同名组

image-20210914162057186

这个命令不但可以添加用户到系统,同时也会默认为新用户在 /home 目录下创建一个工作目录

image-20210914162257824

用户组

在 Linux 里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源

1
groups

查看用户所属用户组

新建的用户 所属用户组即自身

image-20210914162603936

一个用户可以属于多个组,将用户加入到组:

1
$usermod -G groupName username

image-20210914163504552

这样stu就拥有sudo权限了

image-20210914164017539

变更用户所属的根组(将用户加入到新的组,并从原有的组中除去):

1
$usermod -g groupName username

删除用户

sudo deluser lilei --remove-home

image-20210914164438751

系统的所有用户及所有组信息分别记录在两个文件中:/etc/passwd , /etc/group 默认情况下这两个文件对所有用户可读:

查看所有用户及权限:

1
$more /etc/passwd

查看所有的用户组及权限:

1
$more /etc/group

当然 less is better than more

etc/group 文件格式说明

/etc/group 的内容包括用户组(Group)、用户组口令、GID(组 ID) 及该用户组所包含的用户(User),每个用户组一条记录。格式如下:

group_name:password:GID:user_list

如果用户的 GID 等于用户组的 GID,那么最后一个字段 user_list 就是空的

image-20210914171348580

x表示密码 不可见

利用查看文件命令可以知道有没有该用户

grep可以用于搜索

image-20210914164726095

添加用户组

groupadd命令
功能:添加用户组
用法:groupadd [-g gid][-o][-r][-f] groupname
参数
-g gid:除非使用-o参数不然该值必须是唯一,不可相同。数值不可为负。
-o:允许设置相同组id的群组
-r:建立系统组
-f:强制执行,默认是不允许创建相同id的组的,使用此参数就可以,而且不用-o选项。

image-20210914165619148

修改用户组

1
groupmod

命令
功能:修改用户组
用法:groupmod [-g gid [-o]] [-n group_name] group
参数:
-g gid:指定id
-o:与groupadd相同
-n group_name:修改用户组名为group_name

image-20210914165717338

删除用户组

1
delgroup  <groupname\>

image-20210914165056709

删除用户组可以使用 groupdel 命令,倘若该群组中仍包括某些用户,则必须先删除这些用户后,才能删除群组。

注意 adduser 与useradd都有,但是有差别

useradd 只创建用户,不会创建用户密码和工作目录,创建完了需要使用 passwd <username> 去设置新用户的密码。adduser 在创建用户的同时,会创建工作目录和密码(提示你设置),做这一系列的操作

若使用useradd 则需要使用$passwd username修改密码

批量添加(删除用户)

我在网上搜到的办法基本都是用脚本执行,貌似没有这方面直接的命令

如果用脚本批量处理的话,这个问题也就不算问题了

前提是要会写shell脚本

关于vim以及shell脚本学习内容还是不少的

我后面会写一点

image-20210914172622881

image-20210914172610914

image-20210914172252606

我在ubuntu上试了一下,发现会报错 stdin识别不了

这种方法只能在其他发行版用

所以换了一个方法

1
echo username:newpasswd | chpasswd

image-20210914190012781

注意 useradd并不会添加主目录,需要加上参数

1
$useradd -m username

该命令为用户创建相应的帐号和用户目录/home/username;

我加上-m参数后

image-20210914190234095

但是!!!

我发现没有办法登录,输入原本的密码不行

于是查看了 shadow文件(存储用户密码的)

image-20210914192729556

密码是 !表示被锁了,然后我发现如果用 |就会报错

image-20210914192816986

image-20210914192907922

说是认证令牌错误,然后我将chpasswd提升到sudo,即

image-20210914192959814

image-20210914193038777

修改成功了..所以说是权限不够…

并且我不清楚 | 与 >的差别..

后面我再写一些重定向与管道..

批量删除用户 且删除用户目录 -r

image-20210914191430644

image-20210914191500303

1
chpasswd < user.txt

补充

也可以利用newusers与chpasswd批量新建用户

一个user.txt内容如下:

1
user001:x600: 100:user:/home/user001:/bin/bashwin00: x:520:520::/home/win00:/sbin/nologin  通过这个属性让用户无法登录

字段含义:

Account:用户的名称,如例子中的root;

Password:用户密码,我们看到这里只显示x,不是指密码就为x,而是表示该密码已经被移动到shadow中去了。

UID:用户ID。

GID:组ID。指明用户所属组。

GECOS:一般说明用户信息的

Directory:即常说的家目录

Shell:用来指明用户登录时预设使用的bash

(2)newusers < user.txt

然后可以执行cat /etc/passwd检查/etc/passwd文件是否已经出现这些用户的数据,并且用户的宿主目录是否已经创建。此时就会在/etc/shadow中对新增的用户产生密码

(3)编辑每个用户的密码对照文件,

范例文件passwd.txt内容如下:

1
user001:密码user002:密码....

(4)chpasswd < passwd.txt

-------------本文结束感谢您的阅读-------------
感谢阅读.

欢迎关注我的其它发布渠道