IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux用户和组权限管理 -> 正文阅读

[系统运维]Linux用户和组权限管理

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 ~]#id root
uid=0(root) gid=0(root) groups=0(root)
[root@c7-1 ~]#id postfix
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 ~]#cat /etc/shadow	#使用root用户可以查看
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 ~]#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
......
tcpdump:x:72:72::/:/sbin/nologin
syhj:x:1000:1000:syhj:/home/syhj:/bin/bash

(3)shadow文件格式

  1. 登录用户名
  2. 用户密码:一般用sha512加密
  3. 从1970年1月1日起到密码最近一次被更改的时间
  4. 密码再过几天可以被变更(0表示随时可被变更)
  5. 密码再过几天必须被变更(99999表示永不过期)
  6. 密码过期前几天系统提醒用户(默认为一周)
  7. 密码过期几天后帐号会被锁定
  8. 从1970年1月1日算起,多少天后帐号失效
[root@c7-1 ~]#cat /etc/shadow
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 ~]#authconfig --passalgo=sha256 --update
#生成随机密码
[root@c7-1 ~]#tr -dc '[:alnum:]' < /dev/urandom | head -c 12

(4)group文件格式

  1. 群组名称:群组名称
  2. 群组密码:通常不需要设定,密码是被记录在 /etc/gshadow
  3. GID:群组的 ID
  4. 以当前组为附加组的用户列表(分隔符为逗号)
[root@c7-1 ~]#cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
......
postfix:x:89:
tcpdump:x:72:
syhj:x:1000:syhj

(5)gshadow文件格式

  1. 群组名称:群组名称同,同 /etc/group 文件中的组名相对应
  2. 群组密码:对于大多数用户来说,通常不设置组密码,因此该字段常为空,但有时为 “!”,指的是该群组没有组密码,也不设有群组管理员
  3. 组管理员列表:组管理员的列表,更改组密码和成员
  4. 以当前组为附加组的用户列表:多个用户间用逗号分隔
[root@c7-1 ~]#cat /etc/gshadow
root:::
bin:::
daemon:::
......
postfix:!::
tcpdump:!::
syhj:!!::syhj

4.用户和组命令管理

用户命令管理组命令管理
useraddgroupadd
usermodgroupmod
userdelgroupdel

