用户管理与权限

一、用户组的基本概念

1.1 用户与组的基本概念

. Every process (running program) on the systemruns as a particular user.
   系统上的每个进程(运行的程序)都是作为特定用户运行的,
. Every file is owned by a particular user.    
  每个文件是由一个特定的用户拥有
 . Access to files and directories are restricted by user.
   访问文件和目录受到用户的限制
 . The user associated with a running process determines thefiles and directories accessible to that process.
   与正在运行的进程相关联的用户确定该进程可访问的文件和目录 

进程访问文件,文件是否能被访问,由进程关联的用户决定。

为避免服务器被攻入的时候,被黑,使用普通的用户启动进程,避免太大的权限。

查看用户的登入信息
    [root@lh ~]# id [user]
    uid=0(root) gid=0(root) groups=0(root)
   用户id    主组id    所有的组 查看文件的所有者 ls
-l 查看进程的启动者 ps aux|grep httpd

1.2 相关的配置文件

  • /etc/passwd      用户信息
  • /etc/shadow      用户密码
  • /etc/group            组的信息

1.2.1 passwd文件

root:x:0:0:root:/root:/bin/bash

被:隔开分成了7各字段

用户名:口令:uid:gid:注释性描述:主目录:登录Shell

man 5 passwd

用户名(login_name):是代表用户账号的字符串。通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符。为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。

  口令(passwd):一些系统中,存放着加密后的用户口令字。虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。

  用户标识号(UID):是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。取值范围是0-65535。0是超级用户root的标识号,1-99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。

  组标识号(GID):字段记录的是用户所属的用户组。它对应着/etc/group文件中的一条记录。

  注释性描述(users):字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。

  主目录(home_directory):也就是用户的起始工作目录,它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。

  登录Shell(Shell):用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。

  用户的登录Shell可以指定为某个特定的程序(此程序不是一个命令解释器)。利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux系统要求只有那些在系统中登记了的程序才能出现在这个字段中。
各字段详解

1.2.2 shadow文件

  root:$6$gayPchTpBy32EWDr$KQeLRW6DEGvwp//:19760:0:99999:7:::   总共有9段,每个账号都有对应的行

  用户:密码:最后一次改动日期:密码不可被更动的天数:密码需要重新变更的天数:。。。。。。。

密码字段详解:man 5 shadow

密码被$分成了三段
1.加密算法
        $1    MD5
        $5    SHA-256    
        $6    SHA-512
2.盐
    为不同的密码,随机生产一个字符串,可以让密码相同的,最后生产的hash也不一样

