用户、组:

概述:

Linux系统为多用户,多任务的系统,其资源有限但使用者可能会有很多

每个使用者都具有用户标识以及密码(认证手段):

  • Authentication:认证机制,通过某种识别技术,将其与系统上某个用户表识关联起来的过程
  • Authorization:授权机制
  • Audition:审计

组,即用户组或用户容器,便于实现用户权限的分配

用户类别:

用户分类:

  • 管理员
  • 普通用户:
    • 系统用户
    • 登录用户

用户标识:UserID,UID,通常使用16bits二进制数字进行标识,即表示范围为0-65535(一般默认只到60000)

  • 管理员:0
  • 普通用户:1-65635
    • 系统用户:1-499(CentOS6), 1-999(CentOS7)
    • 登录用户:500-60000(CentOS6), 1000-60000(CentOS7)

名称解析:即名称转换,Username与UID之间的转换,根据名称解析库进行,名称解析库路径:/etc/passwd

组类别:

分类方式1:

  • 管理员组
  • 普通用户组:
    • 系统用户组
    • 登录用户组

组标识:GroupID, GID

  • 管理员组:0
  • 普通用户组:1-65635
    • 系统用户组:1-499(CentOS6), 1-999(CentOS7)
    • 登录用户组:500-60000(CentOS6), 1000-60000(CentOS7)

名称解析:组名与 GID之间的转换,解析库地址:/etc/group

分类方式2:

  • 用户的基本组
  • 用户的附加组

分类方式3:

  • 私有组:组名同用户名,且只包含一个用户
  • 公共组:组内包含了多个用户

认证信息:

通过比对事先存储的,与登录时提供的信息是否一致;

密码信息:

  • 用户密码存放路径:/etc/shadow
  • 组密码存放路径:/etc/gshadow

密码的使用策略:

  1. 使用随机密码
  2. 最短长度不要低于8位
  3. 应该使用大写字母、小写字母、数字和标点符号四类字符中至少三类
  4. 定期更换

加密算法:

  • 对称加密:加密和解密使用同一个密码
  • 非对称加密:加密和解密使用的一对儿密钥中的某一个

    密钥对儿分为:

    • 公钥:public key
    • 私钥:private key

    使用公钥加密的只能使用与之对应的私钥解密,反之亦然

  • 单向加密:提取数据特征码

单向加密特征:

  • 只能加密,不能解密
  • 定长输出,即无论数据有多大,输出的特征码均为定长
  • 雪崩效应,即原始数据的微小改变会引起结果的巨大改变

加密算法:

  • md5: message digest, 128bits(1)
  • sha:secure hash algorithm, 160bits(2)
  • sha224:224bits(3)
  • sha256:256bits(4)
  • sha384:384bits(5)
  • sha512:512bits(6)

随机数机制:在计算密码时向密码串中添加salt,即添加的随机数,为避免密码相同的情况

用户信息解析:

用户的信息库路径:/etc/passwd

格式解析:name:password:UID:GID:GECOS:directory:shell

  • name: 用户名
  • password:可以是加密的密码,也可是占位符x,出现x说明在/etc/shadow可找到对应的加密的密码
  • UID:用户的ID号
  • GID:用户所属的主组的ID号
  • GECOS:可选值,注释信息
  • directory:用户的家目录
  • shell:用户的默认shell,登录时默认shell程序

用户密码路径:etc/shadow

格式解析:用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:非活动期限:保留字段

例:lightingsui:$6$/TO.4RD8$ZCaFowCUM6IWbrA7YR.pQhbp2bV3zPWk1ZeKmt8UUyXBEMAvueTa8pcBJjFo1N8UTgzgrMZhJRozwkekj8lYa/:18182:0:99999:7:::

  • $6$:表示使用的加密算法,对应上述加密算法的编号
  • $/TO.4RD8$:表示添加的随机数
  • /TO.4RD8$ZCaFowCUM6IWbrA7YR.pQhbp2bV3zPWk1ZeKmt8UUyXBEMAvueTa8pcBJjFo1N8UTgzgrMZhJRozwkekj8lYa/:表示加密的字符串

 

