写在前面:
用户和用户组管理,顾名思义就是添加用户和用户组、更改密码和设定权限等操作。日常中我们使用个人计算机的时候,这方面的感官可能并不强烈,执行一些操作,更多的是管理员账户,其他普通用户使用极少。但在 Linux系统服务器上用户的划分是很明确的,Linux系统就是通过用户的区分来限定权限,继而约束用户的操作行为,所以学习用户相关的管理命令是 及其实用和必不可少的。
一、Linux系统用户概念篇
1.Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。
2.每个用户都有唯一的用户名和密码。在登录系统时,只有正确输入用户名和密码,才能进入系统和自己的主目录。
3.用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
用户分类:
1.系统用户:为了能够让那些后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户,这类用户从来不用登陆系统。
2.登录用户:就是我们一般使用登录linux的用户。
useradd 【命令新建用户】
语法格式:
useradd [选项] 用户名
参数说明:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
操作示例:
[root@bd15-21-129-82 ~]# useradd csdn #创建一个普通新用户 csdn
提示:创建用户的同时还会创建一个与用户名相同的用户组,在/home 的目录下会创建一个csdn的目录,这个就是csdn用户的家目录
同功能的命令还是有一个 adduser
两个用户创建命令之间的区别
adduser: 会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码。
useradd:需要使用参数选项指定上述基本设置,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本。
userdel 【删除用户】
命令说明:如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
语法格式:
userdel 选项 用户名
常用的选项是 -r,它的作用是把用户的主目录一起删除。
操作示例;
[root@bd15-21-129-82 ~]# userdel csdn #只删除用户
[root@bd15-21-129-82 ~]# userdel -r csdn #删除用户和用户的家目录
usermod 【修改账号】
命令说明:修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
语法格式:
usermod 选项 用户名
参数:
参数说明:
-c<备注> 修改用户帐号的备注文字。
-d登入目录> 修改用户登入时的目录。
-e<有效期限> 修改帐号的有效期限。
-f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。
-g<群组> 修改用户所属的群组。
-G<群组> 修改用户所属的附加群组。
-l<帐号名称> 修改用户帐号名称。
-L 锁定用户密码,使密码无效。
-s<shell> 修改用户登入后所使用的shell。
-u<uid> 修改用户ID。
-U 解除密码锁定。
操作示例:
[root@bd15-21-129-82 ~]# usermod -d /home/hnlinux root #更改登录目录
[root@bd15-21-129-82 ~]# usermod -u 777 root #改变用户的uid
提示:usermod 的作用是修改用户,而useradd 是添加用户,本质上都是对用户的操作,所有参数作用大部分是类似的,只是命令不同,就是添加和修改的区别。
passwd 【修改密码】
命令说明:指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。
语法格式:
passwd 选项 用户名
参数:
-f 强迫用户下次登录时修改口令。
-l 锁定口令,即禁用账号
-d 使账号无口令
-u 口令解锁。
操作示例:修改csdn用户的密码
[csdn@bd15-21-129-82 ~]$ passwd
Changing password for user csdn.
Changing password for csdn.
(current) UNIX password: #输入当前的用户密码
New password: #输入用户的新密码
如果是root 用户,可以修改任意用户的密码:
操作示例:
[root@bd15-21-129-82 ~]# passwd csdn
Changing password for user csdn.
New password: #直接输入用户的新密码
Retype new password: #再次输入用户的新密码
passwd: all authentication tokens updated successfully. #用户密码修改成功
提示:普通用户修改自己的口令时,passwd命令会先询问原密码,验证后再要求用户输入两遍新密码,如果两次输入的密码一致,则将这个密码指定给用户;而超级用户为用户指定密码时,就不需要知道原密码。
为了系统安全起见,用户应该选择比较复杂的密码,例如最好使用8位长的密码,口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。
su 【切换用户】
su命令用于切换当前用户身份到指定用户或者以指定用户的身份执行命令或程序。
普通用户切换到root用户,可以使用su – 或su root,但是必须输入root密码才能完成切换。root用户切换到普通用户,可以使用su username,不需要输入任何密码即可完成切换。
语法格式: su [选项] [用户名]
常用参数:
-c或--command 执行完指定的指令后,即恢复原来的身份
-f或--fast 适用于csh与tsch,使shell不用去读取启动文件
-l或--login 改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname,此外,也会变更PATH变量
-m,-p或--preserve-environment 变更身份时,不要变更环境变量
-s或--shell 指定要执行的shell
--help 显示帮助信息
--version 显示版本信息
操作示例:
[root@bd15-21-129-82 ~]# su csdn #切换到csdn用户,但环境变量仍然是root用户的
[root@bd15-21-129-82 ~]# su - sdn #切换到csdn用户,并改变为csdn用户环境变量
【sudo vs su】
在某些Linux发行版(如Ubuntu)上,出于安全原因,默认情况下 root用户帐户被禁用。这意味着没有为root设置密码,并且您不能使用su切换到root。
更改为root的一个选项是在su命令前加上sudo,然后输入当前登录的用户密码:
sudo su -
sudo命令允许您以默认用户(root)的其他用户身份运行程序。
如果以sudo授予用户评估,则将以root身份调用su命令。运行sudo su -并使用用户密码与使用root密码运行su -相同。
与-i选项一起使用时,sudo在root用户的环境中运行交互式登录Shell:
sudo -i
sudo -i与运行su -基本相同。
与su相比,使用sudo的优势在于无需在多个管理用户帐户之间共享root密码。
此外,通过sudo,您可以允许用户仅以root特权运行特定程序。
二、Linux系统用户组概念
用户组分类:
用户组分类方式有三种:
1.管理员组、普通用户组(系统用户组,登录用户组)
2.用户的基本组、用户附加组
3.私有组、公共组
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新
groupadd 【新增用户组】
语法格式:
groupadd 选项 用户组
参数选项:
-f, --force 如果组已经存在则成功退出并且如果 GID 已经存在则取消 -g
-g, --gid GID 为新组使用 GID
-h, --help 显示帮助信息并推出
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-o, --non-unique 允许创建有重复 GID 的组
-p, --password PASSWORD 为新组使用加密过的密码
-r, --system 创建一个系统组
操作示例:
[root@bd15-21-129-82 ~]# groupadd group1 #增加了一个新组group1
[root@bd15-21-129-82 ~]# groupadd -g 888 g2 #添加一个用户组并指定GID
[root@bd15-21-129-82 ~]# groupadd -r -g 889 g3 #使用 -r 创建系统工作组
说明:groupadd 命令是系统管理员命令,用于创建一个新组。groupadd 命令使用命令行上指定的值以及系统中的默认值创建一个新的组帐户。新组将根据需要被添加到系统文件中。
groupdel【删除用户组】
语法格式:
groupdel 用户组
用法示例:
[root@bd15-21-129-82 ~]# groupdel group2 #删除用户组 group2
说明:groupdel 命令删除群组,其实就是删除 /etc/gourp 文件和 /etc/gshadow 文件中有关目标群组的数据信息。需要从系统上删除群组时,可用groupdel(group delete)指令来完成这项工作。倘若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
三、用户和用户组相关的系统文件
1./etc/passwd文件
/etc/passwd文件是用户管理工作涉及的最重要的一个文件,Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性,这个文件对所有用户是可读的。
[root@10-90-50-73-jhdxyjd ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
/etc/passwd中每一行记录着一个用户的相关信息,每行记录又被冒号(:)分隔为7个字段,其含义如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
用户名:通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(😃,因为冒号在这里是分隔符,为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。
口令:这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux 系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”
用户标识号:一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。
组标识号:对应着/etc/group文件中的一条记录。
注释性描述:比如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux 系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。
主目录:它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。
登录Shell:用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。
尖叫提示:如果你su - 某个用户不可用,但是用户存在,这个时候你就可以将/etc/passwd里面用户的/sbin/nologin/改成/bin/bash即可登录额哦。
2./etc/group文件
/etc/group文件存放着用户组的所有信息,此文件的格式也类似于/etc/passwd文件,由冒号(:)隔开若干个字段,这些字段有:
组名:口令:组标识号:组内用户列表
组名:用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
口令:存放的是用户组加密后的口令字。一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*。
组标识号:和用户标识号类似,也是一个整数,被系统内部用来标识组。
组内用户列表:记录这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
示例文件:
[root@10-90-50-73-jhdxyjd ~]# cat /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon