NOTE
  • java

    • 架构基础
    • java线程简介
    • HashMap
    • STL库继承图
  • C#

    • c#基础
  • sql基础

    • sql语句
    • 函数、存储过程和视图
  • ElasticSearch
  • 基数
  • 基础知识

    • Liunx基础
    • vi文本编辑器
    • 权限管理
    • 文件系统管理
    • 系统管理
    • 备份与恢复
    • 服务管理
    • /md/linux/日志管理.html
  • linux软件

    • 工具
  • shell

    • shell基础
    • shell编程
  • Spring

    • 简介
    • MyBatis
  • Spring_Cloud

    • 微服务基础
    • 负载均衡器
    • Hystrix原理
  • 基础
  • 基础
  • java

    • 架构基础
    • java线程简介
    • HashMap
    • STL库继承图
  • C#

    • c#基础
  • sql基础

    • sql语句
    • 函数、存储过程和视图
  • ElasticSearch
  • 基数
  • 基础知识

    • Liunx基础
    • vi文本编辑器
    • 权限管理
    • 文件系统管理
    • 系统管理
    • 备份与恢复
    • 服务管理
    • /md/linux/日志管理.html
  • linux软件

    • 工具
  • shell

    • shell基础
    • shell编程
  • Spring

    • 简介
    • MyBatis
  • Spring_Cloud

    • 微服务基础
    • 负载均衡器
    • Hystrix原理
  • 基础
  • 基础
  • linux系统

    • Liunx基础
    • 权限管理
  • linux工具

    • vi文本编辑器
  • shell编程

    • shell基础
    • shell编程

权限管理

用户文件

如果我创建一个用户后会在home文件下建立一个文件。

root用户为单独文件

  • 普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700
  • 超级用户:/root/,所有者和所属组都是root用户,权限是550
    • (如果将普通用户改为超级用户该用户的目录不会改变。)
  • 用户的邮箱:/var/spool/mail/用户名/
  • 用户模板目录:/etc/skel/
  • 用户默认值文件:/etc/default/useradd /etc/login.defs

初始组:linux每添加一个用户就会以这个用户名创建一个组。初始组可以改不可以选。

附加组:用户可以加入多个其他的用户组,并拥有这些组的权限,附件组可以有多个

shell就是Linux的命令解释器,在/etc/passwd当中,除了标准shell是/bin/bash之外,还可以写如/sbin/nologin.

把时间戳换算为日期date -d "1970-01-01 16066 days"

把日期换算为时间戳echo$(($(date --date="2014/01/06"+%s)/86400+1))

用户管理命令

用户添加命令useradd [选项] 用户名 选项:

  • -u UID :手工指定用户的UID号
  • -d 家目录:手工指定用户的家目录
  • -c 用户说明:手工指定用户的说明
  • -g 组名:手工指定用户的初始组
  • -G组名:指定用户的附加组
  • -s shell:手工指定用户的登录shell。默认是/bin/bash

修改用户密码passwd [选项] 用户名 选项:

  • -S :查询用户密码的密码状态。仅root用户可用
  • -l :暂时锁定用户。仅root用户可用
  • -u :解锁用户。仅root
  • --stdin :可以通过管道符输出的数据作为用户的密码。

修改用户信息usermod [选项] 用户名 选项:

  • -u UID
  • -c 用户说明
  • -G 组名
  • -L 锁定
  • -U 解锁

修改用户密码状态chage [选项] 用户名 选项:

  • -l :查询密码状态
  • -d 日期:修改密码最后一次更改日期(shadow3字段)
  • -m 天数:两次密码修改间隔(4)
  • -M 天数:密码有效期(5)
  • -W 天数:密码过期前警告天数(6)
  • -I 天数:密码过后宽限天数(7)
  • -E 日期:账号失效时间(8)
chage -d 0 用户名
#要求用户下次更改密码

删除用户userdel [-r] 用户名 选项:

  • -r :删除用户的同时删除用户家目录 id 用户 查询用户的所有ID

用户切换命令su [选项] 用户名 选项:

  • -:选项只使用“-”代表连带用户的环境变量一起切换
  • -c :仅执行一次命令,而不切换用户身份
su -root -c "useradd user3"
#不切换成root,但是执行useradd命令添加userl用户

用户配置文件

  1. 用户信息文件/etc/passwd
  • 第1字段:用户名称
  • 第2字段:密码标志
  • 第3字段:UID(用户ID)
    • 0:超级用户
    • 1-499:系统用户(为用户)
    • 500-65535:普通用户,centos7从1000开始
  • 第4字段:GIU(用户初始组ID)
  • 第5字段:用户说明(备注)
  • 第6字段:家目录
    • 普通用户:/home/用户名/
    • 超级用户:/root/
  • 第7字段:登录之后的Shell
  1. 影子文件/etc/shadow

