Linux 账户和权限管理

本文深入解析Linux系统中用户账号和组账号的管理,包括创建、修改、删除用户及组,设置权限,以及查询账号信息的方法。重点介绍了关键命令如useradd、usermod、passwd、groupadd和gpasswd的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

Linux登陆需要用户名、密码。/etc/passwd 文件保存用户名。登录Linux时,Linux 先查找 /etc/passwd 文件中是否有这个用户名,没有则跳出,有则读取用户名的user ID 、 group ID 、用户名对应的根目录路径以及所使用的 shell ,最后在 /etc/shadow 中核对该 UID 对应的 PWD 是否正确,正确则登录到该用户的 shell。

一:用户账号和组账号概述
1.1:linux基于用户身份对资源访问进行控制

用户账号

超级用户(root,不可被替代)
普通用户(自己创建,取用户名)
程序用户(人无法登录,是给程序使用的,以使程序可以正常运转)
匿名用户(windows的guest,linux的nobody,普通用户中的最低权限用户)
组账号(用户权限的集合)

基本组(私有组,伴随着用户的创建而创建,与用户同名)
附加组(公有组,直接创建一个空组,可以添加已有用户,给组设置相关权限,该组中的所有用户都具备此权限)
UID和GID(标签,标识号)

UID(User IDentity,用户标识号)

GID(group IDentify,组标识号)

二:用户账号和组账号管理
2.1:用户账号文件/etc/passwd

保存用户名称、宿主目录、登录Shell等基本信息

