书接上文,我们聊了Linux的优点以及启动流程,Linux启动完之后我们要做的第一件事就是登陆。登陆需要用户名和密码,我们这篇文章就聊聊Linux的用户体系。
Linux中的用户信息
我们常说,在Linux中万物皆文件,代表用户的文件是/etc/passwd,它里面的内容是这样的:
看起来复杂的文件我们来一点点解释。首先每一行代表一个用户,用户的多个信息之间用:
分隔开。从左至右依次是:用户名:密码:UID:GID:用户信息说明:家目录地址:shell
接下来我们就一一解释。
用户名
用户名当然就是用户的名字,我们在登陆的时候就需要使用的用户名来进行登陆,因为是用来进行作为用户的标识,所以用户名也是唯一的。
密码
我们可以看到所有用户的密码列都是一个X
,这不是巧合,是因为密码作为敏感信息,都以X
代替,而真正的密码存储在/etc/shadow
中,密码的格式同样是以:
分隔开,如下图所示,请品鉴。
从左到右依次是用户名:加密后的密码:最近修改密码距离1970年1月1日的天数:密码不可修改的天数[0表示随意修改]:密码需要重新修改的天数:距离需要修改密码时间提醒的天数:密码过期后的失效日期:账号失效日期:保留字段
这里大家可以发现有的用户密码列是*
或者!!
。当密码列是*
代表着这个用户被锁定,是无法登录的;当密码列是!!
是代表此用户没有设置过密码。
UID
UID(User Identification)这里指的是用户的唯一标识,UID也是唯一的。UID是一个
32位整数,所以理论上Linux可以拥有2^32-1 约 42.9亿个用户。
在Linux中实际上有三类用户:根用户、系统用户、普通用户。而区分三类用户的正是他们的UID。
根用户也就是root用户,他的UID是0,root用户被称为超级用户,他能删除修改系统中的任何文件。如果想让系统拥有多个超级用户,那么就将你想要设置为超级用户的UID设置为0即可。上图中第一行的用户就是root用户。
系统用户是指系统中的应用的用户他的UID范围是[1,999]
,其中[1,200]
是Linux自己创建的账户,[201,999]
是在安装各种软件时创建的用户,比如在使用nginx的时候就需要一个叫nginx的系统用户来启动nginx服务。请品鉴:
最后就是普通用户,普通用户就是我们日常使用的用户,普通用户可以操作自己的家目录、系统临时目录、用户创建的目录以及其他授权给此用户的目录。
GID
提到GID(Group Identification)用户组ID,就不得不提一下用户组,用户组顾名思义,是一些用户的集合,用户组可以让我们很方便管理一组用户的权限,每次创建一个用户就会自动创建一个同名的用户组。
值得一提的是,一个用户可以属于一个或多个用户组,一个用户组也可以拥有一个或多个用户,他们的关系可以像下图一样:
用户信息说明
这里是用来描述用户的信息,例如下图中的nginx用户说明:Nginx web server[Nginx World Wide Service Server]就告诉我们这是一个叫Nginx的全球广域网服务器的用户。
家目录地址
这里记载了用户的家目录所在位置。
Shell
这里标注了用户使用的shell是什么。
用户的管理
在linux中,用来记录用户名、密码最重要的两个文件就是/etc/passwd
和/etc/shadow
。所以对用户的增删改主要是对这两个文件的修改(也有对其他文件的修改,后面会讲)。
增加用户
用户增加使用的命令是useradd 「username」
,比如useradd gyg
就是增加一个名为gyg
的用户。
当我们输入这个命令以后,Linux一般会在/etc/passwd
和/etc/shadow
末尾追加一条记录,同时会分配给该用户一个UID。然后Linux会为这个用户在/home下创建一个以用户名命名的家目录,比如/home/gyg,然后将/etc/skel下所有的文件复制到用户的家目录中,所以如果想在那个新创的用户家目录中增加一些东西,只需要在/etc/skel中添加即可,之后所有被创建的新用户家目录中都会有你新增的文件。
最后linux会创建一个和新创建用户同名的用户组,并将新创建的用户加入其中。
当然这个命令也有很多参数可以用来进行实现更多功能,例如上文提到的指定UID为0等等,想要查看具体有哪些参数可以使用useradd -h
命令。
修改密码
创建用户后,该用户实际上还没有登录系统的权限,因为在不设置密码的情况下,在/etc/shadow
中该用户记录中以冒号分隔的第二列将显示为两个感叹号!!
,这说明不允许该用户登录系统。因此,需要同时设置用户的密码才行,设置命令是passwd 「username」
例如,passwd gyg
,输入这条命令后,再输入两次密码就将密码创建好了。
值得一提的是,如果是想修改密码,只需要输入passwd再依次输入一次旧密码两次新密码即可,而且非root用户只能修改自己的密码,root用户可以修改所有人的密码,修改指定用户密码的命令和创建密码相同,都是passwd 「username」
删除用户
删除用户的命令是userdel 「username」
,只有root可以删除其他用户,普通用户不能实现我杀我自己这种情况。
为了安全考虑,这个命令不会删除用户的根目录,只有使用-r参数才会对用户所有的文件进行删除。
同样userdel -h
可以查看删除用户命令的可用参数。
切换用户
切换用户这个功能最多应用的场景就是在我们需要进行一些root才能进行的功能的时候临时提升自己的权限。
切换用户的命令是su 「username」
,su(switch user),当我们不写任何用户名的时候会默认切换到root用户,此时再输入密码即可切换到root用户。
su命令还可以加一个-
组成一个su - 「username」
,他与su的最大区别就是使用这个命令在切换用户的时候相当于重新使用你要切换到的用户登陆,而su只是相当于临时获得要切换到的用户的权限,而环境变量什么还是用的原用户的。
这里值得一提的是root用户使用su命令切换到其他用户的时候不需要输入密码,这也说明了root在linux上至高无上的地位。
提到su就不得不提sudo ,sudo的作用是使用root用户执行某个命令,比如sudo vim a.txt
的意思就是,使用root用户的身份使用vim打开a.txt这个文件。所以sudo这个命令是一次性的。
其他有关用户的命令
id 「username」
:列出用户UID、GID等信息。如下:chsh 「options」「username」
:修改用户的shell。chsh -h
查看可以使用的参数
结语
本篇文章窥探了一个用户的信息有哪些(用户名、密码、UID、GID、说明、家目录、shell),存储在什么位置(/etc/passwd和/etc/shadow),以什么方式进行存储(冒号分隔)。了解了用户的增删改和切换等一些基本操作。知识常看常新,希望本篇文章可以对你有所帮助。
热爱技术、热爱生活。
以上就是本篇文章的全部内容,如果你觉得文章写得不错,求点赞,求转发。欢迎关注公众号(高压锅码农777)点击右下角联系作者,一起交流学习。
我是乐于分享的锅哥,祝你幸福,我们下期见。