注:在非活动天数及警告天数内均可以修改密码,只是在警告期限内用户可正常登录,而非活动天数内不更改密码无法登陆,当超过过期期限时需向管理员申请登录

组的信息库路径:/etc/group

格式解析:group_name:password:GID:user_list

  •  user_list:该组的用户成员,即以此组为附加组的用户的用户列表

用户及其权限相关命令:

groupadd命令:添加组

使用格式:groupadd [选项] group_name

常用选项:

  • -g GID:指定GID;默认是上一个组的GID+1
  • -r: 创建系统组

groupmod命令:修改组属性

使用格式:groupmod [选项] GROUP

常用选项:

  • -g GID:修改GID
  • -n new_name:修改组名

groupdel命令:删除组

使用格式:groupdel   GROUP

 useradd命令:创建用户

注:adduser是指向useradd的链接文件,功能与useradd相同

使用格式:useradd [选项] 登录名

常用选项:

  • -u, --uid UID:指定UID;默认与gid
  • -g, --gid GROUP:指定基本组ID,此组得事先存在
  • -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加组,多个组之间用逗号分隔
  • -c, --comment COMMENT:指明注释信息
  • -d, --home HOME_DIR:以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名实现,指定的家目录路径如果事先存在,则不会为用户复制环境配置文件

    注意:HOME_DIR需使用绝对路径

  • -s, --shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中
  • -r, --system:创建系统用户

注意:创建用户时的诸多默认设定配置文件为/etc/login.defs

其他使用格式:

  • useradd -D:显示创建用户的默认配置
  • useradd -D  选项 : 修改默认选项的值

  修改的结果保存于/etc/default/useradd文件中,也可通过修改此文件来对创建用户时的默认配置文件进行修改

创建用户过程中的问题:

  在创建与已删除的用户的同名用户时会出现邮箱已存在不从skel中复制信息的问题,由于Linux在创建用户时会在系统里自动加一个邮箱(系统邮箱),路径为 : /var/spool/mail/用户名

  解决方式:直接用命令 ~]#  rm -rf /var/spool/mail/用户名,若不希望创建用户时自动添加邮箱,可更 /etc/default/useradd 中的改配置选项

usermod命令:修改用户属性

使用格式:usermod [选项] 登录

常用选项:

  • -u, --uid UID:修改用户的ID为此处指定的新UID
  • -g, --gid GROUP:修改用户所属的基本组
  • -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组;原来的附加组会被覆盖
  • -a, --append:与-G一同使用,用于为用户追加新的附加组
  • -c, --comment COMMENT:修改注释信息
  • -d, --home HOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置
  • -m, --move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录
  • -l, --login NEW_LOGIN:修改用户名
  • -s, --shell SHELL:修改用户的默认shell
  • -L, --lock:锁定用户密码,即在用户原来的密码字符串之前添加一个"!"
  • -U, --unlock:解锁用户的密码

userdel命令:删除用户

使用格式:userdel [选项]  登录

常用选项:

  • -r:删除用户时一并删除其家目录

passwd命令:

使用格式:passwd [选项]  [登录名]

  1. passwd:修改用户自己的密码
  2.  passwd USERNAME:修改指定用户的密码,但仅root有此权限

常用选项:

  • -l, -u:锁定和解锁用户
  • -d:清除用户密码串
  • -e DATE: 设置密码立即过期,即用户下次登陆需重新修改密码
  • -i DAYS:非活动期限
  • -n DAYS:密码的最短使用期限
  • -x DAYS:密码的最长使用期限
  • -w DAYS:警告期限
  • --stdin:echo "PASSWORD" | passwd --stdin USERNAME

gpasswd命令:

组密码文件:/etc/gshadow

使用格式  :

  1. gpasswd [选项] group
  2. gpasswd:更改组密码

常用选项:

  • -a USERNAME:向组中添加用户
  • -d USERNAME:从组中移除用户

