概述

  对于使用计算机的用户来讲,都知道要使用计算机,都需要使用用户来进行登录,并且都知道用户是什么。那么计算机如何识别用户呢?计算机通过一种所谓的认证机制来识别这个用户是不是有权限或者说是被计算机所允许登录使用计算机资源的用户。

  在计算机安全模型当中,计算机的每一个可用户的、可访问的资源,通常都给他关联一个用户标识,即给计算机上的可用资源都给一个属主的身份,规定他属于谁!所以计算机对资源的权限控制,仅仅是将可用的资源授予给了计算机内部的一个标识,这个用户标识就叫做用户名,但是这个用户名对应的现实中的人是谁?这并不靠计算机自身来进行判定,或者说并不是靠我们的文件所属的对应关系来判定的。而是靠一种认证的机制,让那些知道这个用户名的,并且通过某种合法途径或者手段能让计算机识别出他的确是他所声称的那个人。因为在计算机上用户存在的目的是把有限的资源进行合理的指派。

  那用户是什么?对计算机而言,用户仅仅是一种标识符而已。这个标识符通常有两类信息:包括用户名和用户ID号。用户名是指一串字符串,而真正计算机所识别的是用户ID,是一串数字。

  在登录计算机的时候,作为一个使用计算机的用户,我们需要提供用户名和密码,当我们提供用户名以后,我们的操作系统会自动把用户名转为用户ID号,同时,还要去用户输入密码。由于用户名可能大家都知道,因此密码就是确定使用计算机的这个或者这几个人就是可以给予他们计算机权限的人的认证机制。

  通过用户认证成功之后,进入计算机,他能够操作的资源的种类因为权限的不同而不同。即就是用户在通过了认证之后,就需要对用户进行授权。对用户进行认证之后,用户对资源能够使用到那种地步,就需要对用户进行授权操作。那我们怎样确保授权给用户之后,权利不至于被滥用呢?这就需要使用到对用户的审计操作。

  而我们上述提到的认证、授权、审计,即是计算机安全模型当中的3A模型。3A即:

    A:Authencattion 认证

    A:Authorzation 授权 

    A:Accounting 审计

  这就是Linux的用户机制,Linux的用户机制首先认证这些用户,确保计算机的资源是分配给予的正确的人,而且要确保这些资源被用户合法使用。

用户管理概述

  在Linux中,由于进程是动态的,因此进程是以特定用户的身份来进行运行的,而文件是静态的,以属主、属组等从属关系来运行。所以一个用户到底有没有权限去访问一个资源,就取决于他对文件的属主和属组的关系。

  Linux中,文件的属主定义了这个文件的所有者以及相关联的权限,并且一个文件只能有一个属主,那么其他的用户想要访问这个文件时怎么办呢?Linux中,把其他要访问这个文件的用户统一都归结到一个用户组里,所以组就是将多个用户域权限建立管理关系的一个容器。

  下面我们分别来说明用户和组的相关信息:

  在Linux中,拥有两类用户,管理员和普通用户。Linux用户的模型:UserName/password

  而用户一般都有自己的ID号,我们称之为UID,Linux中UID的范围为:0-65535

   管理员:0

   普通用户:1-65535

   而在普通用户中,有分为系统用户和登录用户,系统用户用来启动一些运行系统必备的服务时所使用。

      系统用户的ID号:

       CentOS6: 1-499

       CentOS7:1-999

      处于这些ID好范围的用户ID,我们就称之为的系统用户。一般不用于登录系统,因此并不具备家目录。 

      登录用户的ID号:

       CentOS6: 500+

       CentOS7: 1000+

      处于这些ID好范围的用户ID,我们就称之为的登录用户。

  Linux中,Linux组:GroupName/GID,简称为GID,组也两类:

   管理员组:0

   普通组:1-65535

      系统组:

      CentOS6: 1-499, 1-999

      普通组:

      CentOS7: 500+, 1000+

  以用户为中心,一个用户可以同时属于多个组。

    用户的基本组;

    用户的私有组;

    用户的附加组;


  Linux用户和组的相关的配置文件:

    /etc/passwd:用户名、UID、基本组等信息

    /etc/group:组名、GID、组内包含的用户;

    /etc/shadow:用户密码及相关属性;

    /etc/gshadow:组的密码及相关属性;


  /etc/passwd:

   name:password:UID:GID:GECOS:directory:shell

   登录名:x:UID:GID:comment:主目录:用户默认shell


  /etc/shadow:

  login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field

  登录名:加密的密码串:密码最后一次的修改时间(以unix元年1920你年1月1日记时):密码的最短使用期限:密码最长使用期限:密码更改期限:密码非活动时间:秘密过期期限:遗留字段


  /etc/group

   group_name:password:GID:user_list

   组名:组密码:GID:用户名列表


  密码的复杂性策略:

   1、使用数字、小写字母、大写字母、特殊字符四类中至少三类;

   2、足够长;

   3、使用随机密码;

   4、定期更换;


