一、用户及用户组的基本概述
基本概念:
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户:
登录Linux系统需要以用户的身份进行登录,登陆后会通过该用户的权限来确定该用户在系统中能做些什么。
在Linux系统中,用户(User)是指与系统交互的个体或实体,每个用户都有自己的用户名(Username)和用户ID(User ID),用于标识其在系统中的身份。用户可以登录系统并执行各种操作,例如运行程序、访问文件等。
用户在Linux系统里也是区分角色的,由于角色的不同,权限划分和操作也是不同的。
用户账号类型:
1.root超级管理员用户:
在系统里默认超级管理员为root用户,该用户的UID和GID都是0,是Linux中的"国王",该用户拥有最大的权限,无所不能。可以负责管理下面的普通用户。
2.普通用户:
普通用户是由root创建,该用户可以自由登录,拥有属于自己的家目录;该用户的权限由超级管理员用户来分配。在 centos 7中 ,普通用户的UID范围为1000-60000。
3.程序用户:
该用户为电脑用户,不是给人用的。该用户仅用于为运行服务的,不可以登录系统,无家目录。系统用户的UID在Centers7中是1-999;
centos7 | |
---|---|
超级管理员 | 0 |
普通用户 | 1000-60000 |
程序用户 | 1-999 |
用户组:
用户组(group)是把相同功能特性的用户集合起来
用户组(User Group)是将用户组织起来的一种方式,它可以包含一个或多个用户。用户组有一个组名(Group Name)和一个组ID(Group ID),用于标识组在系统中的身份。用户组可以帮助管理和控制文件和目录的访问权限,通过将多个用户放置在同一用户组中,可以方便地对这些用户进行统一的权限管理。
组账号类型:
基本组(私有组):
- 创建用户账号时,如果没有指定用户所属的组,系统会建立一个和用户名相同的组,这个组就是基本组,默认只容纳一个用户。
- 在用户所属组中的第一个组称为基本组,基本组在/etc/passwd 文件中指定。
- 基本组只能是唯一的。
附加组:
在用户所属组中,除了第一个组(基本组)以外的其他组就是附加组,附加组在/etc/group文件中指定。基本组只能有一个,而附加组可以有一个或者多个。
二、用户账号管理
管理用户账号主要是用户账号的新增、删除、更改等工作。
1.用户账号文件位置
文件位置:/etc/passwd(虽然此处为密码单词,但实际上还是账号文件位置)
用途: 存放保存用户名称、宿主目录、登录 Shell 等基本信息,其内每行对应一个用户的账号记录
js
[root@localhost ~]# cat /etc/passwd //查看passwd内容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
每行字段含义: [root:x:0:0:root:/root:/bin/bash]
每行内用":"作为分隔符进行分割,共分割为七段,以第一段为例。
root | 用户名字 |
---|---|
x | 密码占位符 |
0 | uid(属主) |
0 | gid(属组) |
root | 备注信息 |
/root | 家目录位置 |
/bn/bash | 登陆时默认的shell类型 |
可以使用"man 5 passwd" 可以查询该文件的信息
2.用户密码文件
文件位置:/etc/shadow
用途:存储用户的密码信息,又称为"影子文件" 。/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。
同样该文件内容每行对应一个用户的密码信息
查看文件内容:
js
[root@localhost ~]# cat /etc/shadow //以管理员身份查看用户密码信息
root:$6$YDYBjyE0JNrS/OuY$2zatWfmoJqSiE1aThG7BDdOt72Ntc9HDx0PnmXUTuGro1LouJA1zepTTftUypaheSSF8xEdqxREkOe880oskg.::0:99999:7:::
bin:*:17110:0:99999:7:::
同样/etc/shadow文件也是以冒号":"作为分隔符,将每行分成了9段,以root为例,含义如下:
-
第一段:为用户名
-
第二段:为加密密码,当此段为!或者*时表示用户不可登录到该系统中,如果为空的话说明登录无需密码。
-
第三段:为上次修改密码时间和最后一次修改密码时间。时间以Linux元年开始计算。
-
第四段:最小修改密码间隔天数,即两次修改口令之间所需的最小天数。若不设置,默认为0,表示当天即可修改。 空字段或 0 都表示当天即可修改。
-
第五段:密码有效期,通常为99999表示永久有效的
-
第六段:警告时间。表示从系统开始警告用户到用户密码正式失效之间的天数。空字段或者 0 表示没有密码警告期。
-
第七段:密码过期后的宽限天数。
-
第八段:账户失效时间。从1970/1/1日起,到用户被禁用的天数。默认为空。账户过期不同于密码过期。账户过期后,用户将不被允许登录。密码过期后,用户将不被允许使用此密码登录。
-
第九段:保留字段。此字段保留作将来使用。
三、用户账号管理命令
3.1添加用户账号 useradd
命令格式:useradd [选项] 用户名
- 新建一个用户,并且修改新建目录属性。
- 自动建立一个同名的基本组。
- 在/home下建立一个同名的家目录。
js
[root@localhost ~]# useradd zhutou //创建一个名为zhutou的用户
[root@localhost ~]# cat /etc/passwd | grep zhutou //查看passwd中有关猪头的行
zhutou:x:1001:1001::/home/zhutou:/bin/bash
[root@localhost ~]# tail -1 /etc/passwd //查看passwd的最后一行,(显示同上)
zhutou:x:1001:1001::/home/zhutou:/bin/bash
[root@localhost ~]# tail -1 /etc/shadow //查看shadow最后一行,查看该用户密码信息
zhutou:!!:19818:0:99999:7:::
选项
选项 | 功能说明 |
---|---|
-u | 指定用户的 UID 号,要求该 UID 号码未被其他用户使用 |
-d | 指定用户的宿主目录位置(当与-M 一起使用时,不生效)无需提前创建目录但必须使用绝对路径 |
-e | 指定用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。 |
-g | 指定用户的基本组名(或使用 GID 号) |
-G | 指定用户的附加组名(或使用 GID 号) |
-M | 不建立宿主目录,即使/etc/login.defs 系统配置中已设定要建立宿主目录 |
-s | 指定用户的登录 Shell /sbin/nologin(该shell为不可登录范围) |
演示:
1.-u指定用户的UID
ruby
[root@localhost ~]# useradd -u 2500 haha //建立一个名为haha的用户并且指定UID号为2500
[root@localhost ~]# tail -1 /etc/passwd //查看passwd最后一行关于haha的信息
haha:x:2500:2500::/home/haha:/bin/bash
2.-d 指定用户的宿主目录
ruby
[root@localhost ~]# useradd -d /home/haha haha //创建一个haha的用户并指定家目录在/home/haha下
[root@localhost ~]# tail -1 /etc/passwd
haha:x:1002:1002::/home/haha:/bin/bash
3.-e 指定用户的账户失效时间
csharp
[root@localhost ~]# useradd -e 2024-4-6 haha //创建一个名为haha的用户并指定失效时间为2024年4月6日。
[root@localhost ~]# tail -1 /etc/shadow
haha:!!:19818:0:99999:7::19819: //查看shadow文件,19173表示距离1970年1月1日的19819天
4.-g 指定用户基本组
scss
[root@localhost ~]# useradd -g root haha //创建用户并指定用户基本组为root组
[root@localhost ~]# id haha //查看用户信息,基本组为root组
uid=1002(haha) gid=0(root) 组=0(root)
5.-G 指定用户附加组
scss
[root@localhost ~]# useradd -G zhutou haha //创建用户并指定用户基附加组为zhutou组
[root@localhost ~]# id haha //查看用户信息,附加组为zhutou组
uid=1002(haha) gid=1002(haha) 组=1002(haha),1001(zhutou)
6.-M 不建立家目录
csharp
[root@localhost ~]# userdel -r haha //创建用户且不建立家目录
[root@localhost ~]# useradd -M haha
[root@localhost ~]# ls /home //查看家目录发现没有haha
zhu zhutou
7.-s 指定用户的登录shell(一般用于程序用户)
ruby
[root@localhost ~]# useradd -s /sbin/nologin haha //创建用户并指定登录shell为/sbin/nologin,该用户无法登录系统
[root@localhost ~]# tail -1 /etc/passwd
haha:x:1002:1002::/home/haha:/sbin/nologin
3.2更改或设置用户的密码 passwd
命令格式:passwd [选项] [用户名]
注意:
- 普通用户只能执行单独的passwd修改自己的用户密码,不可以修改别人的用户密码。
- 而root用户有着最高权限,可以管理指定用户名作为参数,对指定账号的密码进行管理。不指定用户名时,修改当前账号的密码。
选项
选项 | 功能说明 |
---|---|
-d | 清空指定用户的密码,仅使用用户名即可登录系统(不安全不建议使用) |
-l | 锁定用户密码,锁定的用户账号将无法再登录系统。(一定要事先设好密码才能锁定) |
-u | 解锁用户密码 |
-S | 查看用户账户的状态是否被锁定 |
免交互更改用户密码:echo "123456" | passwd -haha --stdin 可快速设置用户密码。
演示:
1.设置或修改用户密码
arduino
[root@localhost ~]# passwd haha //更改haha用户的密码
更改用户 haha 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# echo "1596012265a" |passwd --stdin haha //更快捷的更改密码。
更改用户 haha 的密码 。
passwd:所有的身份验证令牌已经成功更新。
2.-d 清除用户密码,使用用户名可直接登录
arduino
[root@localhost ~]# passwd -d haha //清空haha用户名的密码
清除用户的密码 haha。
passwd: 操作成功
3.锁定和解锁用户
arduino
[root@localhost ~]# passwd -l haha //锁定用户密码,锁定后用户无法登陆
锁定用户 haha 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -u haha //解锁用户
解锁用户 haha 的密码。
passwd: 操作成功
[root@localhost ~]# passwd -S haha //查看haha用户状态,以为解锁
haha PS 2024-04-05 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
3.3 修改用户账号的属性 usermod
命令格式:usermod [选项] 用户名
该命令选项与useradd命令中的含义大多相同
选项 | 功能 |
---|---|
-l | 更改用户账号的登录名称。格式:usermod -l 新名称 旧名称 (仅对已有用户) |
-L | 锁定用户账户 |
-U(大) | 解锁用户账户 |
-u(小) | 修改用户的UID号 |
-d | 修改用户的宿主目录位置 |
-e | 修改用户的账户失效时间,可使用YYYY--MM-DD的日期格式 |
-g | 修改用户的基本组名(或使用GID号) |
-G | 修改用户的附加组名(或使用GID号) |
-s | 指定用户的登录Shell |
演示:
scss
[root@localhost ~]# usermod -l bao zhu //把zhu用户的旧名改成bao新用户名
[root@localhost ~]# usermod -L bao //锁定用户bao
[root@localhost ~]# passwd -S bao //查看用户名bao的状态,发现已经被锁定了
bao LK 1969-12-31 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U bao //解锁用户bao
[root@localhost ~]# passwd -S bao //查看bao状态,发现已经恢复
bao PS 1969-12-31 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
3.4删除用户 userdel
命令格式: userdel [选项] 用户名
userdel [-r] 用户名 //加-r可以删除宿主目录
less
root@localhost ~]# ls /home //查看home目录内有哪些用户
haha hehe zhu zhutou
[root@localhost ~]# useradd all
[root@localhost ~]# ls /home
all haha hehe zhu zhutou
[root@localhost ~]# userdel -r all //删除指定用户all及家目录(加-r可连同家目录一起删除)
[root@localhost ~]# ls /home //查看/home下的all用户及家目录是否存在,查看已经删除
haha hehe zhu zhutou
3.5用户账号的初始配置文件
文件位置:/etc/skel/
主要用途:
新建用户时,用户初始家目录文件都来源于/etc/skel/文件夹下。包括家目录的路径、shell类型,用户宿主目录下的初始配置文件只对当前用户有效。
主要的用户初始配置文件:
- ~/.bash_profile : 这个文件是为系统全局变量配置文件,可以通过重启系统或者执行 "source /etc/profile" 命令使profile文件被读取。(开机启动前进行操作)
- ~/.bashrc: 这个文件实际上是/etc/profile的子目录,存放的是一些应用程序所需的启动脚本。(开机启动前进行操作)
- ~/.bash_logout: 每一个允许bash shell 的用户都会执行此文件。可通过执行bash命令打开一个新的bash,使bashrc文件被读取。(关机时进行操作)
备注:
- 在当前用户家目录里.bashrc设置的改变只对当前用户有效,当需要影响所有用户的话需要在/etc/profile/写入配置文件。
- 修改/etc/profile文件中相关配置,切换bash或者用户后都需要source /etc/profile才生效;
- 修改/etc/bashrc文件中相关配置,切换bash或者用户后直接生效。
四、组管理
4.1组账号文件
文件位置:
- /etc/group:保存组账号基本信息。
- /etc/gshadow:保存组账号的密码信息。
group文件每行分成了4段,每个字段含义如下:
- 字段1:组账号名称。
- 字段2:密码占位符x;通常不需要设置组密码。由于安全原因,该密码被记录在/etc/gshadow中,因此显示为'x'。类似/etc/shadow文件。
- 字段3:组编号GID。
- 字段4:本组的成员用户列表 (一般不包括基本组对应的用户帐号),多个成员之间以逗号","分隔 。
演示:
vbnet
[root@localhost ~]# head -5 /etc/group //查看group文件的前五行
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
4.2添加组账号 groupadd
命令格式:groupadd [-g GID] 组账户名
演示:
js
[root@localhost ~]# groupadd -g 2500 zhubao //添加一个名为zhubao的组并指定DIP号为2500
[root@localhost ~]# tail -n1 /etc/group //查看group文件,已添加成功
zhubao:x:2500:
4.3添加删除组成员 gpasswd
命令格式:gpasswd [选项] 组账号名
常用选项:
选项 | 功能说明 |
---|---|
-a | 添加一个用户 |
-d | 从组内删除一个用户 |
-M | 添加多个 |
演示:
1.-a添加单个的用户进指定用户组
arduino
[root@localhost ~]# ls /home //查看当前用户
haha hehe zhu zhutou
[root@localhost ~]# gpasswd -a zhutou zhubao //将zhutou用户加入到zhubao用户组里
正在将用户"zhutou"加入到"zhubao"组中 //加入成功
[root@localhost ~]# tail -n1 /etc/group //查看用group文件,添加成功
zhubao:x:2500:zhutou
2.-d将用户组内删除一个指定用户
arduino
[root@localhost ~]# gpasswd -d zhutou zhubao //删除用户组内指定用户,将zhutou用户从猪宝用户组里删除。
正在将用户"zhutou"从"zhubao"组中删除 //删除成功
[root@localhost ~]# tail -n1 /etc/group //查验group,删除成功
zhubao:x:2500:
3.-M 定义组成员列表,在指定用户组内同时加入多个用户
csharp
[root@localhost ~]# useradd guinv //先新建多个用户
[root@localhost ~]# useradd zhuwo //查看当前home目录下的用户
[root@localhost ~]# ls /home
guinv haha hehe zhu zhutou zhuwo
[root@localhost ~]# gpasswd -M zhuwo,zhutou,guinv zhubao //指定多个用户同时加入zhubao组
[root@localhost ~]# cat /etc/group| grep zhubao //查看zhubao组里的用户
zhubao:x:2500:zhuwo,zhutou,guinv //添加成功
4.4删除组账号 groupdel
命令格式:groupdel 组账号名
演示:
makefile
[root@localhost ~]# groupadd -g 2510 zhuzhu //先建立一个新的组用户
[root@localhost ~]# tail -n1 /etc/group //验证创建成功
zhuzhu:x:2510:
[root@localhost ~]# groupdel zhuzhu //对刚刚创建的组用户进行删除
[root@localhost ~]# tail -n5 /etc/group //查看group内的zhuzhu组用户是否删除
haha:x:1002:
hehe:x:1003:
zhubao:x:2500:zhuwo,zhutou,guinv
guinv:x:2501:
zhuwo:x:1004:
查询
5.1查询用户账号的详细信息 finger
命令格式:finger 用户名
此命令需要安装后才可使用
演示:
yaml
[root@localhost ~]# finger zhutou //查看当前用户信息
Login: zhutou(登录用户名) Name:
Directory: /home/zhutou (家目录) Shell: /bin/bash(shell类型)
Never logged in. (最后一次登录时间)
No mail.
No Plan.
5.2查询已登录到主机的用户信息
w命令,查询已登录的所有用户信息
sql
[root@localhost ~]# w //查询当前主机已登录过的用户信息
11:19:53 up 1:39, 1 user, load average: 0.00, 0.01, 0.03
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 192.168.83.1 09:40 1.00s 0.09s 0.01s w
文件和目录的权限与归属
访问权限
rwx rw- --x
- r 读取:允许查看文件内容和目录列表
- w 写入:可以修改文件的内容,新建文件(文件夹),删除文件(文件夹),移动文件(文件夹)。
- x 执行:执行是最小的权限也是基础,没有执行,读写无法使用,对于文件可以运行(命令,脚本),颜色是绿色,
归属(所有权):
- 属组:拥有该文件或目录的组账号(文件的拥有组)
- 属主:拥有该文件或目录的用户账号(文件的主人,文件的拥有者,拥有最高权限)
- 其他人:除了上面两种
数字表示法:
读:100------4
写:010------2
执行:001------1
最高权限:111------7
将二进制转化成十进制
修改文件属性权限命令:chmod
chmod命令格式:chmod 【选项】 指明属主,属组,其他人+权限 文件
常用选项:
选项 功能 | |
---|---|
-R | 递归 |
u | 属主 |
g | 属组 |
o | 其他人 |
a | 所有人 |
+ | 加上 |
- | 减去 |
= | 赋予 |
- chmod u+r 文件名(为属主加上读的权限)
- chmod u-r 文件名(为属主减去读的权限)
- chmod u+r 文件名(为属主)
- chmod a+r 文件名(为所有人都加上读的权限)
演示:
csharp
[root@localhost /]# ll zhutou //查看当前该文件的权限
-rw-r--r--. 1 root root 0 4月 7 13:53 zhutou
[root@localhost /]# chmod a+rwx zhutou //给当前文件权限升级为777
[root@localhost /]# ll zhutou
-rwxrwxrwx. 1 root root 0 4月 7 13:53 zhutou
也可写成数字表示法,会较为方便一些
arduino
[root@localhost /]# ll zhutou //查看当前该文件权限
-rw---x--x. 1 root root 0 4月 7 13:53 zhutou
[root@localhost /]# chmod 777 zhutou //给所有人加上最高权限
[root@localhost /]# ll zhutou //查验
-rwxrwxrwx. 1 root root 0 4月 7 13:53 zhutou