• 用户与权限linux篇


    用户与组概述

    Linux 系统中,用户和权限是管理和控制文件系统访问的重要组成部分。下面是关于 Linux 用户和权限的基本概念:

    1. 用户(User): 用户是使用 Linux 系统的个体或实体。每个用户都有一个唯一的用户名和用户 ID(UID),用于标识用户。

    2. 用户组(Group): 用户组是一组相关用户的集合。每个用户可以属于一个或多个用户组。用户组有一个唯一的组名和组 ID(GID),用于标识组。

    3. 权限(Permissions): 每个文件和目录都有与之关联的权限设置,用于定义对其进行读取、写入和执行的访问权限。权限由三个组(所有者、所属组和其他人)的三种类型(读取、写入和执行)组合来表示。

    4. 所有者(Owner): 文件或目录的所有者是创建该文件或目录的用户。所有者对文件或目录具有特定的权限。

    5. 所属组(Group): 文件或目录可以关联一个所属组,该组包含多个用户。所属组的成员具有与组关联的一组权限。

    6. 其他人(Others): 其他人指的是既不是文件或目录所有者,也不属于所属组的用户。其他人有自己的一组权限。

    7. 权限表示: 权限用三位字符(r、w、x)表示,分别表示读取(r)、写入(w)和执行(x)的能力。每个权限组合为九位字符,依次表示所有者、所属组和其他人的权限。例如,-rw-r--r-- 表示所有者有读写权限,所属组和其他人只有读取权限。

    8. 修改权限: 用户可以使用 chmod 命令修改文件或目录的权限。此命令允许用户添加或删除某个用户组的权限,或者指定具体的权限设置。

    Linux 用户和权限的管理使得系统管理员可以有效地限制对敏感文件和目录的访问,并确保系统的安全性。

    用户作用:

    • 登陆操作系统
    • 方便做权限的不同设置
    • 用户的唯一标识:UID
    • LINUX系统默认管理员为root,管理员root的UID为0

    组的作用

    • 方便管理众多的用户,方便对用户进行分类
    • 组的唯一标识:GID
    • 组的分类:基本组,附加组(从属组)
      • 基本组:Linux自己创建的组,与用户同名,系统自动将用户加入
      • 附加组(从属组):管理员自建创建,管理员将用户加入
    • Linux一个用户必须至少属于一个组
      • 例如:创建一个用户zhangsan,默认会创建与用户同名的组,并把用户加入到这个组里面,这个组是zhangsan用户的基本组
        [root@som ~]# useradd	zhangsan					#创建zhangsan用户
    
    • 1

    用户账号创建

    用户基本信息存放在 /etc/passwd 文件,每个用户记录一行,以:分割为7字段,含义如下

    用户名:密码占位符:用户UID:基本组GID:描述信息:家目录(宿主目录):解释器

        [root@som ~]# wc -l /etc/passwd					#统计当前系统中的用户数量
        [root@som ~]# grep zhangsan /etc/passwd			#从/etc/passwd文件中过滤zhangsan的信息
        zhangsan:x:1004:1004::/home/zhangsan:/bin/bash
    
    • 1
    • 2
    • 3

    查看用户-查

    • 使用id命令
    • 格式:id 用户名
    • 作用:判断该用户是否存在
        [root@som ~]# id zhangsan							#判断用户是否存在
        uid=1002(zhangsan) gid=1002(zhangsan)=1002(zhangsan)
        [root@som ~]# id dachui								#判断用户是否存在
        id: “dachui”:无此用户
    
    • 1
    • 2
    • 3
    • 4

    创建用户-增

    • 使用useradd命令
    • 格式:useradd [选项] 用户名
    • 常用命令选项
      • -u 指定用户id
      • -d 指定家目录路径
      • -s 指定登录解释器
      • -G 指定用户附加组
        [root@som ~]# useradd som01							#创建用户som01
        [root@som ~]# grep som01 /etc/passwd				#查看/etc/passwd是否多出了用户som01
        [root@som ~]# id som01								#查看用户som01是否存在
        uid=1005(som01) gid=1005(som01)=1005(som01)
        [root@som ~]# useradd som02							#创建用户som02
        [root@som ~]# id som02								#查看用户som02是否存在
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    指定用户UID创建用户

        [root@som ~]# useradd -u 1100 som03					#创建UID为1100的用户som03
        [root@som ~]# id som03								#查看验证	
        uid=1100(som03) gid=1100(som03)=1100(som03)
    
    • 1
    • 2
    • 3

    指定用户家目录创建目录

        [root@som ~]# useradd -d /opt/som04 som04		#创建som04用户,其家目录为/opt/som04
        [root@som ~]# grep som04  /etc/passwd			#查看验证是否多出来了som04用户
        som04:x:1101:1101::/opt/som04:/bin/bash				
        [root@som ~]# ls /opt/							#查看som04用户家目录
    
    • 1
    • 2
    • 3
    • 4

    指定用户解释器

    • /sbin/nologin,如果用户的解释器为/sbin/nologin,那么该用户无法登录系统
        [root@som ~]# useradd -s /sbin/nologin som05	#创建用户som05并指定解释器
        [root@som ~]# grep som05 /etc/passwd			#查看验证
        som05:x:1103:1103::/home/som05:/sbin/nologin
    
    • 1
    • 2
    • 3

    指定用户附加组

    • groupadd 组名,可以专门创建一个组
        [root@som ~]# groupadd tarena				#创建组tarena
        [root@som ~]# useradd -G tarena som06		#创建som06用户并添加到tarena组里面
        [root@som ~]# id som06						#验证
        uid=1104(som06) gid=1105(som06)=1105(som06),1104(tarena)
    
    • 1
    • 2
    • 3
    • 4

    指定基本组

        [root@som ~]# useradd -g tarena som07		#创建som06用户指定基本组为tarena
        [root@som ~]# id som07						#验证
        uid=1104(som07) gid=1105(tarena)=1104(tarena)
    
    • 1
    • 2
    • 3

    修改用户属性-改

    • 使用usermod命令
    • 只能操作已存在的用户
    • 格式:usermod [选项] 用户
      • -u 指定用户id
      • -d 指定家目录路径
      • -s 指定登录解释器
      • -G 指定用户附加组(重置附加组)
        [root@som ~]# useradd alex					#创建用户alex
        [root@som ~]# usermod -u 1200 alex			#修改用户alex的UID为1200
    
        [root@som ~]# usermod -s /bin/sh alex		#修改用户alex的解释器为/bin/sh
        [root@som ~]# grep alex  /etc/passwd		#查看用户alex的信息
    
        [root@som ~]# groupadd mygroup 				#添加mygroup组
        [root@som ~]# usermod -G tarena alex		#将alex附加组设置为tarena
        [root@som ~]# id alex 						#查看验证
        uid=1004(alex) gid=1004(alex)=1004(alex),1003(tarena)
        [root@som ~]# usermod -G mygroup alex		#将alex附加组设置为mygroup
        [root@som ~]# id  alex 						#查看验证,-G其实是重置附加组
        uid=1004(alex) gid=1004(alex)=1004(alex),1005(mygroup)
    
        [root@som ~]# grep alex /etc/passwd		#查看当前alex的家目录
        alex:x:1004:1004::/home/alex:/bin/bash		
        [root@som ~]# usermod -d /opt/alex alex	#修改alex用户家目录为/opt/alex 
        [root@som ~]# grep alex /etc/passwd		#查看验证,alex用户家目录已经修改为/opt/alex
        alex:x:1004:1004::/opt/alex:/bin/bash
        [root@som ~]# ls /opt/				#但是/opt/下没有alex家目录,因为usermod -d不会创建目录
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    删除用户-删

    • 删除用户:userdel
      • -r:连同用户家目录、信箱一并删除
        [root@som ~]# userdel  som03				#删除用户som03,家目录、信箱不删除
        [root@som ~]# userdel -r som04				#删除用户som04,家目录、信箱一并删除
    
    • 1
    • 2

    用户密码管理

    • 记录用户密码信息的文件:/etc/shadow
    • 文件格式如下

    用户名:加密密码:从1970年1月1日到最近一次修改密码时间:密码最短有效天数,默认为0:密码最长有效天数,默认99999:密码过期前警告天数,默认是7:密码过期后多少天禁用此账户:账号失效天数,默认是空:保留字段(未使用)

    交互式修改密码

    • 使用passwd命令修改密码
    • 格式:passwd 用户名
    • 只有root用户才能指定用户修改密码
    • passwd直接回车则代表为当前登录用户修改密码
    • 普通用户修改密码需要满足策略,root用户可以忽略密码策略
        [root@som ~]# passwd lisi						#修改lisi用户的密码
        更改用户 lisi 的密码 。
        新的 密码:										 #为了安全,输入密码不显示
        无效的密码: 密码少于 8 个字符
        重新输入新的 密码:								  #为了安全,输入密码不显示
        passwd:所有的身份验证令牌已经成功更新。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    非交互式修改密码

    • 格式:echo 密码 | passwd --stdin 用户名
        [root@som ~]# echo 123 | passwd --stdin zhangsan		#修改用户zhangsan用户密码为123
    
    • 1

    用户初始配置文件

    • 新建用户是,根据/etc/skel模板目录复制内容至用户家目录下
    • 主要的初始配置文件
      • ~/.bash_profile: 每次登录时执行
      • ~/.bashrc: 每次进入新的bash环境时执行
      • ~/.bash_logout:每次退出登录时执行
      • 全局配置文件:/etc/bashrc、/etc/profile

    root用户使用~/.bashrc文件永久定义别名

        [root@som ~]# vim ~/.bashrc
        ...
        alias hn='hostname'
        ...
    
    • 1
    • 2
    • 3
    • 4

    基本权限和归属

    基本权限的类别

    • 读取:允许查看内容-read r
    • 写入:允许修改内容-write w
    • 可执行:允许运行和切换-execute x

    常见报错提示:Permission denied :权限不足

    对于文本文件,拥有相应权限能做操作哪些命令(举例):

     r 读取权限:cat  less  head tail 
    
     w 写入权限:vim    >   >>
    
     x 可执行权限: Shell脚本编写时可以赋予
    
    • 1
    • 2
    • 3
    • 4
    • 5

    权限适用对象(归属)

    • 所有者:拥有此文件/目录的用户-user u
    • 所属组:拥有此文件/目录的组-group g
    • 其他用户:除所有者、所属组以外的用户-other o

    查看权限

    • 查看文件权限: ls -l 文件1 文件2

    • 查看目录权限: ls -ld 目录1 目录2 …

      以 - 开头: 文本文件

      以 d 开头:目录

      以 l 开头: 快捷方式

        [root@som ~]# ls -ld /etc/						#查看/etc/目录权限
        [root@som ~]# ls -l /etc/rc.local					#查看/etc/rc.local权限
        [root@som ~]# ls -l /etc/passwd					#查看/etc/passwd权限
    
    • 1
    • 2
    • 3

    修改权限

    设置基本权限

    • 使用 chmod 命令
    • 命令格式: chmod [-R] 归属关系±=权限类别 文档…
      • -R:递归修改
        [root@som ~]# mkdir /som01						#创建素材目录
        [root@som ~]# ls -ld /som01						#查看/som01目录权限
        drwxr-xr-x. 2 root root 6 217 12:54 /som01
    
    • 1
    • 2
    • 3

    取消/som01目录所有者的w权限

        [root@som ~]# chmod u-w /som01					#u-w权限
        [root@som ~]# ls -ld /som01						#查看权限
    
    • 1
    • 2

    /som01目录所有者怎加w权限

        [root@som ~]# chmod u+w /som01					#u+2权限
        [root@som ~]# ls -ld /som01						#查看权限
    
    • 1
    • 2

    修改/som01目录所属组为只读权限

        [root@som ~]# chmod g=r /som01					#g=r权限
        [root@som ~]# ls -ld /som01						#查看权限
    
    • 1
    • 2

    修改/som01目录其他人没有任何权限

        [root@som ~]# chmod o=--- /som01				#其他人取消所有权限
        [root@som ~]# ls -ld /som01						#查看权限
    
    • 1
    • 2

    同时设置权限

        [root@som ~]# chmod u=rwx,o=rx /som01			#所有者权限为rwx,其他人权限为rx
        [root@som ~]# ls -ld /som01						#查看权限
        [root@som ~]# chmod u=rwx,g=rx,o=rx /som01		#所有者权限为rwx,所属组/其他人权限为rx
        [root@som ~]# chmod ugo=rwx /som01				#所有者/所属组/其他人权限为rwx
        [root@som ~]# ls -ld /som01						#查看权限
    
    • 1
    • 2
    • 3
    • 4
    • 5

    -R递归修改权限

        [root@som ~]# mkdir -p /opt/aa/bb/cc			#递归创建/opt/aa/bb/cc
        [root@som ~]# ls -lR /opt/						#递归查看属性
    
    • 1
    • 2

    查看aa,bb,cc(目录其他人的权限都是rx)

        [root@som ~]# ls -ld /opt/aa/
        [root@som ~]# ls -ld /opt/aa/bb/
        [root@som ~]# ls -ld /opt/aa/bb/cc/
    
    • 1
    • 2
    • 3

    递归修改权限,目录本身包括此目录里面会发生变化

        [root@som ~]# chmod  -R o=--- /opt/aa/			#递归设置/opt/aa其他人没有任何权限
        [root@som ~]# ls -ld /opt/aa/					#查看验证
        [root@som ~]# ls -ld /opt/aa/bb/
        [root@som ~]# ls -ld /opt/aa/bb/cc/
    
    • 1
    • 2
    • 3
    • 4

    如何判断用户对某目录所具备怎样的权限

        [root@som ~]# chmod  g=rx,o=rx /som01/				#设置权限
        [root@som ~]# ls -ld /som01/						#查看权限
        [root@som ~]# useradd zhangsan						#创建zhangsan用户
        drwxr-xr-x. 2 root root 6 71 03:56 /som01/			
        [root@som ~]# id zhangsan							#判断用户归属关系
        uid=1004(zhangsan) gid=1004(zhangsan)=1004(zhangsan)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    实验不同用户写入文件:

        [root@som ~]# mkdir /som02							#创建/som02目录
        [root@som ~]# echo 123 > /som02/a.txt				#创建/som02/a.txt文件内容为123
    
    • 1
    • 2

    zhangsan用户测试

        [root@som ~]# su - zhangsan 						#切换用户
        [zhangsan@som ~]$ cat /som02/a.txt    				#可以查看
        123
        [zhangsan@som ~]$ echo haha > /som02/a.txt     		#写入haha失败
        -bash: /som02/a.txt: 权限不够
        [zhangsan@som ~]$ exit								#退回到root用户
        [root@som ~]# chmod  o+w /som02/a.txt           	#赋予w的权限
        [root@som ~]# su - zhangsan 						#切换用户zhangsan
        [zhangsan@som ~]$ echo haha >> /som02/a.txt       	#写入成功
        [zhangsan@som ~]$ cat /som02/a.txt					#可以验证
        123
        haha
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    实验不同用户操作目录:

        [root@som ~]# ls -ld /som02/						#查看权限
        drwxr-xr-x. 2 root root 19 628 13:22 /som02/		
        [root@som ~]# id zhangsan							#查看zhangsan用户归属
        uid=1004(zhangsan) gid=1004(zhangsan)=1004(zhangsan)
    
    • 1
    • 2
    • 3
    • 4

    zhangsan用户测试

        [root@som ~]# su - zhangsan 					#切换用户zhangsan
        [zhangsan@som ~]$ ls -l /som02/            		#可以查看
        [zhangsan@som ~]$ cd /som02               	 	#可以切换目录
        [zhangsan@som som02]$ exit
    
        [root@som ~]# chmod o-x /som02					#其他人取消x权限
        [root@som ~]# su - zhangsan 					#切换zhangsan用户	
        [zhangsan@som ~]$ cd /som02                		#切换失败
        -bash: cd: /som02: 权限不够
        [zhangsan@som ~]$ ls /som02                 		#查看虽然显示,但是也异常
        ls: 无法访问/som02/a.txt: 权限不够
        a.      txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在目录下写入内容,但是修改的是目录里面的内容,对目录本身没有修改权限:

        [root@som ~]# chmod o=rwx /som02
        [root@som ~]# su - zhangsan 
        [zhangsan@som ~]$ cd  /som02
        [zhangsan@som som02]$ touch zs.txt				#创建成功
        [zhangsan@som som02]$ mkdir zs					#创建成功
        [zhangsan@som som02]$ exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如果想要对目录本身有修改的权限,找此目录的父目录即可:

        [zhangsan@som som02]$ cd
        [zhangsan@som ~]$ mv /som02 /stu02				#修改失败
        mv: 无法将"/som02" 移动至"/stu02": 权限不够
        [root@som ~]# su - zhangsan 
        [root@som ~]# chmod o+w /          				#修改/的权限
        [root@som ~]# su - zhangsan 
        [zhangsan@som ~]$ mv /som02 /stu02				#修改成功
        [zhangsan@som ~]$ ls /
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    小结

    目录的 r 权限:能够 ls 浏览此目录内容

    目录的 w 权限:能够执行 rm/mv/cp/mkdir/touch/等更改目录内容的操作

    目录的 x 权限:能够 cd 切换到此目录

    权限位的8进制数表示

    7:rwx 6:rw- 5:r-x 4:r-- 3:-wx 2:-w- 1:–x 0:—

    数字的形式修改权限:

        [root@som ~]# mkdir /som03
        [root@som ~]# ls -ld /som03
    
        [root@som ~]# chmod  750 /som03
        [root@som ~]# ls -ld /som03
        [root@som ~]# chmod  700 /som03
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    修改归属

    设置归属关系

    • 使用 chown 命令,-R递归设置
      • chown [-R] 属主 文档…
      • chown [-R] :属组 文档…
      • chown [-R] 属主:属组 文档…

    同时修改所有者(属主)和所属组(属组)

        [root@som ~]# mkdir /ansible 				#创建/ansible
        [root@som ~]# ls -ld /ansible				#查看权限
        [root@som ~]# groupadd  stugrp				#创建组stugrp
        [root@som ~]# useradd dc					#创建dc用户
        [root@som ~]# chown dc:stugrp /ansible  	#修改/ansible目录的所有者为dc,所属组为stugrp
        [root@som ~]# ls -ld /ansible				#查看归属
    
        [root@som ~]# chown zhangsan /ansible     	#仅/ansible目录的修改所有者为zhangsan
        [root@som ~]# ls -ld /ansible				#查看归属
    
    只修改所属组
    
        [root@som ~]# chown :root /ansible/      	#仅修改所属组
        [root@som ~]# ls -ld /ansible				#查看归属
    
    递归修改归属关系
    
        [root@som ~]# chown -R dc /opt/aa         	#递归修改/opt/aa的所有者为dc
        [root@som ~]# ls -ld /opt/aa				#验证
        [root@som ~]# ls -ld /opt/aa/bb/
        [root@som ~]# ls -ld /opt/aa/bb/cc/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    Kafka的数据可靠与数据重复
    基于开源项目OCR做一个探究(chineseocr_lite)
    Go语言闭包概念(不建议使用)
    无需公网IP、简单3步,直连远程NAS实现高速访问
    经典论文-SqueezeNet论文及实践
    R语言、因子载荷矩阵
    uni-app集成uni-simple-router,报错:Uncaught ReferenceError: ROUTES is not defined
    //按层遍历二叉树,并收集结点
    组件切换之笨办法、动态组件(is属性、keep-alive)、插槽(不具名、具名)
    自增还是UUID,数据库主键的类型该如何选择?
  • 原文地址:https://blog.csdn.net/m0_72568513/article/details/133175229