newgrp命令:临时切换指定的组为基本组

使用格式:newgrp [-] [group]

  • -: 会模拟用户重新登录以实现重新初始化其工作环境;

chage命令:更改用户密码过期信息

使用格式:chage [选项] 登录名

常用选项:

  • -d, --lastday LAST_DAY:设置最近一次修改密码的日期,可使用YYYY-MM-DD表示
  • -E, --expiredate EXPIRE_DATE:设置过期时间,即此日期之后若想登陆此用户需向管理员申请,日期可使用YYYY-MM-DD表示,EXPIRE_DATE 设置为 -1 会移除账户的过期日期
  • -W, --warndays WARN_DAYS:设置警告天数
  • -m, --mindays MIN_DAYS:设置最短使用天数
  • -M, --maxdays MAX_DAYS:设置最长使用天数

id命令:显示用户的真实和有效ID

使用格式:id [OPTION]... [USER]

常用选项:

  • -u: 仅显示有效的UID
  • -g: 仅显示用户的基本组ID
  • -G:仅显示用户所属的所有组的ID
  • -n: 显示名字而非ID,不能单独使用

su命令:switch user

登录式切换:会通过读取目标用户的配置文件来重新初始化

  • su - USERNAME
  • su -l USERNAME

非登录式切换:不会读取目标用户的配置文件进行初始化

  • su USERNAME

注意:管理员可无密码切换至其它任何用户

常用选项:

  • -c 'COMMAND':仅以指定用户的身份运行此处指定的命令

权限管理:

进程安全上下文:

  • 进程对文件的访问权限应用模型:进程的属主(进程发起者)与文件的属主是否相同;如果相同,则应用属主权限;否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;否则,就只能应用other的权限

权限定义:

使用 ls -l  命令查看的文件属性(rwxrwxrwx)解析:

  • 左三位:定义user(owner,属主)的权限
  • 中三位:定义group(属组)的权限
  • 右三位:定义other(除属主属组外的用户)的权限

权限解释:

  • r:readable, 读
  • w:writable, 写
  • x:excutable,执行

对于文件:

  • r:可获取文件的数据
  • w: 可修改文件的数据
  • x:可将此文件运行为进程(默认不应该有执行权限)

对于目录:

  • r:可使用ls命令获取其下的所有文件列表;(不包括详细信息 即ls -l)
  • w: 可修改此目录下的文件列表;即创建或删除文件
  • x: 可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息

权限组合机制及其对应8进制数字:

  • --- 000     0
  • --x 001    1
  • -w- 010    2
  • -wx 011   3
  • r-- 100     4
  • r-x 101    5
  • rw- 110    6
  • rwx 111    7

权限管理及从属关系命令:

chmod命令:

操作的用户类型:

  • u:属主
  • g:属组
  • o:其它
  • a: 所有

使用格式:

  1. chmod [OPTION]...  MODE[,MODE]... FILE...    
  2. chmod [OPTION]...  OCTAL-MODE FILE...
  3. chmod [OPTION]...  --reference=RFILE FILE...

MODE表示法:

  • 赋权表示法:直接操作一类用户的所有权限位rwx
    •   u=r/w/x/rw/rx/wx/rwx
    •   g=r/w/x/rw/rx/wx/rwx
    •   o=r/w/x/rw/rx/wx/rwx
    •   a=r/w/x/rw/rx/wx/rwx
  • 授权表示法:直接操作一类用户的一个权限位r,w,x(也可操作多位)
    •   u+, u-  同上
    •   g+, g-
    •   o+, o-
    •   a+, a-(a可省略,在+w时仅对属主有效)

常用选项:

  • -R, --recursive:递归修改

用户仅能修改属主为自己的那些文件的权限

chown命令

使用格式:

  • chown [OPTION]...  [OWNER][:[GROUP]] FILE... (或使用 . 进行分隔)
  • chown [OPTION]...  --reference=RFILE FILE...

常用选项:

  • -R:递归修改