用户管理命令

  用户和组管理的相关命令:

  useradd、usermod、passwd、userdel

  groupadd、groupmod、gpasswd、groupdel

  chage, chsh, chfn

  id, w, who, whoami

  su


  (1)useradd命令:


  作用:创建用户

  格式:useradd [options] LOGIN

      useradd -D [options]

  参数:

      -r: 创建系统用户

      -u UID: 指定UID;

      -g GID: 指定用户所属基本组,此组必须事先存在

      -c 'COMMENT':

      -d /PATH/TO/SOMEWHERE:指定用户的主目录路径;此位置不能事先存在,否则,其用户相关配置文件将被复制;/etc/skel

      -s SHELL:设定用户的默认shell;通过cat /etc/shells查看用户默认shell。

      -G GID,...:指定所属的附加组;

      -M: 不给用户创建家目录;

  使用说明:

  示例:

  练习:创建用户Oracle,所属附加组database和sql,ID号为3000, 家目录为/home/database;

  wKioL1XpVCOia1DBAACDkLjAESE577.jpg

  (2)groupadd命令:


  作用:创建组

  格式:groupadd [OPTIONS] GROUPNAME

  参数:

    -g GID: 指明组ID;

    -r: 创建系统组;

  使用说明:

  示例:

  wKiom1XpUpPBVhmQAACRLp34j6U747.jpg

  wKioL1XpVM_jwR_sAAB4-2HgLX8250.jpg

  (3)id命令:


  作用:查看用户相关的id信息;

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

  参数:

     -u: UID

     -g: GID

     -G: Groups

     -n: NAME

  使用说明:

  示例:

  wKiom1XpUy2DgwtBAADPUq2VsQw511.jpg

  (4)su命令:


  作用:su:switch user, 切换用户或以其它用户的身份执行命令;

  格式:su [OPTION]... [-] [USER [ARG]...]

  参数:

  使用说明:

     su USERNAME: 非完全切换;非登录式切换

     su - USERNAME或su -l USERNAME: 完全切换;登录式切换

     仅以指定用户的身份执行指定的命令:

     su - USERNAME -c 'COMMAND'

  示例:

  wKiom1YOAnSxOHRNAADdY_Pt98A277.jpg


  (5)usermod命令:


  作用:用户属性修改

  格式:usermod [OPTION]... LOGIN

  参数:

     -u UID

     -g GID

     -G GID[,GID,...]:修改用户所属的附加组;同时使用-a选项;

     -s SHELL

     -c 'COMMENT'

     -d HOME: 修改用户的家目录为新位置时,用户原来的文件是不会被移动至新家;-m选项可实现同时将其迁至新的家目录;

     -l LOGIN:

     -L:lock user

     -U: unlock user

 

  (6)passwd命令:


  作用:给用户添加密码

  格式:passwd [OPTION] [UserName]

  参数:

     -l: lock user

     -u: unlock user

     -n mindays: 最短使用期限;

     -x maxdays:默认为99999天;

     -w warndays:

     -i inactivedays:

     --stdin:从标准输出接收用户密码;

  

   echo 'centos' | passwd --stdin centos


  (7)userdel命令:


  作用:删除用户

  格式:userdel [-r] USERNAME

  参数:

     -r:删除用户的同时删除其家目录;


  (8)groupmod命令:


  作用:组属性修改

  格式:groupmod [OPTION] GROUPNAME

  参数:

     -n GROUP_NAME

     -g GID

 

  (9)gpasswd命令:


  作用:设定组密码

  格式:gpasswd [选项] group

  参数:



  (10)newgrp命令:


  作用:切换基本组为指定的组

  格式:newgrp [-] [group]

  参数:


  (11)groupdel命令:


  作用:删除组

  格式:groupdel group

  参数:

 

  (12)chage命令:


  作用:管理密码失效

  格式:chage [options] [LOGIN]

  参数:

     -m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。

     -M 密码保持有效的最大天数。

     -W 用户密码到期前,提前收到警告信息的天数。

     -E 帐号到期的日期。过了这天,此帐号将不可用。

     -d 上一次更改的日期

     -I 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。

     -l 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。


  (14)chfn命令:


  作用:用来更改执行finger指令时所显示的信息

  格式:chfn [ -f full-name ] [ -o office ] [ -p office-phone ] [ -h home-phone ] [ -u ] [ -v ] [ username ]

  参数:

     -f, --full-name 真实姓名

     -h, --home-phone 电话

     -o, --office 办工室号码

     -p, --office-phone 办公室电话

     -u, --help 使用说明。

     -v, --version 版本讯息 。


  (15)chsh命令:


  作用:用于改变用户的登录shell

  格式:chsh [-s shell] [-l] [-u] [-v] [username]

  参数:

     -s, --shell 指定用户的登录 shell. 

     -l, --list-shells 显示/etc/shells中的shell列表, 然后退出. 

     -u, --help 显示使用方法, 然后退出. 

     -v, --version 显示版本信息, 然后退出.

 

  (16)finger命令:


  作用:用户信息查找程序

  格式:finger [- lmsp ] [ user ... ] [ user@host ... ]

  参数:    

     -s  Finger 显示用户的登录名, 真名, 终端名 以及写 状态(如果写被禁止,在终端名后显示一个``*), 空闲时间,登录时间,办公地点和电话等。

     -l  产生一个多行显示来描述信息 -s 关于用户家目录,家庭电话,登录脚本,邮件状态和文件的内容 ``.plan 和 ``.project 和 ``.forward 从用户的家目录.

     -p  防止 finger -l 选项 显示 ``.plan 和 ``.project 文件的内容。

     -m  防止 user 名字的匹配. User 通常是一个登录名; 可是, 也会对用户的真实名字 进行匹配, 除非提供 -m 选项. 所有由 finger 进行的名字匹配是区分大小写的

