zoukankan      html  css  js  c++  java
  • Liunx学习总结(三)--用户和用户组管理

    用户和组的基本概念

    用户和组是操作系统中一种身份认证资源。

    每个用户都有用户名、用户的唯一编号 uid(user id)、所属组及其默认的 shell,可能还有密码、家目录、附属组、注释信息等。

    每个组也有自己的名称、组唯一编号 gid(group id)。一般来说,gid 和 uid 是可以不相同的,但基本上约定俗成绝大多数都会让它们保持一致。

    组分为主组 (primary group) 和辅助组 (secondary group) 两种,用户一定会属于某个主组,也可以同时加入多个辅助组。

    用户组分类

    * 系统管理员

    具有使用系统所有权限的用户,其 UID 为 0,默认名称为 root。因为 uid 默认具有唯一性,所以超级管理员默认只能有一个(如何添加额外的超级管理员,见下文)。

    * 普通用户

    即一般用户,其使用系统的权限受限,默认只能执行 /bin、/usr/bin、/usr/local/bin 和自己目录下的命令。尽管普通用户权限受到限制,但是它对自己目录下的文件是有所有权限的。其 UID 为500-60000之间。

    * 系统用户

    保障系统运行的用户,一般不提供密码登录系统,其 UID 为1-499之间。

    相关配置文件

    1) /etc/passwd

    /etc/passwd 文件存放系统用户配置,记录用户的基本属性,对所有用户来说都是可读的。每一行记录对应一个用户,属性以冒号间隔,格式如下:

    用户名:口令:用户标识号:组标识号:注释性描述:主目录:默认shell 
    

    实例:

    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    

    注:

    • 第二列默认都为 x 。在以前老版本的系统上,第二列是存放用户密码的,但是密码和用户信息放在一起不便于管理(密钥要保证其特殊属性),所以后来将密码单独放在另一个文件/etc/shadow中,这里就都写成 x 了。
    • 用户的默认 shell 表示的是用户登录(如果允许登录)时的环境或执行的命令。例如 shell 为 /bin/bash 时,表示登录时就执行 /bin/bash 命令进入bash环境;shell为/sbin/nologin 表示该用户不能登录,之所以不能登录不是因为指定了这个特殊的程序,而是由/sbin/nologin这个程序的功能实现的,假如修改Linux的源代码,将/sbin/nologin这个程序变成可登录,那么shell为/sbin/nologin时也是可以登录的。

    2) /etc/shadow

    /etc/shadow 文件存放用户密码信息。该文件具有特殊属性,除了超级管理员,任何人都不能直接读取和修改该文件,而用户自身之所以能修改密码,则是因为该文件的suid属性,使得修改密码时临时提升为root权限。

    文件类似于 passwd,也是每一行记录代表一个用户,格式如下:

    实例:

    root:$1$isNMgfFT$Xs7zD53r4EWLSPpxw5lhz0:17742:0:99999:7:::
    bin:*:17110:0:99999:7:::
    
      1. 用户名
      1. 加密后的密码
    • 3)上次更改密码时间距 1970 年 1 月 1 日的天数。
    • 4)密码更改后,不可以更改的天数。
    • 5)密码更改后,必须再次更改的天数(即密码的有效期)。
    • 6)密码过期之前提前多少天提醒用户(在正确登录时)。
    • 7)密码过期之后多少天帐户过期(在正确登录时)。
    • 8)帐户过期时间(自 1970-1-1 到该天经过了多少天来表示)。
    • 9)保留字段。

    注:第二列还有其他含义:

    • 该列留空,即"::",表示该用户没有密码。
    • 该列为"!",即":!:",表示该用户被锁,被锁将无法登陆,但是可能其他的登录方式是不受限制的,如ssh key的方式,su的方式。
    • 该列为"",即"::",也表示该用户被锁,和"!"效果是一样的。
    • 该列以"!"或"!!"开头,则也表示该用户被锁。
    • 该列为"!!",即":!!:",表示该用户从来没设置过密码。
    • 如果格式为"(id)salt(hashed",则表示该用户密码正常。其中)id$的id表示密码的加密算法,(1)表示使用MD5算法,(2a)表示使用Blowfish算法,"(2y)"是另一算法长度的Blowfish,"(5)"表示SHA-256算法,而"(6)"表示SHA-512算法,可见上面的结果中都是使用sha-512算法的。(5)(6)这两种算法的破解难度远高于MD5。(salt)是加密时使用的salt,$hashed才是真正的密码部分。

    3) /etc/group

    /etc/group 文件是用户组群的主要配置文件,内容包括用户组群的名称、GID等信息,并且能显示出用户是归属于哪一个或者哪几个组群。每一行表示一个组群账户的信息,每一行有4段,每段之间用“:”分隔开:

    groupname :passwd : GID : userlist
    
    • groupname:组名
    • passwd:密码位,统一表示为“x”
    • GID:
      * CentOS6 为系统组预留1-499;可以通过/etc/login.defs文件查看GID的最大和最小值
      * CentOS7 为系统组预留1-999;可以通过/etc/login.defs文件查看GID的最大和最小值
    • 以当前组为附加组的用户列表(分隔符为逗号):
      * 当成员先把该组当作辅助组,再转成主要组时,用户列表不改变。
      * 当成员离开该组时,用户列表被删除。

    4) /etc/gshadow

    /etc/gshadow 是 /etc/group 的加密文件,用户组群的管理密码就存放在这个文件中。 /etc/gshadow 文件中每一行记录一个用户组群信息,每一行有4段,每段之间用“:”分隔开。文件格式如下:

    • groupname:组名
    • 密码位
    • 组管理员列表:
      * 只能由root任命或撤销,可以同时有多名,以,为间隔;
      * 权利:可以修改组密码,可以将用户从该组(辅助组)当中添加或删除。
    • 以当前组作为附加组的成员列表(以逗号为分隔符):
      * 当成员先把该组当作附加组,再转成主要组时,成员列表不改变;
      * 当成员离开该组时,成员列表被删除。

    5) /etc/skel/*

    /etc/skel/* 该目录下的所有文件都是隐藏文件,用来存放新用户配置文件的目录,当新用户被创建时,该目录下的文件会被自动地复制到新用户的家目录下。通过修改、添加、删除/etc/skel目录下的文件,可为新创建的用户提供统一的、标准的、初始化用户环境。若用户家目录下的配置文件发生故障时,将/etc/skel目录下相应的文件复制到用户家目录下即可。

    6)/etc/login.defs

    用来定义创建一个用户时的默认设置,比如创建邮箱、分配权限、指定用户的 UID 和 GID 的范围,用户的过期时间、是否需要创建用户主目录等等。

    7)/etc/default/useradd

    创建用户时的默认配置。useradd -D 修改的就是此文件。

    # useradd defaults file
    GROUP=100       # 在useradd使用-N或/etc/login.defs中USERGROUPS_ENAB=no时表示创建用户时不创建同用户名的主组(primary group),
                    # 此时新建的用户将默认以此组为主组,网上关于该设置的很多说明都是错的,具体可看man useradd的-g选项或useradd -D的-g选项
    HOME=/home      # 把用户的家目录建在/home中
    INACTIVE=-1     # 是否启用帐号过期设置(是帐号过期不是密码过期),-1表示不启用
    EXPIRE=         # 帐号过期时间,不设置表示不启用
    SHELL=/bin/bash # 新建用户默认的shell类型
    SKEL=/etc/skel  # 指定骨架目录,前文的/etc/skel就在这里
    CREATE_MAIL_SPOOL=yes  # 是否创建用户mail缓冲
    

    用户管理命令

    1) 新建用户账号

    语法格式
    useradd 选项 用户名
    

    选项:

    -c comment 指定一段注释性描述。
    -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
    -g 用户组 指定用户所属的用户组。
    -G 用户组,用户组 指定用户所属的附加组。
    -s Shell文件 指定用户的登录Shell。
    -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
    

    用户名:

    指定新账号的登录名。
    
    实例
    useradd -d /usr/marklogzhu -m marklogzhu
    

    此命令创建了一个用户 marklogzhu ,其中-d和-m选项用来为登录名marklogzhu产生一个主目录/usr/marklogzhu(/usr为默认的用户主目录所在的父目录)。

    2) 修改用户账号

    语法格式
    usermod 选项 用户名
    

    选项:

    常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。另外,有些系统可以使用选项:-l 新用户名,这个选项指定一个新的账号,即将原来的用户名改为新的用户名。
    
    实例
     usermod  -l  新用户名  -d  /usr/新用户名  -m  老用户名  
    

    3) 删除用户账号

    语法格式
    userdel 选项 用户名
    

    常用的选项是 -r,它的作用是把用户的主目录一起删除。

    实例
    userdel -r newmarklogzhu
    

    4) 用户口令

    用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。

    指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:

    passwd 选项 用户名
    

    选项:

    -l 锁定口令,即禁用账号。
    -u 口令解锁。
    -d 使账号无口令。
    -f 强迫用户下次登录时修改口令。
    
    实例

    实例1:指定自己的口令

    [root@VM_0_15_centos usr]# passwd
    Changing password for user root.
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    

    实例2:超级管理员指定其他用户的口令

    [root@VM_0_15_centos usr]# passwd marklogzhu
    Changing password for user marklogzhu.
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    

    用户组管理命令

    每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

    用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。

    1) 新增用户组

    语法格式
    groupadd 选项 用户组
    

    选项:

    -g GID 指定新用户组的组标识号(GID)。
    -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
    
    实例
     groupadd group1
    

    新增加一个用户组 group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。

    2)删除用户组

    语法格式
    groupdel 用户组
    
    实例
    groupdel group1
    

    3)修改用户组

    语法格式
    groupmod 选项 用户组
    

    选项:

    -g GID 为用户组指定新的组标识号。
    -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
    -n 新用户组 将用户组的名字改为新名字
    
    实例

    将组group2的标识号改为10000,组名修改为group3。

     groupmod –g 10000 -n group3 group2
    

    4) 切换用户组

    一个用户可以同时属于多个用户组,用户可以在用户组之间切换,以便具有其他用户组的权限。

    语法格式
    newgrp  用户组
    
    实例

    切换当前用户到 root 组。

    newgrp root
    

    常用命令

    1) 显示当前登陆用户

    users
    

    2) id

    id 选项 用户名
    

    选项:

    -u:得到uid
    -n:得到用户名而不是uid
    -z:无任何空白字符输出模式,不能在默认的格式下使用。
    

    3) 查看最近登陆用户

    last 选项
    

    选项:

    -n:显示记录数
    

    其实查看的是 /var/log/wtmp 文件。

    4) 查看登陆失败用户

    lastb 选项
    

    选项:

    -n:显示记录数
    

    5) 切换用户或以指定用户运行命令

    语法格式
    su(选项) 要切换身份的用户
    

    选项:

    -c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份;
    -f或——fast:适用于csh与tsch,使shell不用去读取启动文件;
    -l或——login:改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量;
    -m,-p或--preserve-environment:变更身份时,不要变更环境变量;
    -s<shell>或--shell=<shell>:指定要执行的shell;
    --help:显示帮助;
    --version;显示版本信息。
    
    实例

    变更帐号为 root 并在执行 ls 指令后退出,变回原使用者。

    su -c ls root
    

    6) 提权操作

    有时候需要root 权限,但是又不想将 root 账号告知,面对这种场景就可以使用提权操作,以其他人的身份执行。

    语法格式
    sudo (选项) (参数)
    

    选项:

    -b:在后台执行指令;
    -h:显示帮助;
    -H:将HOME环境变量设为新身份的HOME环境变量;
    -k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。
    -l:列出目前用户可执行与无法执行的指令;
    -p:改变询问密码的提示符号;
    -s<shell>:执行指定的shell;
    -u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
    -v:延长密码有效期限5分钟;
    -V :显示版本信息。
    

    参数:

    指令:需要运行的指令和对应的参数。
    

    配置 sudo 必须通过编辑 /etc/sudoers 文件,而且只有超级用户才可以修改它,还必须使用 visudo 编辑。之所以使用 visudo 有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用 visudo 来检查一下语法。

    实例

    增加 marklogzhu 账号 sudo 权限

    1)进入 sudoers 文件: vim /etc/sudoers
    2)找到 root ALL=(ALL) ALL ,在下面新增 marklogzhu ALL=(ALL) ALL
    

    我们知道 etc/shadow 文件是只有管理员可以查看的,我们试下没有提权时能否查看:

    [marklogzhu@VM_0_15_centos /]$ cat etc/shadow
    cat: etc/shadow: Permission denied
    

    提示没有权限,我们试下提权:

    [marklogzhu@VM_0_15_centos /]$ sudo !!
    sudo cat etc/shadow
    
    We trust you have received the usual lecture from the local System
    Administrator. It usually boils down to these three things:
    
        #1) Respect the privacy of others.
        #2) Think before you type.
        #3) With great power comes great responsibility.
    
    [sudo] password for marklogzhu: 
    root:$1$L0j6SBPg$39oiYVrzXev1FXOWqQAqm/:17758:0:99999:7:::
    bin:*:17110:0:99999:7:::
    

    发现可以查看数据了!
    注:!! 表示重复上一条命令

  • 相关阅读:
    CentOS7中使用yum安装Nginx的方法
    Flask&&人工智能AI --4
    Flask&&人工智能AI --3
    Flask&&人工智能AI --2
    Flask&&人工智能AI --1
    Linux--8
    Linux--7
    django 请求生命周期
    Linux--6 redis订阅发布、持久化、集群cluster、nginx入门
    Node.js Addons翻译(C/C++扩展)
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/11398856.html
Copyright © 2011-2022 走看看