chgrp命令

使用格式:

  1. chgrp [OPTION]...  GROUP FILE...
  2. chgrp [OPTION]...  --reference=RFILE FILE...

仅管理员可修改文件的属主和属组

特殊权限:

特殊权限类型:

  • SUID
  • SGID
  • STICKY

SUID:

  • SUID的功能:在默认情况下,用户发起的进程,进程的属主是其发起者,因此,进程以发起者的身份在运行;若当用户运行某程序时,如果此程序拥有SUID权限,那么此程序运行为进程时,进程的属主不是发起者,而是程序文件自己的属主
  • 管理文件的SUID权限:
    • chmod u+|-s FILE...
  • 展示位置:属主的执行权限位,如果属主原本有执行权限,显示为小写s;否则,显示为大写S

SGID:

  • 功能:当目录属组有写权限,且有SGID权限时,那么所有属于此目录的属组,且以属组身份在此目录中新建文件或目录时,新文件的属组不是用户的基本组,而是此目录的属组
  • 管理文件的SGID权限:
    • chmod  g+|-s  FILE...
  • 展示位置:属组的执行权限位,如果属组原本有执行权限,显示为小写s;否则,显示为大写S

Sticky:

  • 功用:对于属组或全局可写的目录,组内的所有用户或系统上的所有用户对在此目录中都能创建新文件或删除所有的已有文件;如果为此类目录设置Sticky权限,则每个用户能创建新文件,且只能删除自己的(自己为属主)文件
  • 管理文件的Sticky权限:
    • chmod  o+|-t  FILE...
  • 展示位置:其它用户的执行权限位,如果其它用户原本有执行权限,显示为小写t;否则,显示为大写T
  • 系统上的/tmp和/var/tmp目录默认均有sticky权限

管理特殊权限的另一方式:

suid sgid sticy 八进制权限

0   0  0       0

0   0  1       1

0   1  0       2

0   1  1       3

1   0  0       4

1   0  1       5

1   1  0       6

1   1  1       7

基于八进制方式赋权时,可在默认的三位八进制数字左侧再加一位八进制数字,该位即为特殊权限位

facl:file access control lists

文件的额外赋权机制: 在原来的u,g,o之外,另一层让普通用户能控制赋权给另外的用户或组的赋权机制

  • getfacl命令:
    • getfacl FILE...   user:USERNAME:MODE
    • getfacl FILE...   group:GROUPNAME:MODE

 

  • setfacl命令:
    • 赋权给用户: setfacl   -m u:USERNAME:MODE FILE...
    • 赋权级组:     setfacl   -m g:GROUPNAME:MODE FILE...
  • 撤销赋权:
    • setfacl  -x  u:USERNAME FILE...
    • setfacl  -x  g:GROUPNAME FILE...

umask:

遮罩码,即文件的权限反向掩码,默认为0022,最左侧为特殊权限,在做减法时忽略该特殊权限位

  • 初始文件的权限为:666-umask
  • 初始目录的权限为:777-umask

注:文件用666去减,表示文件默认不能拥有执行权限;如果减得的结果中有执行权限,则需要将其加1,即为最终结果

umask命令:

  1. umask:查看当前umask
  2. umask MASK: 设置umask

注:此类设定仅对当前shell进程有效

进程安全上下文终述:

  • 进程以其发起者的身份运行
  • 进程对文件的访问权限,取决于发起此进程的用户的权限
  • 系统用户:为了能够让那后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户,这类用户从不用登录系统,仅让其他进程使用其身份运行,从而仅能获取普通权限
  • 当用户 发起一个对文件的访问进程时,首先会检查进程的属主(进程发起者)是否与被访问的文件的属主是否相同;如果相同,则应用属主权限;否则,检查该文件上是否有额外的专门对该用户的访问控制列表,若存在,则应用该访问控制列表的权限;否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;否则,检查此用户所属的组是否存在专门的访问控制列表 ;若存在,则应用此访问控制列表的权限;否则应用other的权限