Linux中用户的分类
在Linux中,用户通常可以分为几类,主要包括:
超级用户(Superuser):
- 也称为root用户,拥有系统中几乎所有权限的用户。root可以执行任何操作,包括修改系统关键文件、安装软件等。由于其权限极高,使用时需要格外小心,避免不必要的系统损坏或安全问题。
普通用户(Regular User):
- 大多数系统用户属于普通用户。这些用户的权限受到限制,通常只能访问自己的文件和一些系统资源。普通用户不能修改系统关键配置文件或者安装全局软件,这样有助于保护系统的安全性。
服务账户(Service Accounts):
- 这些账户是为了运行特定的服务或应用程序而创建的,通常不具备登录系统的权限。服务账户的目的是限制服务或应用程序的安全风险,因为它们通常只能访问特定的文件或资源。
伪用户(Pseudo Users):
- 这些用户是为了满足特定系统功能而创建的,通常不能登录系统。例如,"root"、"nobody"、"daemon"等都是伪用户的例子。这些用户通常用于运行特定的系统服务或进程。
这些用户分类帮助系统管理员有效地管理和保护Linux系统资源,确保系统安全性和效率。
推荐阅读文章: Linux-有关用户和组的命令详解_linux查看用户组和用户-CSDN博客
用户和用户组
用户
Linux系统中的每个用户都由一个唯一的用户名标识,用户可以属于一个或多个组。用户的详细信息通常存储在/etc/passwd文件中。该文件中的每一行都代表一个用户,其中包含7个字段,它们分别是:
- 用户名
- 密码
- 用户ID(UID) 用户的唯一标识
- 组ID(GID) 表明用户的基本组是谁
- 用户全名或注释(对用户账户的一个描述或注释,通常用来提供关于用户的额外信息,如部门、职位、联系方式等。)
- 用户主目录的路径(通常是
/home/用户名
的形式,也就是每个用户的家目录) - 用户默认的Shell程序的路径(指的就是用户的命令行解释器类型,比如linux中常用的bash)
用户组
在Linux系统中,用户组是一组用户的集合,每个用户组都有一个唯一的组名和组ID(GID)。用户组的详细信息通常存储在/etc/group文件中。该文件中的每一行都代表一个用户组,其中包含4个字段,它们分别是:
- 组名
- 组密码(已加密)
- 组ID(GID)
- 组成员
辨识用户类型
打开/etc/passwd文件,看到如下类似内容
/etc/passwd文件,文件里面存储的是linux中的所有用户的信息。包含上面我们说的7个字段。
如何根据字段辨别用户类型呢?可以看到daemon用户中用户主目录不是我们说的家目录,同时默认shell程序的路径为XX/nologin,不能登录系统,可以看来这个是服务账户或者伪用户
并且我们发现有趣的一点是虽然叫做/etc/passwd文件,但是文件里面除了用户的password看不到,其他信息都能看到,用户密码信息加密放到了其他的位置(真正的密码也加密了)。
认知root用户
用户切换 su
sudo命令
因为如果所有用户都可以自由运用sudo,这样其实不合理的
用户,用户组管理
Linux中支持:多用户,多用户组,用户可以加入多个用户组
id命令
在 id
命令的输出中,用户的 gid
(Group ID)和用户的组分别表示:
-
gid(Group ID):
- 这是用户所属的主组的组标识符(Group ID)。
- 在Linux系统中,每个用户除了属于自己的个人组(primary group)外,还可以属于其他附加组(supplementary groups)。
- 主组通常在用户创建时指定,是用户在文件系统中默认拥有的组,通常用于与用户的文件关联。
- 在
id
命令输出中,gid 通常显示为gid=组标识符
。
-
用户的组(Groups):
- 这部分列出了用户所属的所有附加组(supplementary groups)。
- 附加组是用户除了主组之外,可能还属于的其他组,用于访问共享资源或执行特定任务时的权限管理。
- 在
id
命令输出中,附加组通常列在groups=组1,组2,...
的形式下。
用户加入到不同用户组的好处和作用
- 当用户属于某个组时,可以有对该组中其他用户拥有的文件和目录的组权限,而不需要单独对这些文件设置复杂的权限。这是因为在Linux系统中,文件和目录的权限设置可以通过用户(所有者)、组和其他三种权限类别来管理。
- 这样做简化了权限管理,特别是在团队协作或多用户环境中,管理员可以更轻松地控制和管理文件访问权限。
比如上面linux加入到了sudo组中,就获得了对应组中文件的权限,就可以用sudo命令来临时获得管理员权限,没有加入到这个组中就不能使用sudo
用户创建的两种方法
useradd:增加一个新的用户(清新版)复杂
adduser:增加一个新的用户(懒人版)简单
useradd(清新版)
useradd是比较底层一点的命令,做的事情不会太多,创建用户中的很多事情需要我们手动去做
需要用到的命令:
1. passwd:设置/更改用户密码
2. usermod:设置/更改用户相关属性
具体步骤:(下面的5个步骤都是在其他拥有sudo权限用户下或者root下进行操作的)
1.sudo useradd jack
使用useradd命令需要用到管理员权限,所以这里我们使用了sudo
紧接着查看/etc/passwd和/etc/group文件变化 ,发现确实jack信息已经添加进去了这两个文件,但是jack用户的信息不完整,需要我们再来手动添加一些东西
2.为用户添加密码:sudo passwd jack
不添加密码的话是切换不成jack用户的,因为切换用户的时候是需要用户密码的
这里重新输入新的密码是二次确认输入的密码,我第一次在这里试了很多次才反应过来,有点好笑。
3.在/home文件夹下为用户添加其家目录:sudo mkdir /home/jack
你可能会说第一步之后不是在/etc/passwd文件中显示了jack的家目录是/home/jack吗?为什么还要添加,因为那里只是显示了家目录路径,当我们确定了添加用户的名字之后,用户家目录路径也就轻松知道了,实际上我们还没有在/home目录下为Jack用户新建家目录,不信你看
新建jack家目录
这里面usermod可以用来指定家目录,不过我们使用useradd命令后,已经默认指定的就是/home/jack了,所以这里这条命令没起作用,显示结果是no changes。当然你如果想改变jack的家目录,可以通过usermod这条命令来改,但不推荐
4.在jack家目录下添加一些初始的重要文件和文件夹:sudo cp -r /etc/skel/. /home/jack
skel文件夹通常位于/etc/skel目录下,该目录中包含一些文件和目录,它们被用作新用户的默认文件和文件夹。这个文件夹中的内容都隐藏了,所以要用-a才能看到
当创建新用户时,我们需要复制/etc/skel目录中的所有文件和目录到新用户的家目录中。
sudo cp -r /etc/skel/. /home/jack
这里加上了-r因为/etc/skel下的文件含有隐藏文件,加上-r选项可以将隐藏文件复制过来
这里还加了一个. ,因为这里我们的目标是将 /etc/skel目录中的内容(包括隐藏文件)复制到 /home/jack 目录中,但不复制 skel
目录本身,加上 . 指的是源目录中的所有内容(包括隐藏文件),而不包括源目录本身。
5.将/home/jack的所有者和所有组换为jack:sudo chown jack:jack /home/jack -R
不这样搞得话可能发生下面场景
我们会发现jack没有在/home/jack目录下创建文件的权限,原因是因为在创建 /home/jack 的时候,身份不是 jack,导致jack在自己家没有权限了。所以要使用这个sudo chown jack:jack /home/jack -R 命令来更换/home/jack目录的所有者和所有组。
ok这样就差不多完成啦!!!
注意此时的用户只能进行很基础的操作,比如很多快捷键或者其他功能,使用这个用户操作时是没有的。就算如此,刚刚上面创建工作依然十分复杂。
所以请看下面的懒人版吧!^_^
adduser(懒人版,强推)
sudo adduser alice
可以看到执行了这条命令之后,系统将会自动帮我们添加好家目录,并且会提示我们设置新用户的密码,基本信息等,相当于将用户的七个字段就一下子设置好了。
让我们再来cat /etc/passwd文件
我们会惊喜的发现这里自动配置好了用户默认的Shell程序的路径:/bin/bash
还可以直接在alice用户下来使用快捷键,Tab补齐等众多功能,这里每行命令开头显示的也不会仅仅是刚刚jack的$符号。
当然,我们还没有将这个alice用户加入到sudo,所以还不能用sudo命令,下面usermod会讲到
相比于useradd这条命令,adduser命令简直是完美!!!
用户删除deluser
格式:sudo deluser 用户名
比如这里sudo deluser jack
删除jack之后使用id命令来查看jack用户发现用户没了,查看文件/etc/passwd和文件/etc/group,发现里面都没有了jack的信息。但是查看/home,发现jack的家目录竟然还在。
这就相当于用户死了,但是他的家(房子)还在,有趣。这让我想到上面使用useradd的过程也相当于创建用户且配备登录密码,给用户修一个房子(家目录),且家里面要有基础家具设施(skel里面内容),最后就是将房子移交给新用户 。
可以使用sudo rm /home/jack -r将jack的房子也拆掉
usermod修改用户的相关信息
usermod命令用于修改现有用户的属性和设置。通过使用usermod命令,管理员可以修改用户的用户名、用户ID、主目录、默认shell、附加组等属性。
命令格式:usermod [选项] 用户名
其中,用户名指要修改的现有用户的用户名。选项用于指定要进行的修改操作。
选项:
-l : 修改用户的用户名。
-u : 修改用户的用户ID。
-d : 修改用户的主目录(家目录)。
-s : 修改用户的默认shell。-c : 修改用户的备注信息。
-g:修改用户的主要组(默认的组)
-G : 修改用户所属的附加组。
-a : 将用户添加到指定的附加组中。
示例
修改用户的用户名:
usermod -l newusername oldusername
修改用户的用户ID:
usermod -u 1001 username
修改用户的主目录:
usermod -d /home/newdir username
修改用户的默认shell:
usermod -s /bin/bash username
修改用户的备注信息:
usermod -c "New comment" username
修改用户的附加组:
usermod -G group1,group2 username
将用户添加到指定的附加组中:
usermod -aG groupname username
需要注意的是,usermod命令需要使用root用户或具有sudo权限的用户来执行。
如果某个用户(假设为jack没有sudo权限,但是也想要使用这些命令,需要先在root用户中,或者在有sudo权限的用户中为jack使用usermod命令,来添加jack的附加组。(添加是-aG,修改是-G,两者不一样)
sudo usermod -aG sudo jack
用户组创建,删除
addgroup 用户组名
delgroup 用户组名
用户加入用户组的直观作用感受
上面我们说过:当用户属于某个组时,可以有对该组中其他用户拥有的文件和目录的组权限,而不需要单独对这些文件设置复杂的权限。
现在来直观感受一下,首先在
查看文件权限控制信息
认知文件权限信息
详细解析文件权限信息
rwx含义
对于文件和文件夹来说,rwx权限有着不太相同的含义
这里的权限的是一个用户对于这个文件或者文件夹的权限。
比如在当前linux用户下,可以访问某个文件的内容,我们就说当前linux用户对于这个文件有r权限
对于下面的第一个文件,假设我们当前登录的用户为linux用户,那么我们想看到linux用户对于这个文件的权限,看的是权限信息的后三位,因为linux用户不是root用户,也不是root用户组,可以看到linux用户对于这个文件权限为r--,只能读
修改权限控制--chmod(改文件/文件夹权限)
这里不加选项-R的时候更改的权限仅仅针对于文件夹的本身,不对文件夹中的内容进行权限更改。
当我们修改了文件或文件夹得权限,我们可以发现ls命令查看时,他们的名字都变色了
同时我们也发现这样修改权限太麻烦了,下面介绍简化的操作
使用数字来修改权限
修改文件/文件夹所属用户与用户组--chown
普通用户无法使用chown命令
普通用户无法使用chown命令
普通用户无法使用chown命令
示例
1. chown root hello.txt //将文件hello.txt的所属用户修改为root。
2. chown root:hello.txt //将文件hello.txt的所属用户组修改为root。
3. chown root:itheima hello.txt //将文件hello.txt的所属用户修改为root,用户组修改为itheima。
4. chown -R root test //将文件夹test及其所有内容的所属用户修改为root,并对文件夹内的全部内容应用同样的规则。
示例中向我们展示了可以单独修改用户或者用户组,也可以两个都修改
这里chown命令中同样是如果对文件夹中包含的所有文件进行统一修改的时候,需要加上选项-R(大写),和上面的chmod命令一样,同时我发现在cv和rm命令中对文件夹进行操作的时候要加上-r选项(小写)。