众所周知,登录任何系统都需要一个账号,出于安全性考虑,一般在工作环境中是不会使用超级管理员(root)去登录系统,所以新建用户(账号)去使用是很有必要的。
一.用户账号和组账号概述
1.用户账号
1.1 用户账号的类型
1.2 UID号:用户标识号每个用户都对应一个的身份标记
PS:
- 超级用户账号是最高权限拥有者,uid=0的用户,默认是root,只有当进行系统管理、维护任务时,才建议使用 root 用户登录系统,日常事务处理建议只使用普通用户账号
- 普通用户账号主要是给用户进行交互登录使用,受到系统某一类限制,普通账号需要由root用户或其他管理员用户创建,一般只在用户自己的家目录中拥有完整的权限
- 程序用户的出现主要是出于安全性考虑,即使某个程序被攻破导致了账户密码泄露,但是程序账号不是给人用的,是给程序用的,无法直接登录系统的用户,就可以更好的保证系统的安全性
2.组账号
将多个用户集合起来,统一分配某种相同的权限,这多个用户的集合,就是组。linux系统中的用户组(group)就是具有相同特性的用户(user)集合。将用户分组是linux系统中对用户进行管理及控制访问权限的一种手段,可以节约时间简化一个一个去给用户账号分配权限的过程。
linux系统中用户组共两种,基本组(私有组) 和附加组(公共组)
- 基本组(私有组) :
基本组:有且唯一(通过id命令查看,账号名后第一个就是基本组);系统默认新建用户时自动添加同名的组
/etc/passwd
文件中指定- 附加组(公共组) :
/etc/group
文件中指定使用id 用户名
查看用户uid,基本组和附加组:
[root@test1 ~]# id lisi
uid=1004(lisi) gid=1004(lisi) 组=1004(lisi),1005(kfc)
#用户lisi uid=1004 #(基本组或私有)lisi=1004(系统默认新建用户时自动添加同名的组) #1005(kfc)为附加组或公共组(可有没有或者多个)
PS:用户和组之间是存在包含关系的。组中包含用户,用户一定要有一个主要组,并且主要组有且唯一,附加组可有可无,有且可以有多个,没有也没关系,须知系统会在你创建一个新用户时自动创建一个与用户同名的主要组(这是一种默认操作)
3.ID
3.1 UID(User IDentity)
UID(User IDentity,用户标识号):
Linux 操作系统中的每一个用户账号都有一个数字形式的身份标记,称为 UID(UserIDentity,用户标识号),对于操作系统核心来说,UID 是区分用户的基本依据,原则上每个用户的 UID 号应该是唯一的。root 用户账号的 UID 号为固定值 0,而程序用户账号的 UID号默认为1~499,普通用户使用的UID号默认500~60000
需注意:
centos6 500~60000
centos7登录用户是从1000起到60000
1-999 预留给系统,叫系统用户,某个程序比如数据库
人使用的账户UID号是从1000开始
3.2 GID
GID(Group IDentify,组标识号):与 UID 类似,每一个组账号也有一个数字形式的身份标记,称为 GID(Group IDentity,组标识号)。root 组账号的 GID 号为固定值 0,而程序组账号的 GID 号默认为 1~499,500~60000 的 GID 号默认分配给普通组使用。
4.用户账号管理
在了解用户账号如何管理之前我们需要知道两个文件与用户账号信息息息相关,下面是两个文件的位置
/etc/passwd
用户账号文件:
存放(保存)用户的用户名称,宿主目录(家目录),登录shell等基本信息
示例:
PS:可以通过man 5 passwd
命令,查看/etc/passwd
文件的说明和各字段含义
/etc/shadow
用户口令(密码)文件(影子文件 ) :
存储用户的密码,账号有效期等信息(只有超级管理员用户拥有读权限,其他用户无任何权限)
示例:
[root@localhost ~]# head -1 /etc/shadow
root:$6$s.rTN9IazOLldMYx$rGLq9CP/vW5MzIG44NmRH1ZDP1Gw0PKUISpTG.mBUw6Z8BWBu7wCp4813ycadrPXavjp..FMnA5wtalzKiy9D/::0:99999:7:::
#:以`:`做为分隔符(与etc/psswd文件一样)
#第一段`root`:用户名
#第二段'$6$s.rTN9IazOLldMYx$rGLq9CP/vW5MzIG44NmRH1ZDP1Gw0PKUISpTG.mBUw6Z8BWBu7wCp4813ycadrPXavjp..FMnA5wtalzKiy9D/':密码字段(shadow中会对密码进行加密)
#第三段:最后一次修改密码时间(这里我没有修改过密码,所以是空的)
#第四段`0`:修改密码最小天数(0 表示不限制)
#第五段`99999`:密码有效期
#第六段`7`:提前七天提醒(密码到期提醒)
#第七段:密码过期后的宽限天数 (这里我的密码有效期是273年,基本不会过期,所以这里也是空的)
#第八段:账号失效时间(这里为空,因为我是超级管理员账号,永久有效)
#第九段:保留字段(该字段保留作将来使用)
4.1 useradd 添加账号
格式:useradd
[选项]
用户名
需了解该命令
/etc/group
和/etc/shadow
文件中。选项 | 作用 |
---|---|
-u | 指定用户的 UID号,要求该UID号码末被其他用户使用 |
-d | 指定用户的宿主目录位置(当与-M一起使用时,不生效) |
-e | 指定用户的账户失效时间,可使用YYYY-MM-DD(年月日)的日期格式 |
-M | 不建立宿主目录,即使/etogin.d.fis系统配置中已设定要建立宿主目录。 |
-s(小写S) | 指定用户的登录Shell(即shell类型)PS:/sbin/nologin 的shell类型是禁止用户登陆系统 |
-g | 指定用户的基本组名(或使用 GID 号) |
-G | 指定用户的附加组名(或使用 GID 号) |
4.2 passwd 密码管理
psswd命令主要是为账号设置密码
格式:passwd
[选项]
用户名
PS:选项可以不加,直接指定用户名可以添加(修改)密码
举例:
[root@test1 /]# passwd zhangsan
#修改用户zhangsan的密码输入两次密码
更改用户 zhangsan 的密码
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
选项 | 作用 |
---|---|
-d | 清空指定用户的密码,仅使用用户名即可登录系统 |
-l(小写L) | 锁定用户账户(与usermod -L(大写L)作用相同) |
-S(大写S) | 查看用户账户的状态(是否被锁定) |
-u | 解锁用户账户 |
补充修改密码免交互的一种方式(不过是明文密码的形式,不建议使用)
[root@test1 dnf]# echo "123123"|passwd --stdin lisi
#免于交互
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
4.3 usermod 修改用户账号的属性
格式:usermod
[选项]
用户名
选项 | 作用 |
---|---|
-l | 更改用户账号的登录名称(Login Name) |
-L(大写L) | 锁定用户账户(与passwd -l(小写L) 作用相同) |
-u | 修改用户的 UID 号 |
-U | 解锁锁用户账户 |
-d | 修改用户的宿主目录位置(注意修改宿主目录位置需要自己去mv 指定目录位置,usermod -d 只是更新信息) |
-e | 修改用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。 |
-g | 修改用户的基本组名(或使用 GID 号) |
-G | 修改用户的附加组名(或使用 GID 号) |
-s(小写S) | 指定用户的登录 Shell(即shell类型) |
4.4 userdel 删除用户
格式:userdel
[选项]
用户
选项 | 作用 |
---|---|
-r | 将家目录一起删除 |
5. 用户账号的初始配置文件
文件来源:
新建用户账号时,从/etc/skel
目录中复制而来
家目录中用户默认的配置信息在etc/default/useradd
用户宿主目录下的初始配置文件只对当前用户有效。
主要的用户初始配置文件(从/etc/skel
目录中复制而来):
~/.bash_profile
: 这个文件是为系统全局变量配置文件,可以通过重启系统或者执行source /etc/profile
“命令使profile
文件被读取~/.bashrc
: 与~/.bash_profile
互为备份,存放的是一些应用程序所需的启动脚本(即开机启动的一些命令)。~/.bash_logout
: 此文件中的命令将在该用户每次退出时bash shell时使用(即关机时启动的命令)
PS:
-
/etc/profile
中的修改是对当前用户生效- 修改
/etc/profile
文件中相关配置,切换bash或者用户后都需要source /etc/profile
才生效;
- 修改
-
/etc/bashrc
中的修改是全局生效的- 修改
/etc/bashrc
文件中相关配置后,切换bash或者用户后无需刷新,
- 修改
6.组管理
组账号与用户账号类似,也有两个文件与之相关
/etc/group
:保存组账号的基本信息
/etc/gshadow
:保存组账号的密码信息(但基本不使用)
6.1 groupadd 添加组
格式:groupadd
-g GID
组账号名
groupadd
后直接加自定义名,是添加自定义名的组账号
选项[-g]
是指定组id(GID)
6.2 gpasswd 添加、设置、删除组成员
格式:gpasswd
[选项]
用户名
选项:
- -a:向组内添加一个用户
- -d:从组内删除一个用户成员
- -M:定义组成员列表,以逗号分隔
6.3 groupmod 修改组账号的属性
格式:groupmod
[选项]
组名
选项:
- -g:修改用户的编号(GID)
- -n:修改用户的名称
6.4groupdel 删除组账号
格式:groupdel
组账号名
7.查询
7.1 id 查询用户账号的详细信息
格式:id
用户名
7.2 finger 查询用户账号的详细信息(需安装才能使用)
格式:finger
用户名
7.3 w(小写)、who、users查询已登录主机的用户信息
- w
格式:w
[选项]
用户名
选项 | 作用 |
---|---|
-h | 不显示输出信息的标题 |
-l(小写L) | 用长格式输出 |
-s(小写S) | 用短格式输出,不显示登陆时间,JCPU 和 PCPU 时间 |
-V(大写V) | 显示版本信息 |
w后什么都不跟就是显示当前全部信息
[root@test1 Packages]# w
11:20:58 up 2:05, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.100.99 09:16 2.00s 0.74s 0.02s w
#上述各标题含义
#USER:登录到系统的用户
#TTY:登录终端
#FROM:表示用户从哪里登陆进来,一般显示远程登陆主机的 IP 地址或者主机名
#LOGIN@:用户登录的日期和时间
#IDLE:表示某个程序上次从终端开始执行到现在所持续时间
#ICPU:和该终端连接的所有进程占用的 CPU 运算时间。这个时间里并不包括过去的后台作业时间,但是包括当前正在运行的后台作业所占用的时间。
#PCPU:当前进程所占用的CPU运算时间
#WHAT:当前用户正在执行的进程名称和选项(即到用户当前正在执行什么命令)
- who
观察上图,与w命令相比,who命令只能显示当前登录的用户信息,但无法知晓每个用户正在执行的命令信息
格式:who
[选项]
[file]
PS:who命令是默认从/var/run/utmp
文件中来获取登录用户登录的信息,但是可以通过file
来指定另一个文件,加了file
后,会去读取指定的文件来获取信息
选项 | 含义 |
---|---|
-a | 列出所有信息,相当于所有选项。 |
-b | 列出系统最近启动的时间日期。 |
-l | 列出所有可登陆的终端信息。 |
-m | 仅列出关于当前终端的信息,who -m 命令等同于 who am i 。 |
-q | 列出在本地系统上的用户和用户数的清单。 |
-r | 显示当前系统的运行级别。 |
-s | 仅显示名称、线路和时间字段信息,这是 who 命令的默认选项。 |
-u | 显示当前每个用户的用户名、登陆终端、登陆时间、线路活动和进程标识。 |
-T 或 -w | 显示 tty 终端的状态,“+”表示对任何人可写,“-”表示仅对 root 用户或所有者可写,“?”表示遇到线路故障。 |
- users
显示当前主机登录用户,显示信息较少
二、文件/目录的权限和归属
1.访问权限
程序访问文件时的权限,取决于此程序的发起者
- 进程的发起者,同文件的属主:则应用文件属主权限
- 进程的发起者,属于文件属组;则应用文件属组权限
- 应用文件“其它”权限
访问人群分为了三类
权限分为三种
对文件的权限
对目录的权限
- 读取r:允许查看文件内容、显示目录列表
- 写入w:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
- 可执行x:允许运行程序、切换目录
PS:
删除文件,和文件的权限无关,只和文件所在文件夹的权限有关
文件夹一定会有执行权限 x
执行权限 x 是文件夹的最小权限 ,没有x权限 文件夹的rw权限不生效
示例:使用ls -l
查看一个文件的权限
root@localhost opt]# ls -l 11.txt
-rw-r--r--. 1 root root 0 7月 29 14:30 11.txt
#- 表示文件属性
#rw- 表示属主的权限
#r-- 表示属组的权限
#r-- 表示其他用户的权限
#1 表示硬链接个数
#root 属主
#root 属组
#0 文件大小
#7月 29 14:30 最后修改时间
#11.txt 文件名
2.权限命令
2.1 chmod(change mode) 修改权限(属主,属组,其他)
chmod
命令用于控制用户对文件/目录的权限
常用选项:-R
:递归修改
chmod
修改权限有两种方法
- 模式法
格式:chmod
[选项]
主权限 组权限 其他用户权限
文件名
chmod 对谁(所有者,所属组,其他) 操作(+ - =)权限 文件名
'谁'
u -- 文件属主 (属于哪个用户)
g -- 文件属组 (属于哪个组)
o -- 其他用户
a -- 所有用户
'操作权限'
+ -- 添加权限
- -- 减少权限
= -- 覆盖已有权限
'权限(对root无效)'
r -- 读权限
w -- 写权限
x -- 执行权限
#需注意普通的权限对超级管理员无效
- 数字法
格式:chmod
想给权限对应的数字(三位分别对应主权限 组权限 其他用户权限)
文件/文件夹
#权限项 读 写 执行 读 写 执行 读 写 执行
#字符表示 r w x r w x r w x
#数字表示 4 2 1 4 2 1 4 2 1
#权限分配 文件所有者(属主) 文件所属组(属组) 其他用户(其他)
#数字转换十进制就可以直接表示
#r w x 十进制
#1 1 1 7
#1 1 0 6
#1 0 1 5
#1 0 0 4
#0 1 1 3
#0 1 0 2
#0 0 1 1
#0 0 0 0
#777即用户对文件/文件夹拥有所有权限(可读可写可执行);000即用户对文件/文件夹没有任何权限(不可读不可写不可执行)
2.2 chown 修改文件所属主和所属组
一般是谁新建的文件谁就是其的属主,chown
可以修改其所属主和所属组
格式:chown
[选项]
要改的主 :要改的组
文件
选项:
- -R:递归修改(处理指定目录以及其子目录下的所有文件)
- -c : 显示更改的部分的信息
- -f : 忽略错误信息 -h :修复符号链接
- -v : 显示详细的处理信息
3. umask 决定新建文件/文件夹权限
umask 的值可以用来保留在创建文件/文件夹权限
实现方式:
新建文件夹(目录) 权限:文件夹最高权限(777)减去umask值 (即777-umask)
新建文件权限:文件最高权限(666)减去umask(即666 - umask),如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变(即减完umask值之后若有执行权限则文件权限执行加1)
(PS:因为无法判断,新建的文件或者说新的文件到系统中,这个文件是否是一个病毒文件,如果有可执行权限不安全,所以文件的最高权限就是666,即rw-rw-rw-
)
查看umask值:
umask命令
修改umask值:
umask 数值 022 默认022