用户、组和权限管理基础

时间:2022-10-10 18:55:00

用户、组和权限管理基础

前言:

开始系统的学习linux已经有三周时间,最近学习了用户、组和权限管理的相关基础知识。我所学的大纲将这三部分内容划到一个章节来学习,因为刚开始学linux所以接触到的都是一些基础性的东西。可是虽说是基础知识,但是这三部分和在一起讲内容还是蛮多的,老师上课用的PPT就有洋洋洒洒接近六十页,对于初学者来说一时间接收这么多知识还是有点难以消化的。听了老师的课以后,课下我又对这部分内容归纳整理了一下,发现这部分内容虽然多但是很多知识都是成块的,只要合理的去总结归纳其实学起来比不难。
我把这部分内容主要归纳成以下几个模块:

  1. 相关定义
  2. 配置文件模块:初步学习用户和组的相关知识,其实主要就是学习用户和用户组相关的配置文件,了解掌握了这些配置文件内容和作用基本上也就掌握了用户和用户组的知识。
  3. 命令模块:管理权限要用命令来下达,关于权限管理的主要命令我总结了14个,掌握了这些命令,权限管理对你来说就会比较容易理解了。
  4. 权限管理
  5. 默认权限
  6. 特殊权限
  7. ACL
    这样将知识拆开归纳学习就会让学习轻松很多,接下来就开看看我是怎么归纳的吧!

    一、相关定义

    安全3A:linux的安全模型:

    Authentication:确认当前用户身份(通过用户名配合密码)
    Authozation:授予权限
    Accouting|Audition:审计,记录监控

    用户:

    管理员:root , UID =0
    普通用户的UID=1-65535
    系统用户:1-499,1-999(CENTOS7)
    登录用户:500+,1000+(CENTOS7)

    建立用户的意义在于便于分配权限。
  • 管理员组:root,GID=0
  • 普通组:
    系统组:1-499,1-999(CENTOS7)
    普通组:500+,1000+(CENTOS7)

    二、配置文件

    关于用户的配置文件:

    1./etc/passwd:

    用户及属性信息(名称、UID、主的ID)
    username: x :uid:gid:comment : homedir:shell
    用户名:密码X:UID:GID :用户全名或注释:用户家目录(/home/wang):默认shell(/bin/bash)

    2./etc/shadow:

    用户密码及相关属性
    username :password : passwordtime: min : warning : incative: account
  • 用户名
  • 用户密码:一般用sha512加密
  • 从1970年一月一日起到密码最近一次被更改的时间
  • 密码再过几天可以被更改(0表示随时可更改)
  • 密码有效期
  • 密码过期提示时间
  • 密码过期几天后会被锁定
  • 用户有效期

    3./etc/default/useradd

    [root@CentOS7 ~]#cat /etc/default/useradd 
    # useradd defaults file 创建新用户默认配置文件
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes

    关于组的配置文件:

    1./etc/group:

    组以及属性信息
    组名:组口令:GID:以当前组为附加组的用户列表

    2./etc/gshadow:

    组名:组口令:组管理员列表:以当前组为附加组的用户列表

    3./etc/skel/*

    [root@CentOS7 ~]#ls -a /etc/skel/
    . .. .bash_logout .bash_profile .bashrc .mozilla

    创建新建用户的家目录的模版文件夹(新建用户的家目录里的文件是从这个文件夹中复制过来)
    其中没有可见文件,全是隐藏文件
    恢复用户家目录原始文件:
    手工创建家目录文件夹 cp -r /etc/skl/.[ ^.]* /home/test1
    自动生成家目录文件夹 cp -r /etc/skl/ /home/test1

    三、命令

    管理用户的命令:

    1.useradd:

    创建用户
    语法:useradd [选项] 用户名
    -u: 指定UID在 /etc/login.defs文件中,加 -o 不检查重复id
    -g :设定主组(指定的主组必须存在),默认创建并加入一个与用户名相同的组,同时指明GID
    -c :描述用户的注释信息
    -d :以指定的路径(不存在的目录)为家目录
    -s :制定用户默认shell类型
    -G :指明用户的附加组,组必须事先存在
    -N :不创建默认主组,以users作为该用户主组
    -r : 创建系统用户
    -D :显示或更改默认设置, 也就是这个文件下的信息/etc/default/useradd 创建新用户时的默认项目文件
    -D -s :更改默认shell类型
    -D -b:BASE_DIR
    -D -g:GROUP

    2.usermod

    修改用户属性
    语法:usermod [OPTION] login
    -u : 新的UID
    -g:新基本组
    -G:新的附加组,原来的附加组将会被覆盖;若保留原有附加组,则要同时使用-a选项,表示append添加。
    -s:新的默认SHELL类型
    -c:新的注释信息
    -d:新的家目录不会自动创建,原家目录中的文件不会同时移动至新的家目录;若要创建新的家目录并移动原家数据同时使用-m选项
    -l:新的名字
    -L:锁定指定用户,在/etc/shadow密码栏加!
    -U:解锁指定用户,将/etc/shadow密码栏的!拿掉
    -e yyyy-MM-DD:指明用户帐号过期时间
    -f:INACTICE设定非活动期限

    3. userdel

    删除用户
    语法:userdel [OPTION] login
    -r:删除用户家目录

    4.id

    查看用户相关的ID信息
    -u:显示UID
    -g:显示GID
    -G:显示用户所属组的ID
    -n:显示名称需配合ugG使用

    5.su

    切换用户
    语法: su UserName:不完全切换,不读取目标用户的配置文件,不改变当前用户工作目录
    ​ su - UserName:完全切换,读取用户的配置文件,切换至家目录
    换个用户执行命令:su [-] UserName -c 'COMMAND'

    6.passwd

    语法:passwd [OPTIONS] UserName 修改指定用户密码,仅root用户权限
    passwd:修改自己的密码
    -l:锁定指定用户
    -u:解锁指定用户
    -e:强制用户下次登录修改密码
    -n:mindays 指定最短使用期限
    -x:maxdays指定最大使用期限
    -w:warndays提前多少天开始警告
    -i:inactivedays非活动期限
    --stdin:从标准输入接受用户密码

    [root@CentOS7 ~]#echo '199310' |passwd --stdin gentoo
    Changing password for user gentoo.
    passwd: all authentication tokens updated successfully.

    7.chage:

    修改用户密码策略
    语法:chage [OPTION] LOGIN

    [root@CentOS7 ~]#chage gentoo
    Changing the aging information for gentoo
    Enter the new value, or press ENTER for the default
    Minimum Password Age [0]:
    Maximum Password Age [99999]:
    Last Password Change (YYYY-MM-DD) [2017-07-24]:
    Password Expiration Warning [7]:
    Password Inactive [-1]:
    Account Expiration Date (YYYY-MM-DD) [-1]:

    管理组的命令:

    8.groupadd

    创建组
    语法:groupadd [OPTION] GROUPNAME
    -g :GID指明GID号
    -r:创建系统组

    9.groupmod

    groupmod [OPTION] group
    -n:新名字
    -g:新GID

    10.groupdel

    跟组名,删除组

    11.gpasswd

    gpasswd [OPTIN] GROUP
    -a user :将user添加至指定组中
    -d user:从制定组中移除用户user
    -A user1,user2,...:设置有管理权限的用户列表

    12.newgrp

    临时切换主组
    切换主组以后新建立的文件的所属组改变

    13.groupmems

    更改和查看组成员
    语法:groupmems [OPTION]或[action]
    options:
    -g groupname :默认是当前用户的所属组,-g更改为指定组

    [root@CentOS7 ~]#groupmems -l -g admins
    harry natasha

    Actions:
    -a :指定用户加入组
    -d:从组中删除用户
    -p:从组中清除所有成员
    -l:显示组成员列表

    14.groups

    跟用户名,查看用户所属组列表

    批量创建用户:

    newuser.txt 格式和/etc/passwd相同

    批量修改口令:

    cat pass.txt | chpasswd pass.txt格式是username : password

    四、权限管理

    文件权限:

  1. r 读权限:查看内容 文件类型
  2. w 写权限:可以修改文件内容,写文件与删除文件没关系
    删除文件既是对该目录的修改。
    目录中的文件能不能删除,与目录中的文件权限无关,与目录的权限有关.
  3. x 执行权限:是否可以运行,对root也有限效。
  4. X执行权限:+X若是目录那么既+x权限,若文件原本有人有x权限那么+x权限若没人有x权限则不+任何权限

    目录权限:

    r读权限:可以ls查看目录内的文件列表
    w写权限:可以创建或者删除目中的文件,但是要有x权限
    x执行权限:可以cd进入目录,可以看ls -l目录内文件元数据

    chown:

    修改文件的所属主
    语法:chown [option]...[OWNER] 或:[group] FILE
    OPTION : -R 递归
    OWNER
    OWNER:GROUP 改变文件的所有者和所属组
    :GROUP
    命令中的冒号可以用.代替
    chown username file

    chgrp

    修改文件的所属组
    语法: chgrp [OPTION] groupname file
    选项:-R 递归

    chomd :

    修改文件的权限
    用法:
  5. 模式法:chmod+ who+ opt+per+file
    chmod 命令
    who对谁操作: u g o a=all
    opt 什么操作: + - =
    per权限:r w x
    ```shell
    [root@CentOS7 ~]#ll
    -rw-r--r--. 1 root root 0 Jul 24 16:23 f1
    [root@CentOS7 ~]#chmod o+w f1
    [root@CentOS7 ~]#ll
    -rw-r--rw-. 1 root root 0 Jul 24 16:23 f1

[root@CentOS7 ~]#ll f1
-rw-r--rw-. 1 root root 0 Jul 24 16:23 f1
[root@CentOS7 ~]#chmod u=rw,g=r,o= f1
[root@CentOS7 ~]#ll f1
-rw-r-----. 1 root root 0 Jul 24 16:23 f1
用cp命令复制若覆盖了源文件那么只覆盖文件内容,保留文件的元属性 chmod --reference=RFILE FILE 参考RFILE文件的权限,将FILE修改为RFILE的权限模式shell
[root@CentOS7 ~]#ll f1
-rw-r-----. 1 root root 0 Jul 24 16:23 f1
[root@CentOS7 ~]#chmod --reference=/etc/shadow f1
[root@CentOS7 ~]#ll /etc/shadow
----------. 1 root root 1748 Jul 25 10:54 /etc/shadow
[root@CentOS7 ~]#ll f1
----------. 1 root root 0 Jul 24 16:23 f1
2. 数字法: chmod 数字 filenameshell
[root@CentOS7 ~]#ll f1
----------. 1 root root 0 Jul 24 16:23 f1
0 0 0
[root@CentOS7 ~]#chmod 751 f1
[root@CentOS7 ~]#ll f1
-rwxr-x--x. 1 root root 0 Jul 24 16:23 f1
7 5 1
```

五、默认权限

umask
新建文件和文件夹的默认权限
umask:查看
umask 跟数字:设定
root的umask是002
非特权用户的umask是022

数字算法:

umask +文件设定权限=666文件默认权限/777目录默认权限
算法当中对于目录来讲:不存在执行权限不安全所以用777直接减umask就得到了目录权限。
对于文件来讲:666-umask
观察结果:有奇数那么对应奇数位置各加1,偶数不变
真实作用:从对应位中将Umask指定权限去除
文件默认权限 666 110 110 110
umask设置权限 057 000 101 111
新建文件权限 110 010 000 得620

[root@CentOS7 ~]#umask
0022
[root@CentOS7 ~]#>f2
[root@CentOS7 ~]#ll f2
-rw-r--r--. 1 root root 0 Jul 25 16:02 f2
[root@CentOS7 ~]#umask 057
[root@CentOS7 ~]#umask
0057
[root@CentOS7 ~]#>f3
[root@CentOS7 ~]#ll f3
-rw--w----. 1 root root 0 Jul 25 16:03 f3

模式法:

[root@CentOS7 ~]#umask 
0022
[root@CentOS7 ~]#umask u=rw,g=r,o=
[root@CentOS7 ~]#umask
0137
[root@CentOS7 ~]#>f6
[root@CentOS7 ~]#ll f6
-rw-r-----. 1 root root 0 Jul 25 16:11 f6

umask -p :

输出可被调用,/etc/bashrc是全局设置,~/.bashrc用户设置

[root@CentOS7 ~]#umask -p
umask 0137
[root@CentOS7 ~]#umask -p >> .bashrc
[root@CentOS7 ~]#cat .bashrc
# .bashrc
...
umask 0137

umask -S 模式方式显示:

[root@CentOS7 ~]#umask -S
u=rw,g=r,o=

六、特殊权限

前提:进程有属主和属组;文件有属主和属组

(1) 任何一个可执行程序文件能不能启动为进程,取决发起者 对程序文件是否拥有执行权限

(2) 启动为进程之后,其进程的属主为发起者,进程的属组为 发起者所属的组

(3) 进程访问文件时的权限,取决于进程的发起者

(a) 进程的发起者,同文件的属主:则应用文件属主权限

(b) 进程的发起者,属于文件属组;则应用文件属组权限

(c) 应用文件“其它”权限

SUID 4

作用在文件所有者上
作用:作用在可执行的二进制程序上,将当前运行者身份切换成该程序所有者的身份,继承该文件所有者对该文件所具有的权限。
作用在目录上,用户进入该目录集成该目录所属组所具有的权限。

SGID 2

作用在文件所属组上
作用在目录上,目录中创建的新文件将自动集成目录的所属组。
以上两个权限都只能提高权限

STICKY 1

作用在文件other位

  • 粘滞位
  • 具有写权限的目录通常用户可以删除该目录的任何文件,无论文件的权限或用友权
  • 在目录设置Sticky,只有文件的所有者有或者root可以删除该文件
  • sticky设置在文件上无意义
    权限设定:
    chmod o+t DIR
    chmod o-t DIR

    防止误操作:

    chattr +i 文件名 禁止该文件被删除、更改、改名
    ​ -i 解除锁定
    ​ +a:只能追加内容,不能更改删减
    lsattr 文件名 显示特定属性

    七、ACL:特殊权限

    linux系统中只对文件设置了三种角色所有者、所属组和other所以指定权限的灵活性有限。复杂环境中对于文件来说设置的角色就不止三个了。ACL就能对文件设置更多的角色从而设置复杂的权限控制。
    ACL需要文件系统的支持,CentOS7版本之前默认手工创建的ext4文件系统无ACL功 能,需手动增加。
    CentOS7 默认创建的xfs和ext4文件系统具有ACL功能 。

    setfacl

    语法:setfacl -m u/g : user/group :权限 文件名/目录
    选项:
    -m:设置ACL权限
    -Rm:递归设定目录的ACL权限
    -X:删除指定用户
    -b:删除所有
    -k:删除指定目录的ACL权限
    -d :default 作用于目录新建文件默认权限
    getfacl file1 | setfacl --set-file=- file2 复制file1 的acl权限给file2
    ACL生效顺序:所有者,自定义用户,自定义组,其他人

    getacl

    跟文件,查看该文件的ACL相关权限。

    mask:

    mask通俗来说就是自定义用户或者自定义所属组权限的高压线,至作用于acl自定义的用户或者组。
    一旦设置ACL权限,那么文件显示的所属组权限既是mask限定的权限
    设定mask权限限定以后,如果更改用户的权限 mask权限限定会发生改变。
    备份和恢复ACL
    主要的文件操作命令cp和mv都支持ACL,只是cp命令需要 加上-p 参数。但是tar等常见的备份工具是不会保留目录 和文件的ACL信息。
    getfacl -R /tmp/dir1 > acl.txt
    setfacl -R -b /tmp/dir1
    setfacl -R --set-file=acl.txt /tmp/dir1
    setfacl --restore acl.txt
    getfacl -R /tmp/dir1