文件位置:/etc/passwd
每一行对应一个用户的账号记录
mark

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I2N3ohnY-1592128203442)(http://lipengfeiaimiao.oss-cn-hangzhou.aliyuncs.com/img/20200614/095245560.png)]

账号记录用冒号分隔

用户账号:用户名

密码占位符:代表有密码,不会起到密码的个数和内容的属性

用户账号 ID :UID

uid序号:

序号
0root
1-999程序用户
1000-60000普通用户
99nobody匿名用户

组账号ID:GID,GID基本上指私有组,名称与UID基本上是一致

用户说明:描述性信息

宿主目录:家目录

登录shell:是否可以登录系统,/bin/bash /sbin/bash 是可以 /sbin/nologin 无法人为登录

2.2: 用户账号文件/etc/shadow

mark
1 账户名
2 mde5密码加密信息 ###*或!!则不等登录 如空则没密码也可以登录
3 上次修改密码时间 1970年1月1号到最近修改密码间隔的天数
4 密码的最短有效天数,如0则不限制
5 密码的最长有效天数,如99999则不进行限制
6 提前多少天告警,用户口令将过期,默认是7
7 密码过期后多少天内禁用此用户
8 账号失效时间,1970年1月1日计算,默认是空则账号永久使用
9 保留字段,目前没使用

2.3:添加用户账号useradd

mark

-u 指定UID

-d 指定家目录

-e 指定失效时间,可以使用年-月-日格式

-g 指定基本组(若指定基本组,则必须先存在基本组)

-G 指定附加组 (组必须要已存在)

-M 指定不创建家目录

-s 指定是否允许从shell 登录

[root@lpf ~]# useradd -s /sbin/nologin -g tom lisi
[root@lpf ~]# cat /etc/passwd
lisi:x:1005:1001::/home/lisi:/sbin/nologin     #shell 无法登录
[root@lpf ~]# vim /etc/passwd
lisi:x:1005:1001::/home/lisi:/bin/bash   #手动修改后可以登录
[root@lpf ~]# useradd -M -G tom lisi1   #添加lisi1账户,它没有家目录同时属于tom组
2.4: 设置/更改用户口令passwd

mark

d 清除密码

-l 指锁定账号密码

-u 指解锁账号密码

-S 查看用户当前状态是否被锁定

[root@lpf ~]# passwd -l tom
锁定用户 tom 的密码 。
passwd: 操作成功
[root@lpf ~]# cat /etc/shadow
tom:!!:18425:0:99999:7:::              #!!表示用户不能登录

[lpf@lpf root]$ su tom
密码:
su: 鉴定故障                         #普通用户无法登录,root可以登录

[root@lpf ~]# passwd -S tom
tom LK 2020-06-14 0 99999 7 -1 (密码已被锁定。)

[root@lpf ~]# passwd -u tom
解锁用户 tom 的密码。
passwd: 操作成功

[root@lpf ~]# cat /etc/shadow
tom:$6$UGhquVuJ$tFeOpg.2xrfb1WDSks.KLG9JKo/maBu9Bi4ZbEQUEWrQuo1PgVetNJG17bJEcNr7UuOWyaGPfTkwlE5odqG/Y0:18427:0:99999:7:::

小结:

passwd -l 锁定用户密码,导致的结果是本地图形界面登录端不能登陆,但字符界面可以登录,(仅限于高权限用户切换到李四用户)

/sbin/nologin 用户无法直接登陆和被切换登录

system用户权限最大,但是无法人为登录

passwd 后面不指定用户名,就是修改当前密码,即默认用户名为当前用户

2.5: 修改(配置)用户账号的属性usermod

mark

-u:修改用户的UID号

-d:修改用户的家目录

-e:修改用户的账户失效时间

-s:指定用户的登录shell

-l 更改用户账号的登录名称

-L 锁定用户账户

-U 解锁用户账户

[root@lpf ~]# passwd -S lisi
lisi LK 2020-06-14 0 99999 7 -1 (密码已被锁定。)
[root@lpf ~]# usermod -U lisi
usermod:解锁用户密码将产生没有密码的账户。
您应该使用 usermod -p 设置密码并解锁用户密码。
[root@lpf ~]# passwd -S lisi
lisi LK 2020-06-14 0 99999 7 -1 (密码已被锁定。)
[root@lpf ~]# usermod -p 123456 lisi  
[root@lpf ~]# passwd -S lisi
lisi PS 2020-06-14 0 99999 7 -1 (更改当前使用的认证方案。)

[root@lpf ~]# usermod -L lisi     #用usermod 锁定用户账户
[root@lpf ~]# passwd -S lisi      #查看密码状态
lisi LK 2020-06-14 0 99999 7 -1 (密码已被锁定。)
[root@lpf ~]# usermod -U lisi     #用usermod -U 解锁
[root@lpf ~]# passwd -S lisi
lisi PS 2020-06-14 0 99999 7 -1 (更改当前使用的认证方案。)

小结:usermod的密码锁定解锁权限和passwd的密码锁定解锁权限一样高,可以相互使用

2.6: 删除用户账号userdel

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xcVmdhXv-1592128203459)(http://lipengfeiaimiao.oss-cn-hangzhou.aliyuncs.com/img/20200612/155613359.png)]

[root@lpf ~]# useradd wangwu
[root@lpf ~]# ls /home
lisi  lpf  tom  tom1  tom2  tom3  wangwu
[root@lpf ~]# userdel wangwu
[root@lpf ~]# ls /home
lisi  lpf  tom  tom1  tom2  tom3  wangwu
[root@lpf ~]# useradd wangwu       #宿主目录还在,不能创建该用户
useradd:警告:此主目录已经存在。
不从 skel 目录里向其中复制任何文件。
正在创建信箱文件: 文件已存在
[root@lpf ~]# userdel -r wangwu     #加 -r 可以连宿主目录一起删除
[root@lpf ~]# ls /home     #查看/home目录下   创建用户时没有指定根目录,就会自动设置到/home下
lisi  lpf  tom  tom1  tom2  tom3

[root@lpf ~]# useradd wangwu
[root@lpf ~]# ls /home
lisi  lpf  tom  tom1  tom2  tom3  wangwu
2.7: 用户账号的初始配置文件

mark

~/.bash_profile 指定环境变量,在每次登陆shell时,就会加载其中的参数

~/.bashrc 在用户登录时就会被加载

~/.bash_logout 指注销时会起作用

.bashrc和.bash_profile都是开机启动,.bashrc 要比.bash_profile 更加精细
.bash_logout 可以理解,干坏事后擦屁股,擦脚印。

2.8: 组账号文件 /etc/group ; /etc/gshadow

mark

[root@lpf ~]# tail -3 /etc/group
lisi2:x:1005:tom1,root
lisi1:x:1006:
wangwu:x:1007:
[root@lpf ~]# id lisi1
uid=1006(lisi1) gid=1006(lisi1) 组=1006(lisi1),1001(tom)
2.9: 添加组账号groupadd

mark

-g 指定组GID 人可用的组也是从1000开始排序

2.10: 添加删除组成员gpasswd

设置组账号密码(极少用),添加/删除组成员

命令使用基本格式
gpasswd [选项] 组账号名

常用选项
-a		向组内添加一个用户
-d		从组中删除一个用户成员
-M		定义组成员列表,以逗号分隔
–stdin  标准性输入,免交互
例如:向组内添加一个用户
[root@33 ~]# gpasswd -a 12
例如:从组内删除一个用户
[root@33 ~]# gpasswd -d 12
例如:添加多个用户
[root@33 ~]# gpasswd -M a,b,c,d
一定注意:如果用了-M,就是对组列表的覆盖。

 -M需要首次使用,后面不能再次使用。

 首次使用了-M后,再次添加用户需要使用-a
[root@localhost ~]# tail -5 /etc/passwd		#查看/etc/passwd末尾五行
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
lisi:x:1001:1001::/opt/lisi:/bin/bash	    #现在和只有一个普通用户lisi
[root@localhost ~]# useradd zhangsan		#另外创建zhangsan用户
[root@localhost ~]# tail -5 /etc/passwd		#查看/etc/passwd是否更新
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
lisi:x:1001:1001::/opt/lisi:/bin/bash		#lisi账号信息
zhangsan:x:1002:1002::/home/zhangsan:/bin/bash		#zhangsan账号信息
[root@localhost ~]# echo "111111" |passwd --stdin zhangsan		#免交互设置张三账号
密码为111111
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# useradd wangwu		#再创建一个wangwu账号
正在创建信箱文件: 文件已存在
[root@localhost ~]# tail -5 /etc/passwd		#查看/etc/passwd是否更新
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
lisi:x:1001:1001::/opt/lisi:/bin/bash			#lisi账号信息
zhangsan:x:1002:1002::/home/zhangsan:/bin/bash		#zhangsan账号信息
wangwu:x:1003:1003::/home/wangwu:/bin/bash			#wangwu账号信息
[root@localhost ~]# groupadd caiwu			#创建组,名字叫caiwu	groupadd
[root@localhost ~]# tail -5 /etc/group		#查看/etc/group 组文件
tcpdump:x:72:	
lisi:x:1001:			#lisi的基本组
zhangsan:x:1002:		#zhangsan的基本组
wangwu:x:1003:		    #wangwu的基本组
caiwu:x:1004:			#新建的公有组
[root@localhost ~]# gpasswd -a zhangsan caiwu	#把一个zhangsan用户添加到caiwu组中
正在将用户“zhangsan”加入到“caiwu”组中
[root@localhost ~]# id zhangsan		#id 查看zhangsanUID,GID信息
uid=1002(zhangsan) gid=1002(zhangsan) 组=1002(zhangsan),1004(caiwu)		
#这里显示组内多了一个1004(caiwu)
[root@localhost ~]# tail -5 /etc/group	#相应的,也去查看一下/etc/group组文件的状态
tcpdump:x:72:
lisi:x:1001:
zhangsan:x:1002:
wangwu:x:1003:
caiwu:x:1004:zhangsan		#后面多了一个用户,就是刚才添加的zhangsan
[root@localhost ~]# gpasswd -M lisi,wangwu caiwu		#用gpasswd -M 命令添加多个
用户(用户之间用,隔开)到caiwu组中
[root@localhost ~]# id lisi		#查看lisi的id信息
uid=1001(lisi) gid=1001(lisi) 组=1001(lisi),1004(caiwu)		#多了一个caiwu组
[root@localhost ~]# id wangwu		#查看wangwuid信息
uid=1003(wangwu) gid=1003(wangwu) 组=1003(wangwu),1004(caiwu)		#多了一个caiwu组
[root@localhost ~]# id zhangsan	#此时去查看zhangsan,zhangsan之前就已经被添加到caiwu组中
uid=1002(zhangsan) gid=1002(zhangsan) 组=1002(zhangsan)			#发现消失了
[root@localhost ~]# tail -5 /etc/group		#此时查看/etc/group组文件信息,后五行
tcpdump:x:72:
lisi:x:1001:
zhangsan:x:1002:
wangwu:x:1003:
caiwu:x:1004:lisi,wangwu	
#caiwu组后面的成员变成用M命令添加的lisi和wangwu,之前添加的lisi不见了
[root@localhost ~]# gpasswd -M lisi caiwu		#用gpasswd -M去添加lisi到caiwu组
[root@localhost ~]# tail -5 /etc/group		#查看/etc/group组文件信息
tcpdump:x:72:
lisi:x:1001:
zhangsan:x:1002:
wangwu:x:1003:
caiwu:x:1004:lisi		#此时之前的zhangsan,wangwu不见,只有最新添加的lisi
[root@localhost ~]# gpasswd -a wangwu caiwu		
#用gpasswd -a 一个一个添加用户到caiwu组,此时添加wangwu
正在将用户“wangwu”加入到“caiwu”组中
[root@localhost ~]# gpasswd -a zhangsan caiwu  #用gpasswd -a 添加zhangsan到caiwu组
正在将用户“zhangsan”加入到“caiwu”组中
[root@localhost ~]# tail -5 /etc/group		#查看/etc/group组文件信息
tcpdump:x:72:
lisi:x:1001:
zhangsan:x:1002:
wangwu:x:1003:
caiwu:x:1004:lisi,wangwu,zhangsan		#没有把之前的lisi覆盖掉
[root@localhost ~]# gpasswd -d lisi caiwu	#gpasswd -d 把lisi用户从caiwu组中三处
正在将用户“lisi”从“caiwu”组中删除
[root@localhost ~]# tail -5 /etc/group			#查看组文件信息是否更新
tcpdump:x:72:
lisi:x:1001:
zhangsan:x:1002:
wangwu:x:1003:
caiwu:x:1004:wangwu,zhangsan		#lisi已经被删除掉
2.11: groupdel命令–删除组账号
使用命令基本格式 

groupdel 组账号名 

例如 [root@33 ~]# groupdel  market
三:查询账号信息
3.1:groups命令

查询用户所属的组

groups 【用户名】
3.2:id命令

查询用户身份标识

id 【用户名】
3.3:finger

查询用户账户的详细信息

finger 【用户名】
3.4:w、who、users命令

查询已登录到主机的用户信息

w who users

3.5 :lastb

查询历史用户登录记录

lastb
[root@lpf ~]# who              #查询已登录主机的历史用户登录时间
root     pts/0        2020-06-14 13:43 (20.0.0.1)
[root@lpf ~]# w                #查询用户登录信息
 14:40:15 up 57 min,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    20.0.0.1         13:43    7.00s  0.25s  0.07s w
[root@lpf ~]# users
root
[root@lpf ~]# lastb             #查询尝试登录用户信息
tom      pts/0                         Sun Jun 14 11:19 - 11:19  (00:00)    
lpf      :0           :0               Thu Jun 11 13:24 - 13:24  (00:00)    
lpf      :0           :0               Thu Jun 11 13:24 - 13:24  (00:00)    
root     pts/1                         Tue Jun  9 16:20 - 16:20  (00:00)    

btmp begins Tue Jun  9 16:20:29 2020
四:查看目录或文件的属性
4.1:文件/目录的权限和归属

mark

文件类型文件下,自己也包含一个子文件,大小,日期,类型

-rw-r--r--.	   1     root	 root		513		11月		5	2016  updatedb.conf

1.- 文件类型(数据文件)
普通文件(-): 是记录在存储介质上的ASCII或二进制流。
目录文件(d): 是包含若干个文件和子目录的文件。
设备文件(b,c): 代表连接在系统上的物理设备
字符设备©,又叫raw设备:读写与存储之间没有任何缓冲,一次读写1byte。如磁带
块设备(b):读写与存储之间有缓冲,一次读写一个block。如终端或磁盘设备。
符号链接(l) 是指向另一个文件的文件。

2.rw- r-- r-- 三个一组,分别代表各个权限
rw- 属主权限,可读可写,r代表读,w代表写,后面的x代表执行,没有相应的权限就在相应的位置用-代替
r-- 属组权限,代表可读,不可写,不可执行
r-- 其他用户(other)权限,代表只读,即可读,不可写,不可执行
第一个root代表属主
第二个root代表属组
513代表容量大小,默认单位为字节
11月 5 2016 代表创建时间
即:
首字符表示文件类型(-数据文件)d 目录 l链接文件 c 字符设备文件(控制输入输出) b块设备文件(控制存储)

权限,三个一组,分为三块,分别是属主,属组,所有人

头一块代表属主权限 最多的是rwx

第二块是属组权限 rw- 能读能写不能执行 r-x 能都能写不能执行

第三块r-- 所有人权限, other 其他 r-- 只读权限

1 子文件,自己

root 属主

root 属组

513 大小 单位:字节

11yue 5 2016 创建时间

这一条目整体叫做元信息

五:查看目录或文件的权限

mark

数据文件最高权限666

目录最高权限777

默认创建755或者644或者700.600.

5.1: 设置文件和目录的权限chmod

mark

六:查看目录或文件的归属
6.1: 设置文件和目录的归属chown

mark

[root@lpf ~]# cd /opt
[root@lpf opt]# ls
123.txt  httpd-2.4.25  httpd-2.4.25.tar.gz  opt  rh
[root@lpf opt]# touch demo01.txt
[root@lpf opt]# ls -l
-rw-r--r--.  1 root root        0 6月  14 15:45 demo01.txt     #创建文件权限默认644
[root@lpf opt]# mkdir test
[root@lpf opt]# ls -l
-rw-r--r--.  1 root root        0 6月  14 15:45 demo01.txt
drwxr-xr-x.  2 root root        6 6月  14 15:53 test   #创建目录默认权限755
[root@lpf opt]# chmod 600 demo01.txt                   #修改属性为600
[root@lpf opt]# su tom
[tom@lpf opt]$ cat demo01.txt
cat: demo01.txt: 权限不够

[tom@lpf opt]$ su root
密码:
[root@lpf opt]# ll
-rw-------.  1 root root        0 6月  14 15:45 demo01.txt
drwxr-xr-x.  2 root root        6 6月  14 15:53 test
[root@lpf opt]# mv demo01.txt test
[root@lpf opt]# ls -l
drwxr-xr-x.  2 root root       24 6月  14 15:56 test
[root@lpf opt]# ls -l test
总用量 0
-rw-------. 1 root root 0 6月  14 15:45 demo01.txt
[root@lpf opt]# chmod 744 test/
[root@lpf opt]# ls -l
drwxr--r--.  2 root root       24 6月  14 15:56 test
[root@lpf opt]# su tom
[tom@lpf opt]$ cd test
bash: cd: test: 权限不够                      #目录的读权限只能看目录下文件的属性
[tom@lpf opt]$ su root
密码:
[root@lpf opt]# chown tom test
[root@lpf opt]# ls -l
drwxr--r--.  2 tom  root       24 6月  14 15:56 test
[root@lpf opt]# chown :tom test
[root@lpf opt]# ll
drwxr--r--.  2 tom  tom        24 6月  14 15:56 test
[root@lpf opt]# su tom
[tom@lpf opt]$ cd test
[tom@lpf test]$ ll
总用量 0
-rw-------. 1 root root 0 6月  14 15:45 demo01.txt
[tom@lpf test]$ cat demo01.txt
cat: demo01.txt: 权限不够
6.2 文件权限目录权限小结:

​ 文件权限:(更多关注一定要有read权限)

​ read 读文件内容的能力 (有了读文件block能力)

​ write 写文件内容的能力(有了读文件block能力) 重命名文件???

​ execute 执行文件的能力(脚本文件)

​ 补充: 文件是否可以编辑查看,和上一级或上n级目录有关

​ 读取文件数据原理 / oldboy/ oldboy01/ oldboy.txt

​ 目录权限:(更多关注一定要有x执行权限)

​ read 读取目录下文件属性信息

​ write 可以在目录中创建或删除数据

​ execute 可以切换进入到目录中

6.3 权限掩码umask
umask作用
控制新建的文件或目录的权限
默认权限去除umask的权限就为新建的文件或者目录的权限

umask的分数指的是“该默认值需要减掉的权限,”因此,如果执行“umask 022”,代表group和other被拿掉了权限“2”,也就是被拿掉了写的权限。

如果执行命令“umask 000”,代表文件的默认权限是“777”

-R 递归修改指定目录下所有文件,子目录的归属

如何修改Umask值呢?
1、临时修改 umask 066 (这个066根据的根据的需求定,可以理解成反子网掩码,这个是临时的)
2、永久修改 vi /etc/bashrc 最后一样插入umask 066 (这个是永久生效的)
[root@localhost tmp]# vim /etc/profile

两个文件的内容是一样的
搜索umask,找到如下代码,不算第一位的特殊权限

if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then

	umask 002	###表示uid大于等于199的默认umask值,表示普通用户

else
    umask 022	####表示uid小于199的默认umask值,表示root

修改后需要重新读取一下

/etc/bashrc或/etc/profile
[root@lewis ~]# source /etc/profile
[root@lewis ~]# source /etc/bashrc

常用的是700 755 最大权限是777
默认文件夹 755
默认文件 644

[root@lpf opt]# umask 066
[root@lpf opt]# touch 111.txt
[root@lpf opt]# ls -l
-rw-------.  1 root root        0 6月  14 16:57 111.txt             #666 - 066 = 600
[root@lpf opt]# mkdir 111
[root@lpf opt]# ls -l
drwx--x--x.  2 root root        6 6月  14 16:58 111          #由默认的755改成711
-rw-------.  1 root root        0 6月  14 16:57 111.txt

unmask 002 ###表示uid大于等于199的默认umask值,表示普通用户

else
umask 022 ####表示uid小于199的默认umask值,表示root

修改后需要重新读取一下

/etc/bashrc或/etc/profile
[root@lewis ~]# source /etc/profile
[root@lewis ~]# source /etc/bashrc

常用的是700 755 最大权限是777
默认文件夹 755
默认文件 644

[root@lpf opt]# umask 066
[root@lpf opt]# touch 111.txt
[root@lpf opt]# ls -l
-rw-------.  1 root root        0 6月  14 16:57 111.txt             #666 - 066 = 600
[root@lpf opt]# mkdir 111
[root@lpf opt]# ls -l
drwx--x--x.  2 root root        6 6月  14 16:58 111          #由默认的755改成711
-rw-------.  1 root root        0 6月  14 16:57 111.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值