3.hash值
    密码+盐=hash值
    1. 帐号名称:由于密码也需要与帐号对应啊~因此, 这个档案的第一栏就是帐号,必须要与 /etc/passwd 相同才行!
  2. 密码:这个才是真正的密码,而且是 经过编码过的密码啦! 你只会看到有一些特殊符号的字母就是了!需要特别留意的是, 虽然这些加密过的密码很难被解出来,但是‘很难’不等于‘不会’,所以, 这个档案的预设属性是‘-rw-------’或者是‘-r--------’,亦即只有 root 才可以读写就是了!你得随时注意,不要不小心更动了这个档案的属性呢!另外, 如果是在密码栏的第一个字元为‘ * ’或者是‘ ! ’,表示这个帐号并不会被用来登入的意思。 所以万一哪一天你的某个使用者不乖时,可以先在这个档案中,将他的密码栏位的最前面多加一个 * !嘿嘿!他就无法使用该帐号啰!直到他变乖了,再给他启用啊!
  3. 最近更动密码的日期:这个栏位记录了‘更动密码的那一天’的日期, 不过,很奇怪呀!在我的例子中怎么会是 12959 呢?呵呵,这个是因为计算 Linux 日期的时间是以 197011 日作为 1 ,而 197111 日则为 366 啦! 所以这个日期是累加的呢!得注意一下这个资料呦!那么最近的 200511 日就是 12784 啦,瞭解了吗?
  4. 密码不可被更动的天数: 第四个栏位记录了这个帐号的密码需要经过几天才可以被变更!如果是 0 的话, 表示密码随时可以更动的意思。这的限制是为了怕密码被某些人一改再改而设计的!如果设定为 20 天的话,那么当你设定了密码之后, 20 天之内都无法改变这个密码呦!
  5. 密码需要重新变更的天数: 由于害怕密码被某些‘有心人士’窃取而危害到整个系统的安全,所以有了这个栏位的设计。 你必须要在这个时间之内重新设定你的密码,否则这个帐号将会暂时失效。 而如果像上面的 99999 的话,那就表示,呵呵,密码不需要重新输入啦! 不过,如果是为了安全性,最好可以设定一段时间之后,严格要求使用者变更密码呢!
  6. 密码需要变更期限前的警告期限:当帐号的密码失效期限快要到的时候, 就是上面那个‘必须变更密码’的那个时间时, 系统会依据这个栏位的设定,发出‘警告’言论给这个帐号,提醒他‘再过 n 天你的密码就要失效了,请尽快重新设定你的密码呦!’,如上面的例子,则是密码到期之前的 7 天之内,系统会警告该用户。
  7. 密码过期的恕限时间:如果用户过了警告期限没有重新输入密码, 使得密码失效了,也就是说,你在‘必须变更密码的期限前,并没有变更你的密码!’ 那么该组密码就称为‘失效的密码’啰~怎么办?没关系,还有这个栏位的天数设计啊~ 意思就是说,当密码失效后,你还可以用这个密码在 n 天内进行登入的意思。 而如果在这个天数后还是没有变更密码,呵呵!那么您的帐号就失效了!无法登入!
  8. 帐号失效日期:这个日期跟第三个栏位一样,都是使用 1970 年以来的总日数设定。这个栏位表示: 这个帐号在此栏位规定的日期之后,将无法再使用。 这个栏位会被使用通常应该是在‘收费服务’的系统中, 你可以规定一个日期让该帐号不能再使用啦!
  9. 保留:最后一个栏位是保留的,看以后有没有新功能加入。
  举个例子来说好了,假如我的 dmtsai 这个使用者的密码栏如下所示:
  dmtsai:$1$8zdAKdfC$XDa8eSus2I7nQL7UjRsIy/:13025:5:60:7:2:13125:
  这表示什么呢?要注意的是, 130252005/08/30 ,所以, dmtsai 这个使用者他的密码相关意义是:
  * 最近一次更动密码的日期是 2005/08/30 (13025);
  * 能够修改密码的时间是 5 天以后,也就是 2005/09/04 以前 dmtsai 不能修改自己的密码; 如果使用者还是尝试要更动自己的密码,系统就会出现这样的讯息:
  You must wait longer to change your password
  passwd: Authentication token manipulation error
  * 使用者必须要在 2005/09/042005/10/29 之间的 60 天限制内去修改自己的密码,若 2005/10/29 之后还是没有变更密码时,该帐号就会宣告失效;
  * 如果使用者一直没有更改密码,那么在 2005/10/29 之前的 7 天内,系统会警告 dmtsai 应该修改密码的相关资讯;例如当 dmtsai 登入时,系统会主动提示如下的资讯:
  Warning: your password will expire in 5 days
  * 如果该帐号一直到 2005/10/29 都没有更改密码,由于还有两天的恕限时间,因此, dmtsai 还是可以在 2005/10/31 以前继续登入;
  * 如果使用者在 2005/10/29 以前变更过密码,那么那个 13025 的日期就会跟著改变,因此, 所有的限制日期也会跟著相对变动喔!^_^
  * 无论使用者如何动作,到了 13125 ,大约是 2005/12/8 左右,该帐号就失效了~
其他字段详解

二、用户管理命令

  用户管理:useradd  userdel  usermod

  组管理:   groupadd groupdel

  密码管理: passwd   change

2.1 组管理

  groupsadd

  groupsdel

  groupsadd -g 

  组管理比较简单

2.2 用户管理

2.2.1 组的理解

  使用id查看

  主组:

    一个用户有且只有一个主组:

      1. -g 指定,则主组为指定的组。 不推荐这样来使用,不然比较乱。都是使用第二种方法,自动more创建

      2.未指定 则系统创建与用户名相同的组

  附加组

    一个用户有多个附加组或没有:

      1.创建用户时指定 -G

      2.用户已经存在,加入到附加组,usermod,passwd

2.2.2 创建用户

  -G  指定附加组          useradd user01 -G hr,IT

  -u  指定uid            useradd user02 -u 2000

  -d  指定家目录,目录不需要提前存在 useradd user03 -d /user03

  -s  指定shell           useradd  user04 -s /sbin/nologin 。#可以 作为ftp等

2.2.3 删除用户

  使用id查看用户是否存在

    userdel  直接删除用户,配置文件保存着

    userdel -r  彻底删除,删除家目录,邮件文件.

2.2.4 密码管理

  passwd [username]

  root用户可以给任何人修改密码

  普通用户只能给自己修改密码,还需提供原密码

2.2.5 用户编辑

  方法1:使用usermod 

    usermod的参数和 useradd一致。

      usermode -s  user004 /sbin/nologin  #修改shell

      usermode  -G  it          #附加组,但是会覆盖,删除了原来的组

      usermode -aG it          #添加新组it

  方法2: gpasswd修改组

    usermod 使用 -aG常常会忘记,如果使用-G会直接覆盖了,所以使用了新的方法

      gpasswd -a  user04  it

      gpasswd -d  user04 it

      gpasswd -M user04 it,hr  一次性多次添加

三、用户提权

  默认我们创建的用户都不能执行管理员的权限,需要把他加入到wheel组中。才能使用sudo命令来执行超级管理的命令。

    [root@lh ~]# id lh
        uid=1000(lh) gid=1000(lh) groups=1000(lh),10(wheel)

用户的操作其实就是操作passwd、group、shadown文件,除了密码修改,都可以操作这几个文件

  

 

  

    

原文地址:https://www.cnblogs.com/louhui/p/8686480.html