文章目录
用户和用户组的概念
Linux是一个多用户系统
,要使用系统资源就必须在系统内拥有合法的用户账号, Linux系统可以存在多个用户
,但是需要使用唯一的用户名来区分
不同的用户,同时所有非系统用户(root用户)
都需要设置密码才可以登录到系统。
就是同一个Linux系统里面可以有多个账号,每个账号对应一个文件(里面存放着这个账号的所有东西),文件都是账号自己私有的,除了root账户可以进入非root账户,其它的非root账户是无法进入非root账户的,非root账户进入root账户需要密码。
Linux系统只能使用数字来记录用户,在实现上,Linux系统采用一个32位的整数来记录用户,这意味着在一套 Linux系统中最多可以记录40亿个不同的用户,这个用来区分不同用户的数字被称为 user id
,简称UID。
在 Linux系统中,有三类用户,分别是根用户
,普通用户
,系统用户
:
- 根用户又叫root:它的UID为0,也是系统中的超级用户,拥有至高无上的权限,可以进入其他的所有
普通用户
,并且不需要密码
。 - 普通用户是:Linux的真实用户(有root用户分配),这类用户可以通过用户名和密码登录到Linux系统中,通常普通用户的UID大于500
- 系统用户:系统运行时的一些特殊用户,这类用户往往不能登录到系统中,但是一些进程需要使用这类用户运行。
Linux系统中还存在用户组
,顾名思义,用户组就是来对用户进行分组的,用户组也是用数字来区分的,即 Group ID
,简称为GID。
UID和GID之间存在某些关系,比如 Centos系统在创建用户时,系统会在创建这个用户的同时,创建一个同名的用户组,这个用户组也会得到一个唯一的GID,并且默认情况下UID的值等于GID,创建出来的这个用户默认属于这个用户组。
注意:用户组除了在创建用户时被创建,也可以独立创建出来,如果之前创建了用户组,创建用户的时候可以直接指定所属的用户组,这样用户组就不会随着用户的创建而创建了
举个例子吧:以学校为例最为合适
在学校里(Linux系统),每个学生(普通用户)都会被分配到一个学号(UID),这个学号一定是唯一的,每个学生都属于一个班级(用户组),在学校班级的名字也是唯一的,如果这个班级就你一个学生(UID)这个时候这个班级的名字用你的学号都可以,一般情况下是不会这样的,所以先有班级(用户组)在按计划招收学生(普通用户),学校的校长(root用户)对每个学生负责(root用户可以操作普通用户),学生之间一般没有负责一说(普通用户不能互相访问),
此例子只是一种类比
。
用户和用户组
在Linux中,用户帐号,用户密码,用户组信息和用户组密码均是存放在不同的配置文件中。
在Linux系统中,所创建的用户帐号和其相关信息(密码除外
)均是存放在/etc/passwd
配置文件中,由于所有用户对passwd文件均有读取的权限
,因此密码信息
并未保存在该文件中,而是保存在了/etc/shadow
配置文件中,这个配置文件只有root用户有权限,其他用户读的权限都没有
。
-
下图为passwd部分截图:
-
在passwd文件中,一行定义一个用户帐号,每行均由多个不同的字段构成,各字段值间用
:
分隔,每个字段均代表该帐号信息,在刚安装完成的Linux系统中,passwd配置文件已有很多帐号信息了,这些帐号是由系统自动创建的,他们是Linux进程或部分服务程序正常工作所需要使用的账户,这些账户的最后一个字段的值一般为/sbin/nologin
,表示该帐号不能用来登录Linux系统,也就是所谓的系统账户
。 -
在passwd配置文件中,从左至右各字段的对应关系及其含义:
用户帐号 | 用户密码 | 用户ID | 用户组ID | 用户名全称 | 用户主目录 | 用户所使用的shell |
---|---|---|---|---|---|---|
aismall01 | x | 1000 | 1000 | aismall01 | /home.aismall01 | /bin/bash |
由于passwd不再保存密码信息,所以用x占位代表
。
- 若要使某个用户账户不能登录Linux系统,只需设置该用户所使用的shell为
/sbin/nologin
即可。
比如,对于FTP 账户,一般只允许登录和访问FTP服务器,不允许登录Linux操作系统。
若要让某用户没有telnet权限,即不允许该用户利用telnet远程登录和访问Linux操作系统,则设置该用户所使用的shell为/bin/true即可。
若要让用户没有telnet和ftp登录权限,则可设置该用户的 shell为/bin/false。
在/etc/shells文件中,若没有/bin/true或/bin/false,则需要手动添加
注意:只有root用户才有权限修改这个文件
查看用户和用户组
先说一个下如何查看用户和用户组,这样方便后面的演示:
cat /etc/passwd
:查看所有用户的列表
w
:查看当前活跃的用户列表
cat /etc/group
:查看所有用户组
groups
:查看当前登录用户
whoami
:查看当前登录用户名
groups 用户名
:查看用户所属的组
创建用户组:groupadd
用户和用户组属于多对多关系,一个用户可以同时属于多个用户组,一个用户组可以包含多个不同的用户
注意:该命令只能在root账户下使用
语法:groupadd [参数选项] 用户组名称
- 若命令带有
-r
参数,则创建系统用户组,该类用户组的GID值小于500 - 若没有
-r
参数,则创建普通用户组,其GID值大于或等于500.
举例:添加一个名字为AISMALL的组
groupadd AISMALL
修改用户组属性:groupmod
用户组创建后,根据需要可对用户组的相关属性进行修改,对用户组属性的修改,主要是修改用户组的名称和用户组的GID值。
注意:该命令只能在root账户下使用
举例1:改变用户组的名称,可使用带-n
参数
groupmod -n 新用户组名 原用户组名
groupmod -n AISMALL01 AISMALL
注意:
对于用户组改名,不会改变其GID的值
举例2:重设用户组的GID,但不能与已有用户组的GID值重复,可以使用-g
参数
groupmod -g 新GID 用户组名称
groupmod -g 1120 AISMALL
注意:对GID进行修改,不会改变用户名的名称
删除用户组:groupdel
删除用户组时,被删除的用户组不能是某个账户的私有用户组,否则将无法删除,若要删除,则应先删除引用该私有用户组的账户,然后再删除用户组。
注意:该命令只能在root账户下使用
举例:删除AISMALL用户组
groupdel 用户组名
groupdel AISMALL
添加用户:useradd
命令语法:
-
useradd [option] username
-
该命令的option选项较多,下面在详细介绍一下:
-d
:主目录 ,指定用来取代默认的的主目录,例如:/home/aismall01-m
:若主目录不存在,则创建它,-r与-m相结合,可为系统账户创建主目录-M
:不创建主目录-e
:指定账户过期的日期,日期格式为MM/DD/YY-f
: 帐号过期几日后永久停权,若指定为-,则立即被停权,若为-1
,则关闭此功能-g
: 指定将用户加入到哪个用户组,该用户组必须存在-G
:用户组列表,指定用户同时加入的用户组列表,各组用逗分隔-n
:不为用户创建私有用户组-s
:指定用户登录时使用的shell,默认为/bin/bash
-r
:创建一个用户ID小于500的系统账户,默认不创建对应的主目录- -u :
手动指定新用户的ID值,该值必须唯一,且大于499
- -p :为新建用户指定登录密码
举例:创建一个名为aismall02的用户,并作为AISMALL用户组的成员
useradd -g aismall02 AISMALL
注意:添加用户时,若未用-g参数指定用户组,则系统默认会自动创建一个与用户帐号同名的私有用户组,若不需要创建该私有用户组,则可选用-n参数。
举例:添加一个名为aismall03的账户,但不指定用户组
useradd aismall03
系统自动创建了名为aismall02的用户组,可以在/etc/passwd中查看
创建用户账户时,系统会自动创建该用户对应的主目录,该目录默认放在
/home
目录下,若要改变位置,可以利用-d
参数指定,对于用户登录时使用的shell,默认为/bin/bash,一般不做更改
举例:我们一般创建用户的格式为,指定创建用户的用户名,目录,密码
useradd aismall04 -d /aismall04 -p 123456
不同普通用户无法相互访问
我们先常见三个用户(注意:在root账户下创建):
useradd test01 -d /test01 -p 123456
useradd test02 -d /test02 -p 123456
useradd test03 -d /test03 -p 123456
这就是权限,看到了吗,root管理员多么的优秀,难道普通用户就不能通过努力也变得优秀吗,答案是否可以,继续向下看看。
修改用户属性:usermod
对于已创建好的用户,可使用usermod命令来修改和设置账户的各项属性,包括登录名,主目录,用户组,登录shell等。
语法:
usermod [option] username
举例1:更改帐户名,使用-l
参数
usermod -l 新用户名 原用户名
usermod -l aismall02 aismall01
若也要更改为/home/aismall02,则可通过执行以下命令来实现:
usermod -l aismall02 aismall01 -d /home/aismall02
举例2:锁定账户,若要临时禁止用户登录,可将该用户账户锁定。锁定账户可利用-L
参数
usermod -L 要锁定的账户
注意:Linux锁定用户,是通过在密码文件shadow的密码字段前加“!”来标识该用户被锁定。
举例3:解锁账户,要解锁账户,可以使用-U
参数
usermod -U 要解锁的账户
删除账户:userdel
语法:
userdel [-r] 帐户名
-
-r
:若带上该参数,则在删除该账户的同时,一并删除该账户对应的主目录。 -
若要设置所有用户账户密码过期的时间,则可通过修改
/etc/login.defs
配置文件中的PASS_MAX_DAYS
配置 项的值来实现,其默认值为99999,代表用户账户密码永不过期,其中PASS_MIN_LEN配置项用于指定账户密码的最小长度,默认为5个字符。
设置用户登录密码:passwd
使用passwd命令来设置,其命令用法为:
passwd [帐户名]
- 若指定了帐户名称,则设置指定账户的登录密码,原密码自动被覆盖,
只有root用户才有权设置指定账户的密码
,一般用户只能设置或修改自己账户的密码(不带参数
)。
锁定/解锁账户密码
在Linux中,除了用户账户可被锁定外,账户密码也可被锁定,任何一方被锁定后,都将无法登录系统,只有root用户才有权执行该命令
,锁定账户密码使用带-l
参数的passwd命令,其用法为:
passwd -l 帐户名
passwd -u 帐户名
#解锁账户密码
查询密码状态
要查询当前账户的密码是否被锁定,可以使用带-S
参数,其用法为:
passwd -S 账户名
删除账户密码
如要删除账户的密码,使用带-d
参数的passwd命令来实现,该命令也只有root用户才有权执行,其用法为:
passwd -d 帐户名
注意: 帐户密码被删除后,将不能登录系统,除非重新设置密码。
添加用户到指定的组/从指定的组中移除用户:gpasswd
可以将用户添加到指定的组,使其成为该组的成员,其实现命令为:
gpasswd -a 用户账户 用户组名
若要从用户组中移除某用户,其实现命令为:
gpasswd -d 用户账户 用户组名
设置用户组管理员
添加用户到组和从组中移除某用户,除了root用户可以执行该操作外,用户组管理员也可以执行该操作。
要将某用户指派为某个用户组
的管理员,可使用以下命令来实现;
gpasswd -A 用户账户 要管理的用户组
-
命令功能:将指定的用户设置为指定用户组的用户管理员,用户管理员只能对
授权的用户组
进行用户管理(添加用户到组或从组中删除用户),无权对其他用户组
进行管理。 -
另外, id命令用于显示当前用户的
uid
,gid
和所属的用户组的列表