• Linux4


    用户和组

    概述

    基于账号的访问控制:

    系统用户: 1.登陆操作系统 2.方便做权限的不同设置
    :方便管理众多的用户,方便对用户进行分类
    唯一标识:UID,GID
    管理员 root 的 UID 为 0

    组的分类:基本组,附加组(从属组)

    基本组:Linux 自己创建的组,与用户同名,系统自动将用户加入
    附加组(从属组):管理员自建创建,管理员将用户加入
    Linux 一个用户必须至少属于一个组

    用户账号创建

    用户账号

    • 用户账号创建
      用户基本信息存放在 /etc/passwd 文件,每个用户记录一行,以:分割为 7 字段
    grep zhangsan /etc/passwd
    zhangsan:x:1004:1004::/home/zhangsan:/bin/bash
    
    • 1
    • 2

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

    添加用户

    • 使用 useradd 命令
      – useradd [选项]… 用户名
      – groupadd 组名 #新建用户组
    常用命令选项

    – -u 用户 id、-d 家目录路径、-s 登录解释器、-G 附加组 -g 基本组

    useradd hh
    grep hh/etc/passwd
    id hh
    uid=1001(hh) gid=1001(hh)=1001(hh)
    
    • 1
    • 2
    • 3
    • 4
    • -u 指定用户 UID 创建
      useradd -u 1100 hh
    • -d 指定用户家目录
      useradd -d /opt/hh hh
    • -s 登录解释器
      /sbin/nologin:禁止用户登陆系统
      useradd -s /sbin/nologin hh
    • -G 附加组
      用法:useradd – G 组名 用户名
    groupadd tarena//新增tarena组
    useradd -G tarena hh2 #创建 hh2用户并添加到 tarena 组里面
    
    • 1
    • 2
    • -g 基本组
    useradd -g users -G adm,root admin
    id admin
    uid=1235(admin) gid=100(users)=100(users),4(adm),0(root)
    
    • 1
    • 2
    • 3
    • usermod -aG 用户组 用户名,将现有用户加入用户组
    usermod -aG tarena hh # 将 hh 用户添加到 tarena 组里
    id hh
    uid=1001(hh) gid=1001(hh)=1001(hh),1002(hhh)
    
    • 1
    • 2
    • 3

    用户密码设置

    设置登录密码

    • 交互式
      管理员给普通用户nsd01设置密码:
      passwd nsd01
    • 普通用户自己给自己更改密码
      passwd
    • 非交互式设置密码:
      echo 123 | passwd --stdin nsd01
    • 清空用户登录密码
      passwd -d 用户名

    解析用户账号文件

    用户密码信息存放在 /etc/shadow 文件

    grep root /etc/shadow
    root:$6$UiGI4Tc2$htsXYn5cJnOqv3P1VLcUSgfjDu2pL5yiJBuua6foZAHdwqeuLHfYUfS/vBn27Wjvoe
    l8EJgtdsMjyquqvKAmf1:16261:0:99999:7:::
    
    • 1
    • 2
    • 3

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

    用户删改查

    修改用户的属性

    • 使用 usermod 命令
      – usermod [选项]… 用户名
    常用命令选项

    – -u 用户 id、-d 家目录路径、-s 登录 Shell、-G 附加组(重置附加组)

    • 修改 uid 以及登录的 shell
      usermod -u 1500 -s /sbin/nologin nsd08
    • 修改家目录,只是修改了字段的值,opt 下面并没有 stu08 这个目录
      usermod -d /opt/stu08 nsd08
    • 重置附加组,没有则添加,有则重置
      usermod -G tarena nsd08

    使用 userdel 命令

    – userdel [-r] 用户名
    -r:连用户家目录一并删除

    用户初始配置文件

    配置文件来源

    /etc/skel/目录是用来存放新用户配置文件的目录,当我们添加新用户的时候,这个目录下的所有文件会自动被复制到新添加的用户的家目录下。
    通过修改、添加、删除/etc/skel 目录下的文件,我们可为新创建的用户提供统一的、标准的、初始化用户环境。
    ~/.bash profile:每次登录时执行
    ~/.bashrc:每次进入新的Bash环境时执行
    ~/.bash logout:每次退出登录时执行
    全局配置文件:/etc/bashrc、./etc/profile

    设置别名

    vim /root/.bashrc
    alias hn='hostname'
    hn #失败
    bash: hn: 未找到命令...
    
    • 1
    • 2
    • 3
    • 4

    需要新开启一个终端

    hn #验证定义别名是否生效
    localhost.localdomain
    
    • 1
    • 2

    注:.bashrc 只会对自己的用户生效

    [root@localhost ~]# su - nsd10
    [nsd10@localhost ~]$ hn #失败,.bashrc 只会对自己的用户生效
    bash: hn: 未找到命令...
    
    • 1
    • 2
    • 3

    定义永久别名

    全局生效,配置文件/etc/bashrc

    [root@localhost ~]# vim /etc/bashrc
    alias xixi='echo xixi'
    新开启一个终端测试
    [root@localhost ~]# xixi
    xixi
    
    • 1
    • 2
    • 3
    • 4
    • 5

    组账号管理

    添加组

    使用 groupadd 命令

    – groupadd [-g 组 ID] 组名
    [root@localhost ~]# groupadd adminuser
    [root@localhost ~]# grep adminuser /etc/group
    adminuser : x : 1505:
    组名字 :密码占位符:组 GID:组成员列表(组成员可以是 0-N)

    • 组基本信息存放在 /etc/group 文件
    • 管理组成员
      组成员信息存放在 /etc/gshadow 文件
    使用 gpasswd 命令

    添加:
    – gpasswd -a 用户名 组名
    删除:
    – gpasswd -d 用户名 组名

     gpasswd -a dc adminuser
     grep adminuser /etc/group
     gpasswd -d dc adminuser
     grep adminuser /etc/group
    
    • 1
    • 2
    • 3
    • 4

    删除组

    使用 groupdel 命令

    – groupdel 组名
    不能删除基本组

    用户权限

    一、基本权限和归属

    • 访问方式(权限)
      读取:允许查看内容-read r
      写入:允许修改内容-write w
      可执行:允许运行和切换-execute x
      Permission denied:权限不足

    • 对于文本文件:
      r 读取权限:cat less head tail
      w 写入权限:vim > >>
      x 可执行权限: Shell 脚本编写时可以赋予

    • 权限适用对象(归属)
      所有者(user u):拥有此文件/目录的用户。
      所属组(group g):拥有此文件/目录的组。
      其他用户(other o):除所有者、所属组以外的用户。

    • 解析文件/目录权限

    使用 ls -l 命令
     ls -ld 文件或目录...
    
    • 1
    • 2

    以 - 开头: 文本文件
    以 d 开头:目录
    以 l 开头: 快捷方式

    • 目录的 r 权限:能够 ls 浏览此目录内容
      目录的 w 权限:能够执行 rm/mv/cp/mkdir/touch/等更改目录内容的操作
      目录的 x 权限:能够 cd 切换到此目录

    二、修改权限

    设置基本权限

    • 使用 chmod 命令
      chmod [-R] 归属关系+ - =权限类别 文档…
      chmod [ugo] [+ - =] [rwx]文件…
      chmod [nnn]文件…
    #所有者取消 w 的权限
    [root@localhost ~]# chmod u-w /nsd01
    #所属组只读权限
    [root@localhost ~]# chmod g=r /nsd01
    #其他人没有任何权限
    [root@localhost ~]# chmod o=--- /nsd01
    #同时设置权限
    [root@localhost ~]# chmod u=rwx,o=rx /nsd01
    [root@localhost ~]# ls -ld /nsd01
    [root@localhost ~]# chmod u=rwx,o=rx,o=rx /nsd01
    [root@localhost ~]# chmod ugo=rwx /nsd01
    [root@localhost ~]# ls -ld /nsd01
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • -R 递归修改权限
    递归修改权限,目录本身包括此目录里面会发生变化
     chmod -R o=--- /opt/aa/
    
    • 1
    • 2
    • 注:修改权限的是目录里面的内容,目录本身权限没有被修改
      如果想要对目录本身有修改的权限,找此目录的父目录进行修改即可

    • 权限位的8进制数表示
      r、w、x分别对应4、2、1,对3组分别求和
      7:rwx 6:rw- 5:r-x 4:r-- 3:-wx 2:-w- 1:–x 0:—

    #数字的形式修改权限:
    [root@localhost ~]# chmod 750 /nsd03
    [root@localhost ~]# chmod 700 /nsd03
    
    • 1
    • 2
    • 3

    三、修改归属

    • 设置归属关系
      使用 chown 命令,-R 递归设置
      – chown [-R] 属主 文档…
      – chown [-R] :属组 文档…
      – chown [-R] 属主:属组 文档…
    [root@localhost ~]# chown root:zhangsan /nsd04/ #同时修改所有者(属主)和所属组(属组)
    [root@localhost ~]# chown root/nsd04/ #仅修改所有者
    [root@localhost ~]# chown :zhangsan/nsd04/ #仅修改所属组
    [root@localhost ~]# chown -R root /opt/aa #递归修改所有者
    
    • 1
    • 2
    • 3
    • 4
    • 判断用户身份 所有者>所属组>其他人 匹配即停止
      去掉所有者zhangsan的执行权限,zhangsan 添加到 stugrp 组里面,虽然组里面有执行权限,但是依
      然不能 cd
    [root@localhost ~]# chmod u-x /nsd05/
    [root@localhost ~]# gpasswd -a zhangsan stugrp
    [root@localhost ~]# su - zhangsan
    [zhangsan@localhost ~]$ cd /nsd05/
    -bash: cd: /nsd05/: 权限不够
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 查看相应身份的权限
      – umask
      目录的权限默认是 755,文件的权限默认 644,一般文件默认不给 x 执行权限
    [root@localhost ~]# umask
    0022 #第一个 0 为附加权限
    [root@localhost ~]# umask -S
    u=rwx,g=rx,o=rx
    
    • 1
    • 2
    • 3
    • 4
    • 创建新文件夹时,直接设置权限,指定权限 -m 选项
      [root@localhost ~]# mkdir -m 750 /nsd06

    四、特殊权限(附件权限)

    SGID权限

    • 附加在属组的 x 位上
    – 属组的权限标识会变为 s(无执行权限显示大 S,有执行权限显示小 s)
    – 适用于目录,Set GID 可以使目录下新增的文档自动设置与父目录相同的属组
    当一个设置了SGID位的可执行文件运行时,该文件将具有所属组的特权,任意存取整个组所能使用的系统资源。若一个目录设置了SGID,则所有被复制到这个目录下的文件,其所属的组都会被重设为和这个目录一样,除非在复制文件时加上-p(preserve,保留文件属性)的参数,才能保留原来所属的群组设置。

    Sticky Bit 粘滞位(若赋予其他人执行权限会覆盖 t 权限)

    • 附加在其他人的 x 位上
    – 占用其他人(Other)的x位
    – 显示为t或T,取决于其他人是否有x权限
    – 适用于开放 w 权限的目录,可以阻止用户滥用 w 写入权限(禁止操作别人的文档)
    – 在设置了粘滞位的文件夹下,即使用户有写入权限,也不能删除或改名其他用户文档
    对一个文件设置了sticky-bit之后,尽管其他用户有写权限,也必须由属主执行删除、移动等操作。对一个目录设置了sticky-bit之后,存放在该目录的文件仅准许其属主执行删除、移动等操作

    五、Acl 策略简介

    acl 策略的作用

    • 文档归属的局限性
      – 任何人只属于三种角色:属主、属组、其他人
      – 无法实现更精细的控制
    • acl 访问策略
      – 能够对个别用户、个别组设置独立的权限
      – 大多数挂载的 EXT3/4、XFS 文件系统默认已支持
    [root@localhost ~]# mkdir /NB
    [root@localhost ~]# echo 100 > /NB/rmb.txt
    [root@localhost ~]# chmod o=--- /NB
    [root@localhost ~]# groupadd caiwu
    [root@localhost ~]# chown :caiwu /NB
    [root@localhost ~]# chmod g+w /NB
    [root@localhost ~]# setfacl -m u:dc:rx /NB/ 		###设置权限
    [root@localhost ~]# getfacl /NB/
    getfacl: Removing leading '/' from absolute path names
    # file: NB/
    # owner: root
    # group: caiwu
    user::rwx
    user:dc:r-x                         **
    group::rwx
    mask::rwx
    other::---
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    六、ACL 策略管理

    ACL 访问控制列表

    设置 acl 访问控制策略
    • 使用 getfacl、setfacl 命令
    – getfacl 文档…
    – setfacl [-R] -m u:用户名:权限类别 文档…
    – setfacl [-R] -m g:组名:权限类别 文档…
    – setfacl [-R] -x u:用户名 文档… #删除指定的 ACL 策略
    – setfacl [-R] -b 文档… #删除所有 ACL 策略

    • 删除指定策略:
      [root@localhost ~]# setfacl -x u:dc /nsd09/
    • 删除全部策略:
      [root@localhost ~]# setfacl -b /nsd09/
      [root@localhost ~]# getfacl /nsd09/
    • 递归设置权限®:
      [root@localhost ~]# setfacl -Rm u:dc:rx /opt/aa/
    • 设置拒绝的权限
      [root@localhost ~]# setfacl -m u:zhangsan:— /nsd09

    了解

    Set UID

    • 附加在属主的 x 位上
    – 属主的权限标识会变为 s
    – 适用于可执行文件,Set UID 可以让使用者具有文件属主的身份及部分权限
    当其他用户执行带 SUID 标记的程序时,具有此程序属主的身份和相应的权限
    – 传递所有者身份
    当一个设置了SUID位的可执行文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权。如果所有者是root的话,那么执行人就有超级用户的特权了。这时该位将变成一个安全漏洞,因此不要轻易设置该位。

    [root@localhost ~]# cp /usr/bin/mkdir /usr/bin/hahadir
    [root@localhost ~]# chmod u+s /usr/bin/hahadir #添加 s 权限
    测试:
    [root@localhost ~]# su - lisi
    [lisi@localhost ~]$ /usr/bin/mkdir test01          #以 test01 代替/usr/bin/mkdir 
    [lisi@localhost ~]$ ls -ld test01/ #所有者不发生变化
    drwxrwxr-x. 2 lisi lisi 6 6 月 28 15:57 /test01/
    [lisi@localhost ~]$ /usr/bin/hahadir test02
    [lisi@localhost ~]$ ls -ld test02 #所有者发生变化
    drwxrwxr-x. 2 root lisi 6 6 月 28 15:57 /test02
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    AI入门指南:探索人工智能的基础原理和实际应用
    BUUCTF——Basic题解
    第四十一篇 指令中的VNode
    SpringBoot配置kafka
    初识Java(二)
    【LeetCode刷题笔记】一维数组
    vue项目调用多个不同的ip接口
    MySQL学习笔记8——游标
    【Linux学习笔记】git工具
    【Flink metric(1)】Flink指标系统的系统性知识:获取metric以及注册自己的metric
  • 原文地址:https://blog.csdn.net/rc4gyyc/article/details/134178907