Linux 五 用户及权限基础

(1)用户、组

  • 用户:当我们使用Linux时,需要以一个用户的身份登入,一个进程也需要以一个用户的身份运行,用户限制使用者或进程可以使用、不可以使用哪些资源;
  • 组:方便组织和管理用户;
  • 用户相关:

    • 每个用户拥有一个UserID,操作系统实际使用的是用户ID,而非用户名;
    • 每个用户属于一个主组,属于一个或多个附属组;
    • 每个组拥有一个GroupID;
    • 每个进程以一个用户身份运行,并受该用户可访问的资源限制;
    • 每个可登录用户都拥有一个指定的shell(命令集,一般默认的是BASH) 。
  • 用户ID为32位,通常用户数限制在6万以下;

  • 用户分为三种:

    • root 用户(ID为0的用户为root用户);
    • 系统用户(1~499),往往是为某些服务创建的用户,为了利用用户限制使用的资源,这些服务通常是一个进程;
    • 普通用户(500以上)。
  • 系统中的文件都有一个所属用户及所属组;

  • 使用id命令可以显示当前用户的信息;
  • 使用passwd可以修改当前用户的密码;
  • 用户信息相关文件

    • /etc/passwd 保存了用户信息
    • /etc/shadow 保存用户密码(加密的)
    • /etc/group 保存组信息
  • 查看登录的用户

    • 命令whoami显示当前用户的用户名
    • 命令who显示有哪些用户已经登录系统
    • 命令w显示有哪些用户已经登录系统并且在干什么
  • 创建一个用户
    useradd 用户名
    这个命令会执行以下操作:
    1.在/etc/passwd中添加用户信息;
    2.如果使用passwd命令创建密码(passwd 用户名),则将密码加密后保存在/etc/shadow中;
    3.为用户创建一个新的家目录/home/用户名;
    4.将/etc/skel中的文件复制到新建用户的家目录中(初始的配置文件,可以利用这个文件来为每个新建用户提供一个默认的文档);
    5.建立一个与用户名相同的组,新建用户默认属于这个同名组。

  • 命令useradd支持以下参数:

    • d 指定家目录
    • s 指定登录shell
    • u 指定userid
    • g 指定主组
    • G 指定附属组(最多31个,用“,”分割)
    • 也可以通过直接修改/etc/passwd的方式实现,但不建议
  • 修改用户信息
    • 命令usermod 修改用户信息,usermod 参数 username
    • 命令usermod支持以下参数:
      -l 新用户名 (修改用户名,注意通过这种方式修改后用户家目录的名字要手动修改,否则用户登录后找不到家目录)
      -u 新userid
      -d 用户家目录位置
      -g 用户所属组
      -G 用户所属附属组
      -L 锁定用户使其不能登录
      -U 解除锁定
  • 删除用户
    • 命令 userdel 用以删除指定用户
    • userdel 用户名 (保留用户的家目录)
    • userdel -r 用户名 (同时删除用户的家目录)

(2)组

  • 作用是,方便归类、管理用户。一般使用部门、职能或地理区域的分类方式创建使用组;
  • 每个组有一个组ID;
  • 组信息保存在/etc/group中;
  • 每个用户拥有一个主组,同时还可以拥有最多31个附属组;
  • 命令groupadd用以创建组:groupadd 组名
  • 命令groupmod用以修改组:
    • groupmod -n newname oldname 修改组名
    • groupmod -g newGid oldGid 修改组ID
  • 命令groupdel用以删除组:groupdel 组名

Linux 五 用户及权限基础