权限为000

  • 第1字段:用户名
  • 第2字段:加密密码
    • 加密算法升级为SHA512散列加密算法
    • 如果密码位是“!!”或“*”代表没有密码,不能登录
  • 第3字段:密码最后一次修改日期
    • 使用1970年1月1日作为标准时间,每过一天时间戳加1
  • 第4字段:两次密码的修改间隔时间(和第3字段相比)
  • 第5字段:密码有效期(和第3字段相比)
  • 第6字段:密码修改到期前的警告天数(和第5字段相比)
  • 第7字段:密码过期后的宽限天数(和第5字段相比)
    • 0:表示密码过期后立即失效
    • -1:则表示密码永远不会失效(默认)
  • 第8字段:账号失效时间
    • 要用时间戳表示
  • 第9字段:保留
  1. 组信息文件/etc/group和组密码文件/etc/gshadow

group:

  • 第1字段:组名
  • 第2字段:密码标志
  • 第3字段:GIU(同上)
  • 第4字段:组中附加用户(不会显示初始用户)

gshadow:

  • 第1字段:组名
  • 第2字段:组密码
  • 第3字段:组管理员用户名
  • 第4字段:组中附加用户

用户组管理

添加用户组groupadd [选项] 组名 选项:

  • -g GID :指定组ID

修改用户组groupmod [选项] 组名 选项:

  • -g GID:修改组ID
  • -n 新组名:修改组名

删除用户组groupdel 组名

把用户添加入组或从组中删除gpasswd 选项组名 选项:

  • -a 用户名:把用户加入组
  • -d 用户名:把用户从组中删除

ACL权限

用于解决身份不足的问题解决

开启acl dumpe2fs -h 分区

dumpe2fs命令是查询指定分区详细文件系统信息的命令

  • -h 仅显示超级中信息,而不显示磁盘快的详细信息

mount -o remount,acl /

重新挂载根分区,并挂载加入acl权限(临时)

vi /etc/fstab

UUID=c2………../ ext4 defaults,acl 1 1

加入acl(永久)

mount -o remount /

重新挂载文件系统或重启动系统,使修改生效

查看与设定

查看ACL命令getfacle 文件名

设定ACL权限的命令setfacl 选项文件名 选项:

  • -m (u<用户权限>:用户:权限)/(g<组权限>:组名:权限)/(m<最大有效权限>:权限)/(d<默认>:u<用户>:用户名:权限[只允许目录]) 设定ACL权限
  • -x (同上无需指定权限) 删除指定的ACL权限
  • -b 删除所有的ACL权限
  • -d 设定默认ACL权限
  • -k 删除默认ACL权限
  • -R 递归设定ACL权限 [必须跟着m后面 | 只允许目录]

mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限 设置默认默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限

文件系统属性chattr权限

chattr [+-=][选项] 文件或目录名

+:增加权限 -:删除权限 =:等于某权限 选项:

  • i: 如果对文件设置i属性,那么不允许文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。(对root生效)
  • a:如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除

系统命令权限sudo

  • root把本来只能超级用户执行的命令赋予普通用户执行
  • sudo的操作对象是系统命令

sudo -l

查看可用的sudo命令

赋予权限

[]#visudo
#实际修改的是/etc/sudoers文件
root     ALL=(ALL) ALL
#用户名  被管理主机的地址=(可使用的身份)  授权命令(绝对路径)
#%wheel   ALL=(ALL)  ALL
#%组名   被管理组主机的地址=(可使用的身份)  授权命令(绝对路径)

文件特殊权限

除了 rwx 权限,还会用到 s 权限

SetUID

SUID 特殊权限仅适用于可执行文件,所具有的功能是,只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件所有者的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。

功能:

  • 只有可以执行的二进制程序(可执行文件)才能设定SUID权限
  • 命令执行者要对该程序拥有x (执行)权限
  • 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中临时替代为文件的属主)
  • SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

设定 4代表SUID 2代表SGID 1代表SBIT

chmod 4755 文件名(如果出现大写S为报错)

chmod u+s 文件名

chmod 755 文件名

chmod u-s 文件名

温馨提示:(不要设置SUID)

关键目录应严格控制写权限。比如“/”、“/usr”等

用户的密码设置要严格遵守密码三原则

对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限

SetGID

当 s 权限位于所属组的 x 权限位时,就被称为 SetGID,简称 SGID 特殊权限

对文件的作用:

  • 只有可执行的二进制程序才能设置SGID权限
  • 命令执行者要对该程序拥有x (执行)权限.
  • 命令执行在执行程序的时候,组身份升级为该程序文件的属组
  • SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

执行locate命令时发生的

  1. /usr/bin/locate是可执行二进制程序,可以赋予SGID
  2. 执行用户lamp对/usr/bin/locate命令拥有执行权限
  3. 执行/usr/bin/locate命令时,组身份会升级为slocate组,slocate组 对/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库
  4. 命令结束,lamp用户的组身份返回为lamp组

对目录的作用

  • 普通用户必须对此目录拥有r和x权限,才能进入此目录
  • 普通用户在此目录中的有效组会变成此目录的属组
  • 若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组

Sticky BIT

粘着位作用

  • 粘着位目前只对目录有效
  • 普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
  • 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件
Last Updated:
Contributors: 任韩
Prev
Liunx基础