1.前言
?????Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。 ??用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
2.用户和组基本概念
(1)用户
Linux中每个用户是通过 User Id(UID)来唯一标识的
管理员:root, 0 普通用户:1-60000 自动分配 系统用户:1-499 (CentOS 6以前), 1-999 (CentOS 7以后) 对守护进程获取资源进行权限分配 登录用户:500+ (CentOS6以前), 1000+(CentOS7以后) 给用户进行交互式登录使用
(2)用户组
Linux中可以将一个或多个用户加入用户组中,用户组是通过 Group ID(GID) 来唯一标识的。
管理员组:root, 0 普通组: 系统组:1-499(CentOS 6以前), 1-999(CentOS7以后), 对守护进程获取资源进行权限分配 普通组:500+(CentOS 6以前), 1000+(CentOS7以后), 给用户使用
(3)用户和组的关系
用户的主要组(primary group):用户必须属于一个且只有一个主组,默认创建用户时会自动创建和用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组。 用户的附加组(supplementary group): 一个用户可以属于零个或多个辅助组,附加组。
[root@c7-1 ~]
uid=0(root) gid=0(root) groups=0(root)
[root@c7-1 ~]
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
(4)安全上下文
???????Linux安全上下文Context:运行中的程序,即进程 (process),以进程发起者的身份运行,进程所能够访问资源的权限取决于进程的运行者的身份。比如:分别以 root 和 syhj 的身份查看 /etc/shadow ,得到的结果是不同的,资源能否能被访问,是由运行者的身份决定,非程序本身。
[syhj@c7-1 ~]$cat /etc/shadow
cat: /etc/shadow: Permission denied
[syhj@c7-1 ~]$exit
logout
[root@c7-1 ~]
root:$6$ufFy7VbEzzynvaVy$k9l1PFr84cUOzyd2mDrCnORqMeJKePO117oaiybpQ9t4rmuGOyIztHx29agMWxD5iXmQSKwi9YLoJo8lgc4fL.::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
......
3.用户和组配置文件
(1)主要配置文件
文件 | 含义 |
---|
/etc/passwd | 用户及其属性信息(名称、UID、主组ID等) | /etc/shadow | 用户密码及其相关属性 | /etc/group | 组及其属性信息 | /etc/gshadow | 组密码及其相关属性 |
(2)passwd文件格式
/etc/passwd 一共 7 个字段,下面是每个字段的含义
字段 | 含义 |
---|
login name | 登录用户名 (syhj) | passwd | 密码 (x) | UID | 用户身份编号 (1000) | GID | 登录默认所在组编号 (1000) | GECOS | 用户全名或注释 | home directory | 用户主目录 (/home/wang) | shell | 用户默认使用shell (/bin/bash) |
[root@c7-1 ~]
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
......
tcpdump:x:72:72::/:/sbin/nologin
syhj:x:1000:1000:syhj:/home/syhj:/bin/bash
(3)shadow文件格式
- 登录用户名
- 用户密码:一般用sha512加密
- 从1970年1月1日起到密码最近一次被更改的时间
- 密码再过几天可以被变更(0表示随时可被变更)
- 密码再过几天必须被变更(99999表示永不过期)
- 密码过期前几天系统提醒用户(默认为一周)
- 密码过期几天后帐号会被锁定
- 从1970年1月1日算起,多少天后帐号失效
[root@c7-1 ~]
root:$6$ufFy7VbEzzynvaVy$k9l1PFr84cUOzyd2mDrCnORqMeJKePO117oaiybpQ9t4rmuGOyIztHx29agMWxD5iXmQSKwi9YLoJo8lgc4fL.::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
......
postfix:!!:18831::::::
tcpdump:!!:18831::::::
syhj:$6$eBhaaWvbAN6lE7Wm$i8ZeqhGG7mw7Dn6VL8CHcAxGuxvQtDXFOtqrqI.qXWFgOiEwacnemDmd2MiCTCLGR714HmGzhqU7ry4xMbYYb1::0:99999:7:::
[root@c7-1 ~]
[root@c7-1 ~]
(4)group文件格式
- 群组名称:群组名称
- 群组密码:通常不需要设定,密码是被记录在 /etc/gshadow
- GID:群组的 ID
- 以当前组为附加组的用户列表(分隔符为逗号)
[root@c7-1 ~]
root:x:0:
bin:x:1:
daemon:x:2:
......
postfix:x:89:
tcpdump:x:72:
syhj:x:1000:syhj
(5)gshadow文件格式
- 群组名称:群组名称同,同 /etc/group 文件中的组名相对应
- 群组密码:对于大多数用户来说,通常不设置组密码,因此该字段常为空,但有时为 “!”,指的是该群组没有组密码,也不设有群组管理员
- 组管理员列表:组管理员的列表,更改组密码和成员
- 以当前组为附加组的用户列表:多个用户间用逗号分隔
[root@c7-1 ~]
root:::
bin:::
daemon:::
......
postfix:!::
tcpdump:!::
syhj:!!::syhj
4.用户和组命令管理
用户命令管理 | 组命令管理 |
---|
useradd | groupadd | usermod | groupmod | userdel | groupdel |
(1)useradd
useradd 命令可以创建新的Linux用户 格式:useradd [选项] 用户名
参数 | 含义 |
---|
-u | 指定用户的 UID 号,要求该 UID 号码未被使用 | -d | 指定用户的宿主目录(当与 -M 一起使用时失效) | -e | 指定用户的账号失效时间,可使用 YYYY-MM-DD 的日期格式 | -g | 指定用户的基本组名(或使用 GID 号) | -G | 指定用户的附加组名(或使用 GID 号) | -M | 不建立宿主目录,即使 /etc/login.defs 系统配置中已设定要建立宿主目录 | -s | 指定用户的登录 shell | -r | 创建系统用户 CentOS 6之前: ID<500,CentOS 7以后: ID<1000 | -c | "COMMENT“ 用户的注释信息 |
新建用户的相关文件:
- /etc/default/useradd
- /etc/skel/*
- /etc/login.defs
useradd –d /home/zc zc
useradd -s /bin/sh -g group –G adm,root gem
useradd -d /admin -g /wheel -G root admin
useradd -r -u 48 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache
(2)usermod
usermod 命令用来修改用户属性 格式:usermod [选项] 用户名
参数 | 含义 |
---|
-u | 指定新的 UID | -g | 指定新的主组 | -e YYYY-MM-DD | 指明用户账号过期日期 | -d HOME | 新家目录不会自动创建,若要创建新家目录并移动原家数据,同时使用-m选项 | -G | 新附加组,原来的附加组将会被覆盖;若想保留原有,则要同时使用-a选项 | -s | 新的默认SHELL | -l login_name | 更改用户账号的登录名称 | -L | 锁定用户账户,在/etc/shadow 密码栏的增加 ! | -U | 解锁用户账户,将 /etc/shadow 密码栏的 ! 拿掉 |
usermod -s /bin/ksh -d /home/z –g developer sam
useradd kk
mv /home/kk /opt
usermod -d /opt/kk kk
su - kk
(3)userdel
userdel 可删除 Linux 用户 格式:userdel [选项] 用户名
groupadd group1
groupadd -g 101 group2
groupadd -g 48 -r apache
(5)groupmod
groupmod 组属性修改 格式:groupmod [选项] 组名
参数 | 含义 |
---|
-n | 将用户组的名字改为新名字 | -g | 为用户组指定新的组标识号 | -o | 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同 |
groupmod -g 102 group2
groupmod –g 10000 -n group3 group2
(6)groupdel
groupdel 可以删除组 格式:groupdel [选项] 组名
参数 | 选项 |
---|
-f | 强制删除,即使是用户的主组也强制删除组 |
groupdel group1
5.其他常用命令
(1)id
id 命令可以查看用户的UID,GID等信息 格式:id [OPTIONS] UserName
参数 | 含义 |
---|
-u | | -g | 显示 GID | -G | 显示用户所属组的 ID | -n | 显示名称,需配合 ugG 使用 |
[root@c7-1 ~]
uid=0(root) gid=0(root) groups=0(root)
[root@c7-1 ~]
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
(2)su
su: 即 switch user,可以切换用户身份,并且以指定用户的身份执行命令 格式:su [options…] [-] [user [args…]]
参数 | 含义 |
---|
-l | 相当于 su - UserName | -c | 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者 | -f | 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh | -m / -p | 执行 su 时不改变环境变数 |
su - zc
su -c ls root
su -f root
(3)passwd
passwd 可以修改用户密码 格式:passwd [OPTIONS] UserName
参数 | 含义 |
---|
-u | 解锁用户账户,允许使用 | -l | 锁定用户账户,禁止使用 | -d | 删除指定用户密码,仅使用用户名可以登录系统 | -S | 查看用户账户的状态(是否被锁定) | -f | 强制操作 | -e | 强制用户下次登录修改密码 | -n mindays | 指定最短使用期限 | -x maxdays | 指定最大使用期限 | -w warndays | 提前多少天开始警告 | -i | 密码过期后多少天停用账户 | –stdin | 从标准输入接收用户密码,Ubuntu无此选项 |
passwd zc
echo "123456" | passwd --stdin zc
passwd -e zc
passwd -d zc
passwd -l zc
(4)gpasswd
gpasswd命令,可以更改组密码,也可以修改附加组的成员关系 格式:gpasswd [OPTION] GROUP
参数 | 含义 |
---|
-a | 将user添加至指定组中 | -d | 从指定附加组中移除用户user | -r | 删除密码 | -A / -M | 设置有管理权限的用户列表 | -R | 限制用户登入组,只有组中的成员才可以用newgrp加入该组 |
[root@centos8 ~]
[root@centos8 ~]
uid=1000(wang) gid=1000(wang) groups=1000(wang)
[root@centos8 ~]
Adding user wang to group admins
[root@centos8 ~]
uid=1000(wang) gid=1000(wang) groups=1000(wang),1002(admins)
[root@centos8 ~]
wang : wang admins
[root@centos8 ~]
admins:x:1002:wang
[root@centos8 ~]
Removing user wang from group admins
[root@centos8 ~]
wang : wang
[root@centos8 ~]
uid=1000(wang) gid=1000(wang) groups=1000(wang)
[root@centos8 ~]
admins:x:1002:
(5)newgrp
newgrp 命令可以临时切换主组, 如果用户本不属于此组,则需要组密码 格式:newgrp [-] [group] 如果使用 - 选项,可以初始化用户环境
[root@centos8 ~]
Changing the password for group root
New Password:
Re-enter new password:
[root@centos8 ~]
root:$6$UKK78gqOvw/Ug$exBe4gHUYzSj/Gip0YkXII8RkPca7QGVto6Ws5SFd6lhxxklCsfKqiv1qy
EQZOfGK2WbR7/I.A2.7j1SUGuB91::
[wang@centos8 ~]$newgrp root
Password:
[wang@centos8 ~]$id
uid=1000(wang) gid=0(root) groups=0(root),1000(wang)
[wang@centos8 ~]$getent passwd wang
wang:x:1000:1000:wangxiaochun,IT,110,119,:/home/wang:/bin/bash
[wang@centos8 ~]$touch wang1.txt
[wang@centos8 ~]$ll
total 0
-rw-r--r-- 1 wang root 0 Dec 18 09:38 wang1.txt
(6)chage
chage 可以修改用户密码策略 格式:chage [OPTION]… LOGIN
参数 | 含义 |
---|
-l | 显示密码策略 | -d | 更改密码的时间 | -I(–inactive) | 密码过期后的宽限期 | -E | 帐号到期的日期,过了这天,此帐号将不可用 | -m | 密码可更改的最小天数。为零时代表任何时候都可以更改密码 | -M | 密码保持有效的最大天数 | -W | 用户密码到期前,提前收到警告信息的天数 |
[root@c7-1 ~]
......
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
......
chage -l root
chage -M 60 root
chage -I 5 root
chage -d 0 root
chage -m 3 -M 42 -W 14 -I 7 -E 2021-09-09 zc
(7)finger
finger命令可以让使用者查询用户信息 如果系统没有这个命令需要安装:yum -y install finger 格式:finger [options] user[@address]
[root@c7-1 ~]
Login Name Tty Idle Login Time Office Office Phone Host
root root pts/0 3:08 Aug 6 08:35 (20.0.0.1)
root root pts/1 Aug 6 14:30 (20.0.0.1)
[root@c7-1 ~]
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Fri Aug 6 08:35 (CST) on pts/0 from 20.0.0.1
3 hours 9 minutes idle
On since Fri Aug 6 14:30 (CST) on pts/1 from 20.0.0.1
No mail.
No Plan.
(8)chfn
chfn命令提供使用者更改个人用户信息 格式:shell>> chfn
示例:
[root@centos7 ~]
Changing finger information for wang.
Name [wang]: wangxiaochun
Office []:it
Office Phone []: 10000
Home Phone []: 11111
(9)chsh
chsh 指定shell,相当于usermod -s 格式:shell>> chsh 示例
[root@centos7 ~]
wang:x:1000:1000:wangxiaochun,it,10000,11111:/home/wang:/bin/bash
[root@centos7 ~]
Changing shell for wang.
Shell changed.
[root@centos7 ~]
wang:x:1000:1000:wangsicong,wanda,10000,11111:/home/wang:/bin/csh
[root@centos7 ~]
[root@centos7 ~]
wang:x:1000:1000:wangsicong,wanda,10000,11111:/home/wang:/bin/bash
(10)users
users 命令用于显示当前登录系统的所有用户的用户列表,每个显示的用户名对应一个登录会话,如果一个用户有不止一个登录会话,那他的用户名将显示相同的次数
[root@c7-1 ~]
root root syhj
(11)w
w命令用于显示目前登入系统的用户信息,执行这项指令可得知目前登入系统的用户有哪些人,以及他们正在执行的程序,单独执行 w 指令会显示所有的用户,也可指定用户名称,仅显示某位用户的相关信息。 格式:w [-fhlsuV] [用户名称]
参数 | 含义 |
---|
-f | 开启或关闭显示用户从何处登入系统 | -h | 不显示各栏位的标题信息列 | -l | 使用详细格式列表,此为预设值 | -s | 使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间 | -u | 忽略执行程序的名称,以及该程序耗费CPU时间的信息 |
[root@c7-1 ~]
15:06:11 up 1 day, 13:58, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 20.0.0.1 08:35 3:28m 0.21s 0.21s -bash
root pts/1 20.0.0.1 14:30 3.00s 0.06s 0.00s w
syhj :0 :0 Thu11 ?xdm? 9:46 0.31s /usr/libexec/gnome-session-binary --session gnome-classic
(12)last
last 命令用于显示用户最近登录信息 格式:shell>> last [options]
参数 | 含义 |
---|
-R | 省略 hostname 的栏位 | -n num | 展示前 num 个 | username | 展示 username 的登入讯息 | tty | 限制登入讯息包含终端机代号 |
[root@c7-1 ~]
root pts/1 Fri Aug 6 14:30 still logged in 20.0.0.1
root pts/0 Fri Aug 6 08:35 still logged in 20.0.0.1
root pts/0 Thu Aug 5 21:18 - 00:01 (02:43) 20.0.0.1
syhj :0 Thu Aug 5 11:06 still logged in 0.0.0.0
root pts/2 Thu Aug 5 09:06 - 00:01 (14:55) 20.0.0.1
wtmp begins Fri Jul 23 22:53:44 2021
(13)groups
groups 可查看用户组关系 格式:groups [OPTION].[USERNAME]… 示例
[root@c7-1 ~]
root
[root@c7-1 ~]
root : root
[root@c7-1 ~]
syhj : syhj
(14)groupmems
groupmems 可以管理附加组的成员关系 格式:groupmems [options] [action]
参数 | 含义 |
---|
-g | 更改为指定组 (只有root) | -a | 指定用户加入组 | -d | 从组中删除用户 | -p | 从组中清除所有成员 | -l | 显示组成员列表 |
[root@rhel7 ~]
linda lisa
[root@rhel7 ~]
[root@rhel7 ~]
linda
[root@rhel7 ~]
uid=1002(lxj2) gid=0(root) groups=0(root)
[root@rhel7 ~]
[root@rhel7 ~]
uid=1002(lxj2) gid=0(root) groups=0(root),1238(sales)
6. 总结
今天的linux总的来说掌握的差不多了,但是还有点会糊涂的感觉。当然会去问专业人士的,依旧会有后续的。如文中有些许不对的地方,请私信我,我会改正的,谢谢大佬们了!!!
|