Linux中每个用户是通过 User Id (UID)来唯一标识的 新建用户 1-60000 自动分配 0-65535 端口号
管理员:root, 0
程序用户:1-499 (CentOS 6以前), 1-999 (CentOS 7以后) 不登录的用户 系统默认的情况
对守护进程获取资源进行权限分配
普通用户:500+ (CentOS6以前), 1000+(CentOS7以后) 不指定 顺序
给用户进行交互式登录使用
#1、查看当前登录用户信息
who命令:
[root@localhost ~]# whoami
root
[root@localhost ~]# who
root pts/0 2021-08-17 14:16 (192.168.91.1)
root pts/1 2021-08-17 14:30 (192.168.91.1)
[root@localhost ~]# who -b
系统引导 2021-08-17 14:15
补充:
#2、last命令
选项:
(1)-x:显示系统开关机以及执行等级信息
(2)-a:将登陆ip显示在最后一行
(3)-f :读取特定文件,可以选择 -f /var/log/btmp文件
(4)-d:将IP地址转换为主机名
(5)-n:设置列出名单的显示列数
(6)-t:查看指定时间的用户登录历史
3、lastlog 查看所有用户的最近一次登录
#-u 查看指定用户
[root@localhost ~]# lastlog -u root
用户名 端口 来自 最后登陆时间
root pts/1 192.168.91.1 二 8月 17 14:30:01 +0800 2021
#-t 表示几天之内的
[root@localhost ~]# lastlog -t 1
用户名 端口 来自 最后登陆时间
root pts/1 192.168.91.1 二 8月 17 14:30:01 +0800 2021
gdm :0 二 8月 17 14:15:56 +0800 2021
zhangsan :0 二 8月 17 16:25:37 +0800 2021
超级用户:root 用户是 Linux 操作系统中默认的超级用户账号,对本主机拥有至高
无上的权限,类似于 Windows 操作系统中的 Administrator 用户。只有当进行系统
管理、维护任务时,才建议使用 root 用户登录系统,日常事务处理建议只使用普通用户账号。日常工作一般不会使用root账号,小公司除外,小公司运维可能就你一个人你说了算。
思考:超级管理员是否是按照名称来定义的吗?
普通用户:账号需要由 root 用户或其他管理员用户创建,拥有的权限受
到一定限制,处理问题受到限制,一般只在用户自己的宿主目录中拥有完整权限。
演示:使用普通用户修改网卡
Tips:用户名后面的符号有所改变
[lisi@test1 root]$ ifconfig ens37 192.168.100.100
SIOCSIFADDR: 不允许的操作
SIOCSIFFLAGS: 不允许的操作
[lisi@test1 root]$ su root
密码:
[root@test1 ~]#
如何理解组?组相当于 职位 运维工程师 都具有大概相同的权限
看到组最常见的组词是不是组织?组织:按照一定的宗旨和系统建立起来的集体。那linux和windows中的组就是将多个用户集合起来,统一分配某种相同的权限(开通或关闭)。
基本组:有且唯一
附加组:可有可无,可以有多个
默认新建用户时自动添加同名的组
附加组:除了第一个组外的其他组为附加组或公共组,附加组在 /etc/group 文件中指定
[root@test1 ~]# id lisi
uid=1004(lisi) gid=1004(lisi) 组=1004(lisi),1005(kgc)
1004为基本组或私有 1005为附加组或公共组
1 lisi:用户名
2 x:密码占位符?
3 1002:uid
4 1002:gid
5 :描述信息你soft 备注
6/home/lisi:家目录 /root
7/bin/bash:shell环境
UID(User IDentity,用户标识号):Linux 操作系统中的每一个用户账号都有一个数字形式的身份标记,称为 UID(UserIDentity,用户标识号),对于操作系统核心来说,UID 是区分用户的基本依据,原则上每个用户的 UID 号应该是唯一的。root 用户账号的 UID 号为固定值 0,而程序用户账号的 UID号默认为1~499,500~60000 的 UID 号默认分配给普通用户使用。
centos7登录用户是从1000起到60000
centos6 500~60000
1-999 预留给系统,叫系统用户,某个程序比如数据库
给人使用的账户是从1000开始
[root@test1 ~]# id root
[root@test1 ~]# id zhangsan
uid=1000(zhangsan) gid=1000(zhangsan) 组=1000(zhangsan),10(wheel)
[root@localhost ~]#vim /etc/login.defs
#uid 的范围定义在此文件中
GID(Group IDentify,组标识号):与 UID 类似,每一个组账号也有一个数字形式的身份标记,称为 GID(Group IDentity,组标识号)。root 组账号的 GID 号为固定值 0,而程序组账号的 GID 号默认为 1~499,500~60000 的 GID 号默认分配给普通组使用。
用户 是员工 组 是职位
员工 可以兼职多个岗位
总有一个最重要的身份 主要组合附加组
主要组 必须要一个组 有且唯一
附加组 可有可无 有可以有多个
默认行为当你创建一个新用户时会自动创建一个和之同名的主组
root zhangsan 用户 使用不同的工具
cat /etc/shadow
vim /etc/shadow
/etc/passwd
存放保存用户名称、宿主目录、登录 Shell 等基本信息,
[root@test1 ~]# 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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
省略多行
root 用户名称
:x 密码占位符
:0 uid
:0 gid
:root 备注信息,描述
:/root 家目录路径
:/bin/bash shell环境
[root@test1 ~]# head -1 /etc/shadow
root:
$6$HzYRIWo05k6aVw2p$aLg7wfHGwoghmuUrIYced/vtejEu32K/yyP9CrF..hAejvS4Y64if3DCfJxwjV1.NhLow40mm5Pkmd6R8KOBU/:
:0
:99999
:7
:
:
:
第一字段:用户名:root
第二字段:密码: 6 6 6HzYRIWo05k6aVw2p$aLg7wfHGwoghmuUrIYced 当为*或!!时表示用户不能登录到此系统,若该字段为空,则表示无需密码即可登录
第三字段:上次修改密码时间,最后一次修改密码的时间
1970 年 01 月 01 日这是linux诞生的第一年已他作为元年开始计算
date -d '1970-01-01 19031 days'
#计算实际修改日期
第四字段:最小修改密码间隔时间, 今天 下一次间隔天数,才能修改,频繁修改, 也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。此字段是为了针对某些人频繁更改账户密码而设计的安全性考虑
第五字段:密码有效期 经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。该字段的默认值为 99999,也就是 273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。
第六字段:密码到期提醒(提示密码即将过期时间) 7 密码将要过期的前7天会提醒你 与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 "再过 n 天你的密码就要过期了,请尽快重新设置你的密码 该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 “修改密码” 的警告信息。
第七字段:密码过期后的宽限天数 (密码过期后多少天禁用此用户) 90 这个 也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。
第八字段:账号失效时间 同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!该字段通常被使用在具有收费服务的系统中。账号无法登录生命值
第九字段:保留字段收费内容
useradd命令
useradd 【选项】 用户名
添加用户:查看是否在 passwd和shadow文件中生成信息
[root@test1 ~]# useradd lisi
[root@test1 ~]# id lisi
uid=1004(lisi) gid=1004(lisi) 组=1004(lisi),1005(kgc)
[root@test1 ~]# cat /etc/passwd |grep lisi
lisi:x:1004:1004::/home/lisi:/bin/bash
[root@test1 ~]# tail -1 /etc/passwd
lisi:x:1004:1004::/home/lisi:/bin/bash
[root@test1 ~]# tail -1 /etc/shadow
lisi:$6$wbBIX3M/$QCPLfO0hs6gd0IyOHfblrwi2b319fCJFLHP2SG/QTgyjNTKON01S1qsUpNnjdeeS9Vd0cBFareY9mUh/87brz0:18809:0:99999:7:::
-u:指定用户的 UID 号,要求该 UID 号码未被其他用户使用。
-d:指定用户的宿主目录位置(当与-M 一起使用时,不生效)。
-e:指定用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。
-g:指定用户的基本组名(或使用 GID 号)。
-G:指定用户的附加组名(或使用 GID 号)。
-M:不建立宿主目录,即使/etc/login.defs 系统配置中已设定要建立宿主目录。
-s:指定用户的登录 Shell /sbin/nologin
wheel zhangsan
[root@test1 ~]# useradd -u 1100 -d /ky18 -g root -G wheel zhou
[root@test1 ~]# id zhou
uid=1100(zhou) gid=1100(zhou) 组=1100(zhou)
passwd命令
为用户账号设置密码
passwd [选项]… 用户名
基本用法 不加选项 可以添加密码
[root@test1 /]# passwd lisi 修改lisi 用户密码输入两次密码
更改用户 lisi 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
选项
[root@test1 /]# passwd -l lisi
[root@test1 /]# tail -1 /etc/shadow
lisi:!!:18809:0:99999:7:::
[root@test1 /]# passwd -d lisi
清除用户的密码 lisi。
passwd: 操作成功
[root@test1 /]# passwd -S lisi
lisi NP 2021-07-01 0 99999 7 -1 (密码为空。)
[root@test1 /]# passwd -u lisi
解锁用户 lisi 的密码。
passwd: 警告:未锁定的密码将是空的。
passwd: 不安全的操作(使用 -f 参数强制进行该操作)
[root@test1 /]# passwd -fu lisi
解锁用户 lisi 的密码。
passwd: 操作成功
[root@test1 dnf]# echo "123123"|passwd --stdin lisi
#免于交互
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
usermod命令
usermod [选项]… 用户名
常见选项
[root@test1 home]# echo "123123" | passwd --stdin zhou //无交互修改
更改用户 zhou 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@test1 home]# usermod -L zhou //锁定用户
[root@test1 home]# passwd -S zhou //查看状态
zhou LK 2021-07-02 0 99999 7 -1 (密码已被锁定。)
[root@test1 home]# usermod -U zhou //解锁
[root@test1 home]# passwd -S zhou //查看状态
zhou1 PS 2021-07-02 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@test1 home]# usermod -l zhou1 zhou //修改用户名
[root@test1 home]# id zhou //验证查看
id: zhou: no such user
[root@test1 home]# id zhou1
uid=1002(zhou1) gid=10(wheel) 组=10(wheel),0(root)
[root@test1 ~]# cd /home/
[root@test1 home]# ls
lisi zhangsan zhou
[root@test1 home]# mv zhou/ /
[root@test1 home]# ls
lisi zhangsan
[root@test1 home]# usermod -d /zhou zhou
使用前要先手动更改目录,-d只是更新信息
[root@localhost ~]# python -c 'import crypt,getpass;pw="kgc";print(crypt.crypt(pw))'
$6$tMsAHcauo3zx.QJb$YfGDclLx0q77DSbwU0zCUoH9GeoufE1aZRhb/E3iqIw4yKofIwPByLvJRMEG4urLWQpHQWLs4k8tW7LkH6B3P0
#生成随机密码
[root@localhost ~]#cat /dev/urandom | tr -dc '[:alnum:]'|head -c12
userdel [选项] 用户
-r 将宿主目录一起删除
[root@test1 etc]# userdel -r zhou1 //连宿主目录一起删除
[root@test1 etc]# id zhou1 //验证
id: zhou1: no such user
[root@test1 etc]# cd /home/
[root@test1 home]# ls
lisi zhangsan
用户宿主目录下的初始配置文件只对当前用户有效
~/ .bash_profile
#此文件中的命令将在该用户每次登录时被执行,他会设置一些环境变量,并且会调用该用户的~/.bashrc文件
~/.bashrc
#此文件中的命令将在该用户每次打开新的bash shell时(包括登录系统)被执行(登录 切换 新的bash环境)
~/.bash_logout
#此文件中的命令将在该用户每次退出时bash shell时使用
/etc/bashrc
与用户帐号文件相类似
/etc/group:保存组帐号基本信息
/etc/gshadow:保存组帐号的密码信息基本不使用
[root@test1 /]# grep "adm" /etc/group //过滤/etc/group文件下的adm文件
adm:x:4:
groupadd命令
groupadd [-g GID] 组账号名
[root@test1 /]# groupadd zhou //添加组账号
[root@test1 /]# tail -1 /etc/group
zhou:x:1002:
[root@test1 /]# groupadd -g 88 zhou //-g指定组id
[root@test1 /]# tail -1 /etc/group
zhou:x:88:
gpasswd 命令——添加、设置、删除组成员
[root@test1 /]# useradd zhou1 //组内加入新成员
[root@test1 /]# gpasswd -a zhou1 zhou
正在将用户“zhou1”加入到“zhou”组中 用户在前,组在后
[root@test1 /]# gpasswd -d zhou1 zhou
正在将用户“zhou1”从“zhou”组中删除
[root@test1 /]# gpasswd -M zhou1,zhou zhou
[root@test1 /]# grep "^zhou" /etc/group
zhou:x:88:zhou1,zhou
groupdel 组帐号名
[root@test1 /]# groupdel zhou
[root@test1 /]#
[root@test1 Packages]# finger zhangsan
Login: zhangsan Name: zhangsan
Directory: /home/zhangsan Shell: /bin/bash
Last login 五 7月 2 09:17 (CST) on pts/0
No mail.
No Plan.
查询已登录到主机的用户信息
[root@localhost ~]# w [选项] [用户名]
-h 不显示输出信息的标题
-l 用长格式输出
-s 用短格式输出,不显示登陆时间,JCPU 和 PCPU 时间
-V 显示版本信息
[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
上面的输出信息中,第一行其实和 top 命令的第一行非常类似,主要显示了当前的系统时间、系统从启动至今已运行的时间、登陆到系统中的用户数和系统平均负载。平均负载(load average)指的是在 1 分钟、5 分钟、15 分钟内系统的负载状况
从第二行开始,显示的是当前所有登陆系统的用户信息,第二行是用户信息的各列标题,从第三行开始每行代表一个用户。这些标题的含义如表 所示
标题 | 含义 |
---|---|
USER | 登录到系统的用户。 |
TTY | 登录终端。 |
FROM | 表示用户从哪里登陆进来,一般显示远程登陆主机的 IP 地址或者主机名。 |
LOGIN@ | 用户登陆的日期和时间。 |
IDLE | 表示某个程序上次从终端开始执行到现在所持续的时间。 |
JCPU | 和该终端连接的所有进程占用的 CPU 运算时间。这个时间里并不包括过去的后台作业时间,但是包括当前正在运行的后台作业所占用的时间。 |
PCPU | 当前进程所占用的 CPU 运算时间。 |
WHAT | 当前用户正在执行的进程名称和选项,换句话说,就是表示用户当前执行的是什么命令。 |
who
相比较 w 命令,who 命令只能显示当前登陆的用户信息,但无法知晓每个用户正在执行的命令。 who 命令的基本格式如下:
[root@localhost ~]# who [选项] [file]
需要说明的是,who 命令默认是通过 /var/run/utmp 文件来获取登陆用户信息,但如果通过 file 指定另一个文件,则 who 命令将不再默认读取 /var/run/utmp 文件,而是读取该指定文件来获取信息。
选项 | 含义 |
---|---|
-a | 列出所有信息,相当于所有选项。 |
-b | 列出系统最近启动的时间日期。 |
-l | 列出所有可登陆的终端信息。 |
-m | 仅列出关于当前终端的信息,who -m 命令等同于 who am i 。 |
-q | 列出在本地系统上的用户和用户数的清单。 |
-r | 显示当前系统的运行级别。 |
-s | 仅显示名称、线路和时间字段信息,这是 who 命令的默认选项。 |
-u | 显示当前每个用户的用户名、登陆终端、登陆时间、线路活动和进程标识。 |
-T 或 -w | 显示 tty 终端的状态,“+”表示对任何人可写,“-”表示仅对 root 用户或所有者可写,“?”表示遇到线路故障。 |
[root@localhost ~]#users
root
程序访问文件时的权限,取决于此程序的发起者
例子 root用户和普通用户 是否都可以看 (cat /etc/shadow)
访问人群分为了三类
权限分为三种
对文件的权限
对目录的权限
r 可以使用ls查看此目录中文件列表
w 可在此目录中创建文件,也可删除此目录中的文件,而和此被删除的文件的权限无关
x 可以cd进入此目录,可以使用ls -l查看此目录中文件元数据(须配合r权限),属于目录的可访问的最小权限
模式法:
chmod 对谁(所有者,所属组,其他)操作(+ - =)权限 文件
谁:u,g,o,a
操作:+,-,=
权限:r,w,x(普通权限对root无效)
数字法:
1 2 4
x w r
修改所属主
chown 用户:组名 文件名
#修改所属主,和所属组
-R 递归修改
[root@localhost aa]#chown -R zhangsan:zhangsan /opt/aa/
#递归修改
[root@localhost aa]#ll
总用量 0
-rw-r--r--. 1 zhangsan zhangsan 0 9月 17 21:53 1
-rw-r--r--. 1 zhangsan zhangsan 0 9月 17 21:53 10
-rw-r--r--. 1 zhangsan zhangsan 0 9月 17 21:53 2
-rw-r--r--. 1 zhangsan zhangsan 0 9月 17 21:53 3
-rw-r--r--. 1 zhangsan zhangsan 0 9月 17 21:53 4
-rw-r--r--. 1 zhangsan zhangsan 0 9月 17 21:53 5
-rw-r--r--. 1 zhangsan zhangsan 0 9月 17 21:53 6
-rw-r--r--. 1 zhangsan zhangsan 0 9月 17 21:53 7
-rw-r--r--. 1 zhangsan zhangsan 0 9月 17 21:53 8
-rw-r--r--. 1 zhangsan zhangsan 0 9月 17 21:53 9
##注意
[root@localhost aa]#chown zhangsan:zhangsan /
#此命令效果不亚于删除根目录
umask 的值可以用来保留在创建文件权限
实现方式:
新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变
新建目录的默认权限: 777-umask
非特权用户umask默认是 002
root的umask 默认是 022