文件权限概述

  用户对文件的访问权限有三种:r, w, x即可读、可写和可执行。

  对于文件:

   r: 可使用文件查看工具查看其内容;

   w: 可使用文件编辑工具编辑其内容;

   x: 可向内核请求将此文件运行为进程;


  对于目录:

   r: 可使用ls命令列出目录中的文件或子目录列表;

   w: 可在此目录中创建或删除文件;

   x:可使用‘ls -l’列出目录文件及子目录的详细属性信息;可使用cd命令切换工作目录为指定目录;


  文件的权限主要针对三类对象进行定义:

   ownuer: u, 属主;

   group: g, 属组;

   other: o, 其它;

  用户启动某进程访问某文件时,权限的匹配机制:

    1、首先查看此进程的属主,与被访问的文件的属主是否是同一个用户,如果是,则以被访问的文件的属主的身份来访问该文件;从而应用权限为属主的权限。

    2、如果不是属主身份,则查看该用户是否属于被访问文件的数组,如果是,则以被访问的文件的属组的身份来访问该文件;从而应用权限为属组的权限。如果不是,则以其他组的身份来访问该文件。

  某类用户对某文件的访问权限:

   --- 000 0

   --x 001 1

   -w- 010 2

   -wx 011 3

   r-- 100 4

   r-x 101 5

   rw- 110 6

   rwx 111 7

   因此权限可以转为对应的数字来表示:

   664:rw-rw-r--

   rwxr-x---: 750


权限管理命令

  权限管理: chmod

  所属关系管理: chown, chgrp

  文件遮罩码:umask


  (1)chmod命令:


  作用:修改文件权限

  格式:

      chmod [OPTION]... MODE[,MODE]... FILE...

      chmod [OPTION]... OCTAL-MODE FILE...

      chmod [OPTION]... --reference=RFILE FILE..

  参数:

  使用说明:

  示例:


       三类:

       u: owner

       g: group

       o: other

       a: all


       两种用法:

       =mode

       =rx, =r, =

       ug=rx, go=

       [+|-]mode

       u+r, 

       +w

       +x


       -R: recursive


  (2)chown命令:


  作用:修改文件属主

  格式:chown [选项]... [所有者][:[组]] 文件...

  参数:

      -R: recursive 处理指定目录以及其子目录下的所有文件

      -c 显示更改的部分的信息

    -f 忽略错误信息

    -h 修复符号链接

    -v 显示详细的处理信息

    -deference 作用于符号链接的指向,而不是链接文件本身


  (3)chgrp命令:


  作用:修改文件属组

  格式:chgrp [选项] [组] [文件]

  参数:

     -c 当发生改变时输出调试信息

     -f 不显示错误信息

     -R 处理指定目录以及其子目录下的所有文件

     -v 运行时显示详细的处理信息

     --dereference 作用于符号链接的指向,而不是符号链接本身

     --no-dereference 作用于符号链接本身


  (4)umask命令:


  作用:umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读(4)+写(2)+执行(1),同组的和其它用户有读写权限)

  格式: 

  参数:

  使用说明:

  示例:

    目录:777-umask

    文件:666-umask

    如果某一类用户的权限减得的结果有执行权限,此时会自动让其权限位加1;

    umask UMASK

    设定:仅对当前shell进程有效;