(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“ 用户的注释信息

新建用户的相关文件:

  1. /etc/default/useradd
  2. /etc/skel/*
  3. /etc/login.defs
#创建用户zc,家目录为 /home/zc
useradd –d /home/zc zc
#新建一个用户gem,该用户的登录Shell是/bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组
useradd -s /bin/sh -g group –G adm,root gem
#创建用户admin,家目录为/admin,主组为wheel,附加组为root
useradd -d /admin -g /wheel -G root admin
#添加系统用户apache,UID为48,所属主组为apache,shell为/sbin/nologin,家目录为/var/www,描述为Apache
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 密码栏的 ! 拿掉
#将用户sam 的登录 Shell 修改为 ksh,主目录改为 /home/z,用户组改为 developer
usermod -s /bin/ksh -d /home/z –g developer sam

#修改 kk 用户的家目录到 /opt 下
useradd kk
mv /home/kk /opt
usermod -d /opt/kk kk
su - kk

(3)userdel

userdel 可删除 Linux 用户
格式:userdel [选项] 用户名

参数含义
-f强制删除
-r删除用户家目录和邮箱
#向系统中增加了一个新组 group1,新组的组标识号是在当前已有的最大组标识号的基础上加 1
groupadd group1
#向系统中增加了一个新组 group2,同时指定新组的组标识号是 101
groupadd -g 101 group2
#创建系统组 apache,组标识号为 48
groupadd -g 48 -r apache

(5)groupmod

groupmod 组属性修改
格式:groupmod [选项] 组名

参数含义
-n将用户组的名字改为新名字
-g为用户组指定新的组标识号
-o与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同
#将组 group2 的组标识号修改为 102
groupmod -g 102 group2
#将组 group2 的标识号改为 10000,组名修改为 group3
groupmod –g 10000 -n group3 group2

(6)groupdel

groupdel 可以删除组
格式:groupdel [选项] 组名

参数选项
-f强制删除,即使是用户的主组也强制删除组
#从系统中删除组 group1
groupdel group1

5.其他常用命令

(1)id

id 命令可以查看用户的UID,GID等信息
格式:id [OPTIONS] UserName

参数含义
-u
-g显示 GID
-G显示用户所属组的 ID
-n显示名称,需配合 ugG 使用
[root@c7-1 ~]#id root
uid=0(root) gid=0(root) groups=0(root)
[root@c7-1 ~]#id postfix
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 时不改变环境变数
#变更帐号为 zc 并改变工作目录至 zc 的家目录
su - zc
#变更帐号为 root 并在执行 ls 指令后退出变回原使用者
su -c ls root
#变更帐号为 root 并传入 -f 参数给新执行的 shell
su -f root

(3)passwd

passwd 可以修改用户密码
格式:passwd [OPTIONS] UserName

参数含义
-u解锁用户账户,允许使用
-l锁定用户账户,禁止使用
-d删除指定用户密码,仅使用用户名可以登录系统
-S查看用户账户的状态(是否被锁定)
-f强制操作
-e强制用户下次登录修改密码
-n mindays指定最短使用期限
-x maxdays指定最大使用期限
-w warndays提前多少天开始警告
-i密码过期后多少天停用账户
–stdin从标准输入接收用户密码,Ubuntu无此选项
#修改 zc 用户的密码
passwd zc
#修改 zc 用户登录密码为 123456
echo "123456" | passwd --stdin zc
#设置 zc 用户下次登录必须修改密码
passwd -e zc
#删除 zc 用户的登录密码
passwd -d zc
#锁定 zc 用户,使其不能登录
passwd -l zc

(4)gpasswd

gpasswd命令,可以更改组密码,也可以修改附加组的成员关系
格式:gpasswd [OPTION] GROUP

参数含义
-a将user添加至指定组中
-d从指定附加组中移除用户user
-r删除密码
-A / -M设置有管理权限的用户列表
-R限制用户登入组,只有组中的成员才可以用newgrp加入该组
#增加组成员
[root@centos8 ~]#groupadd admins
[root@centos8 ~]#id wang
uid=1000(wang) gid=1000(wang) groups=1000(wang)
[root@centos8 ~]#gpasswd -a wang admins
Adding user wang to group admins
[root@centos8 ~]#id wang
uid=1000(wang) gid=1000(wang) groups=1000(wang),1002(admins)
[root@centos8 ~]#groups wang	#查看 wang 所属的组
wang : wang admins
[root@centos8 ~]#getent group admins
admins:x:1002:wang
#删除组成员
[root@centos8 ~]#gpasswd -d wang admins
Removing user wang from group admins
[root@centos8 ~]#groups wang
wang : wang
[root@centos8 ~]#id wang
uid=1000(wang) gid=1000(wang) groups=1000(wang)
[root@centos8 ~]#getent group admins
admins:x:1002:

(5)newgrp

newgrp 命令可以临时切换主组, 如果用户本不属于此组,则需要组密码
格式:newgrp [-] [group]
如果使用 - 选项,可以初始化用户环境

[root@centos8 ~]#gpasswd root	#修改 root 组密码
Changing the password for group root
New Password: 
Re-enter new password: 
[root@centos8 ~]#getent gshadow root	#查看 root 组
root:$6$UKK78gqOvw/Ug$exBe4gHUYzSj/Gip0YkXII8RkPca7QGVto6Ws5SFd6lhxxklCsfKqiv1qy
EQZOfGK2WbR7/I.A2.7j1SUGuB91::
[wang@centos8 ~]$newgrp root	#在普通用户 wang 下切换主组
Password: 
[wang@centos8 ~]$id		#可以看到用户 wang 的主组变成了 root,附加组为 wang 
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		#创建的文件所属主组为 root
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用户密码到期前,提前收到警告信息的天数
#可以编辑 /etc/login.defs 来设定几个参数,以后设置口令默认就按照参数设定为准
[root@c7-1 ~]#vim /etc/login.defs
......
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7
......

#显示 root 用户的密码策略
chage -l root

#设置密码 60 天后过期
chage -M 60 root

#设置密码过期后过 5 天失效
chage -I 5 root

#下一次登录强制重设密码
chage -d 0 root

#更改 zc 用户的密码策略,最小修改密码天数为 3,最迟修改密码天数为 42,用户密码到期前,提前 14 天收到警告信息,密码过期后的宽限期为 7 天,账号到期时间为 2021-09-09
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]

参数含义
-s单行显示
-l多行显示
[root@c7-1 ~]#finger -s root
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 ~]#finger -l root
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 ~]#chfn wang
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 ~]#getent passwd wang
wang:x:1000:1000:wangxiaochun,it,10000,11111:/home/wang:/bin/bash
[root@centos7 ~]#chsh -s /bin/csh wang 
Changing shell for wang.
Shell changed.
[root@centos7 ~]#getent passwd wang
wang:x:1000:1000:wangsicong,wanda,10000,11111:/home/wang:/bin/csh
[root@centos7 ~]#usermod -s /bin/bash wang
[root@centos7 ~]#getent passwd wang
wang:x:1000:1000:wangsicong,wanda,10000,11111:/home/wang:/bin/bash

(10)users

users 命令用于显示当前登录系统的所有用户的用户列表,每个显示的用户名对应一个登录会话,如果一个用户有不止一个登录会话,那他的用户名将显示相同的次数

[root@c7-1 ~]#users
root root syhj

(11)w

w命令用于显示目前登入系统的用户信息,执行这项指令可得知目前登入系统的用户有哪些人,以及他们正在执行的程序,单独执行 w 指令会显示所有的用户,也可指定用户名称,仅显示某位用户的相关信息。
格式:w [-fhlsuV] [用户名称]

参数含义
-f开启或关闭显示用户从何处登入系统
-h不显示各栏位的标题信息列
-l使用详细格式列表,此为预设值
-s使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间
-u忽略执行程序的名称,以及该程序耗费CPU时间的信息
[root@c7-1 ~]#w
 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 ~]#last -n 5 -a -i
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 ~]#groups
root
[root@c7-1 ~]#groups root
root : root
[root@c7-1 ~]#groups syhj
syhj : syhj

(14)groupmems

groupmems 可以管理附加组的成员关系
格式:groupmems [options] [action]

参数含义
-g更改为指定组 (只有root)
-a指定用户加入组
-d从组中删除用户
-p从组中清除所有成员
-l显示组成员列表
#查看有哪些用户属于sales组
[root@rhel7 ~]# groupmems -g sales -l
linda lisa

#从sales组中删除lisa
[root@rhel7 ~]# groupmems -d lisa -g sales  
[root@rhel7 ~]# groupmems -g sales -l
linda 

#添加用户到组里
[root@rhel7 ~]# id lxj2
uid=1002(lxj2) gid=0(root) groups=0(root)
[root@rhel7 ~]# groupmems -a lxj2 -g sales
[root@rhel7 ~]# id lxj2
uid=1002(lxj2) gid=0(root) groups=0(root),1238(sales)

6. 总结

今天的linux总的来说掌握的差不多了,但是还有点会糊涂的感觉。当然会去问专业人士的,依旧会有后续的。如文中有些许不对的地方,请私信我,我会改正的,谢谢大佬们了!!!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 12:29:14  更:2021-08-07 12:31:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 3:52:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计