(3)Linux权限机制

  • 权限:操作系统用来限制对资源访问的机制,权限分为读、写、执行。系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户、哪些组可以对特定文件执行什么操作;
  • 每个进程都是以某个用户的身份运行的,所以进程的权限与该用户的权限一样,用户的权限大,该进程拥有的权限就大;
  • Linux中,每个文件拥有权限类型:

    权限 对文件的影响 对目录的影响
    r(读取) 可读取文件内容 可列出目录内容
    w(写入) 可修改文件内容 可在目录中创建删除文件
    x(执行) 可作为命令执行 可访问目录内容

    注意:目录必须拥有x权限,否则无法查看其内容。

  • UGO,Linux权限是基于UGO模型进行控制:

    • U代表User,G代表Group,O代表Other;
    • 每一个文件的权限基于UGO进行设置 ;
    • 权限三个一组(rwx),对应UGO进行设置(即一个文件有9个权限);
    • 每个文件拥有一个所属用户和所属组,对应UG,不属于该文件所属用户或所属组的使用O权限;
    • 命令ls-l可以查看当前目录下文件的详细信息,显示结果为:drwxr-xr-x 2 root root 4096 Nov 15 2015 c
      Linux 五 用户及权限基础
  • 修改文件所属用户、组

    • 命令chown(changeown)用以修改文件的所属用户:
      chown 用户名 文件名(将该文件所属用户修改为用户名);
      -R 参数递归的修改目录下的所有文件所属用户。
    • 命令chgrp(changegroup)用以修改文件的所属组:
      chown 组名 文件名(将该文件所属组修改为组名);
      -R 参数递归的修改目录下的所有文件所属组。
  • 修改文件权限
    • 命令chmod用以修改文件的权限:chmod 模式 文件名 (修改该文件的权限);
    • 模式格式如下:
      u、g、o 分别代表用户、组和其他
      a 代表ugo
      +、-代表加入或删除对应权限
      r、w、x代表三种权限
    • 模式实例:
      chmod u+rw test (为test文件所属用户添加r、w权限)
      chmod g-x test(为test文件所属组删除x权限)
      chmod go+r test(为test文件所属组和其他用户添加r权限)
      chmod a-x test(为所有用户删除文件test的x权限)
  • 修改权限(数字)
    • 命令chmod还支持以数字方式修改权限,三个权限分别由三个数字表示:
      r = 4(2^2)
      w = 2(2^1)
      x = 1(2^0)
    • 使用数字权限时,每组权限分别等于对应数字之和:
      rw = 4+2 = 6
      rwx = 4+2+1 = 7
      r-x = 4+0+1 = 5
    • 所以,使用数字表示ugo权限的使用方式如下:
      chmod 666 test == rw-rw—-
      chmod 775 test == rwxrwxr-x
      Linux 五 用户及权限基础

注意:生产环境中的权限设置,宁小勿大。
(4)Linux中的权限扩展(默认权限、特殊权限)

①默认权限
- 每个终端(shell)都拥有一个umask属性,来确定新建文件、文件夹的默认权限
- umask 使用数字权限方式表示,如:022 (对应于UGO)
- 目录的默认权限是:777-umask
- 文件的默认权限是:666-umask
- 一般,普通用户的默认umask为002,root用户的默认umask为022
- 也就是说,对于普通用户来说:
- 新建文件的权限是:666-002=664
- 新建目录的权限是:777-002=775
- 命令umask用以查看设置umask值:umask 022 (设置当前终端的umask值为022)
②特殊权限
umask 0022 也就是说,是有4位的,第一位的3bit表示特殊权限用的。

权限 对文件的影响 对目录的影响 例子
suid 某文件拥有该权限,运行文件时会以文件所属用户的身份执行文件,而非执行文件的用户的身份 例如passwd文件
sgid 以文件所属组身份执行(不常用) 在该目录下创建的所有新文件的所属组与目录的所属组相同
sticky 对目录拥有写入权限的用户仅可以删除其拥有的文件,但无法删除其他用户所拥有的文件
  • 设置特殊权限
    • 设置suid chmod u+s test
    • 设置sgid chmod g+s test
    • 设置sticky chmod o+t test
  • 与普通权限一样,特殊权限也可以使用数字方式表示
    • suid = 4
    • sgid = 2
    • sticky = 1
      所以也可以使用以下命令设置:chmod 4755 test