zoukankan      html  css  js  c++  java
  • 06Linux基础-Centos7用户管理

    1、用户账号

      1.1用户分类

        linux用户三种角色

        超级用户:root 拥有对系统的最高的管理权限   ID=0

        普通用户: 系统用UID1-999(centos7版本) 1-499(centos6版本)

             本地用户 UID 1000+                 500+

             UID:即每个用户的身份标示,类似于每个人的身份证号码

        虚拟用户:伪用户  一般不会用来登录系统的,他主要用户维持某个服务网的正常运行,如:ftp,apache

        用户和组的关系:

          一对一:一个用户可以存在一个组中     一对多:一个用户可以存在多个组中

          多对一:多个用户可以存在一个组中     多对多:多个用户可以存在多个组中

      1.2 配置文件

      用户配置文件       /etc/passwd      记录了每个用户的一些基本属性,并且对所有用户可读,每一行记录对应一个用户,每行记录通过冒号进行分割

      用户组文件   /etc/group         用户组的所有信息存放地,并且组名不能重复

      用户对应的密码信息  /etc/shadow   因为passwd文件对有所用户是可读的,为安全起见吧密码从passwd中分离出来放入这个单独的文件,该文件只有root用户拥有读权限,从而保证密码安全性

    2、用户管理

    2.1 用户命令

    命令useradd

    useradd -d -u “UID”  -g "初始组" -G “附加组” -s “登录的shell”   用户

    -d :用户主目录路径,可以指定用户家目录

    -M :不创建用户的主目录

    -g:设置用户初始组的名称或数字ID;该组必须是存在的;如果没有设置该选项,useradd会根据/etc/login.defs文件中USERGROUPS_ENAB环境变量进行设置,默认USERGROUPS_ENAB yes会用和用户名相同的名字创建组,GID等于UID

    -G:用户要加入的附加组列表;使用逗号分隔多个组,不要添加空格;如果不设置,用户仅仅加入初始组。(一个用户只允许有一个主组,可以有多个附属组)

    -s:用户默认登录shell的路径;启动过程结束后,默认启动的登录shell在此处设定;请确保使用的shell已经安装,默认是 Bash。有时候需要禁止某些用户执行登录动作,例如用来执行系统服务的用户。将shell设置成 /sbin/nologin 就可以禁止用户登录。

    2.2 添加登录用户

    例:添加一个用户名为zhangsan的用户,并使用bash作为登录的shell

    [root@localhost ~]# useradd zhangsan
    [root@localhost ~]# tail -1 /etc/passwd
    zhangsan:x:1001:1001::/home/zhangsan:/bin/bash

    说明:此命令会自动创建一个zhangsan组,并成为zhangsan用户的默认主组,同时默认的登录shell是bash

    用户账户的全部信息被保存在/etc/passwd文件,这个文件如下格式保存了每一个系统账户的所有信息(字段以“:”分割)

    zhangsan    :     x                 :     1001    :    1001     :       :/home/zhangsan     :/bin/bash

    用户名       :  密码占位符  :   UID      :    GUD    : 用户描述   :用户主目录    :登录后使用shell

    查看系统中支持哪些shell       

    [root@localhost ~]# cat /etc/shells     #查看系统中,支持哪些shell
    /bin/sh
    /bin/bash
    /usr/bin/sh
    /usr/bin/bash

    2.3 指定用户UID :-u 用户ID

    [root@localhost ~]# useradd -u 1100 test
    [root@localhost ~]# id test
    uid=1100(test) gid=1100(test) 组=1100(test)
    [root@localhost ~]# tail -1 /etc/passwd
    test:x:1100:1100::/home/test:/bin/bash
    [root@localhost ~]# ls /home/test/ -a
    . .. .bash_logout .bash_profile .bashrc

     

    2.4 指定用户主目录

    [root@test ~]# useradd  -d /opt/test1 test1

    [root@test ~]# tail -1 /etc/passwd

    test1:x:1102:1102::/opt/test1:/bin/bash

    2.5 指定用户的主组

    例:

    [root@test ~]# useradd  xuegod

    [root@test ~]# id xuegod

    uid=1103(xuegod) gid=1103(xuegod) 组=1103(xuegod) 

    [root@test ~]# useradd  -g xuegod xuegod2

    [root@test ~]# id xuegod2

    uid=1104(xuegod2) gid=1103(xuegod) 组=1103(xuegod)

    2.6 指定用户的附属组

    我们也可以把这个附属组称为补充组,用户可以有0个或多个附加组的成员

    如果一个组有多个成员,我们是可以在/etc/group文件中最后一个字段看到的

    [root@test ~]# useradd  -G xuegod,harry,root xuegod3

     

    2.7 创建用户的另外一个命令

    [root@test ~]# adduser xuegod4

    [root@test ~]# id xuegod4

    uid=1106(xuegod4) gid=1106(xuegod4) 组=1106(xuegod4)

    [root@test ~]# which  adduser

    /usr/sbin/adduser

    [root@test ~]# ll /usr/sbin/adduser

    lrwxrwxrwx. 1 root root 7 9月  19 2017 /usr/sbin/adduser -> useradd  

    注: adduser是useradd的软链接

    2.8 删除用户

    usage: userdel [options] LOGIN

    选项:-r 删除的时候,会同时删除用户的家目录和/var/mail下的目录

    2.9 密码的文件

    [root@test ~]# head -3  /etc/shadow

    root:$6$C88LCVx5ZjfBU7xv$cKcdyNeTFmOYTs9NbRZDTA4hGcbMXc/5hQEWZKCtNyLqlBagrjct.pMfs39iEaF1UbEvcOzWZHMDf9Q5KojXM1::0:99999:7:::

     

    格式如下:

    name

    登录名称,这个必须是系统中的有效账户名

    password

    已加密密码,分为三个部分,第一部分是表示使用哪种哈希算法;第二部分是用于加密哈希的salt;第三部分是已加密的哈希

    哈希算法:$1表示MD5 ; $6 表示SHA-512 ;  $5 SHA-256

    查看帮助说明:

    man 5 passwd

    man 5 shadow

    man 5 group

    man 3 crypt

    lastchange

    最近一次更改密码的日期,以距离1970/1/1的天数表示

    min-age

    不能更改密码的最少天数,最近更改过后几天才可以更改;如果为0表示“最短期限要求”

    maxage

    密码过期时间,必须更改密码前的最多天数

    warning

    密码即将到期的警告期,以天数表示,0表示“不提供警告”

    inactive

    宽限天数,密码到期后

    expire

    账号过期时间,以距离1970/1/1的天数计算 (千年虫)

    blank

    预留字段

    给用户添加密码:

    [root@panda home]# passwd oracle   交互

    Changing password for user oracle.

    New password:

    BAD PASSWORD: The password is shorter than 8 characters

    Retype new password:

    passwd: all authentication tokens updated successfully.

    [root@test ~]# echo 123456 | passwd --stdin xuegod    #不交互

    [root@test ~]# echo 123456 | passwd --stdin harry

    互动: 两个用户的密码一样? 那么shadow中加密的hash值一样吗?  

    答: 不一样。 因为salt不一样

    2段加密的互换还能登陆吗?salt什么时候指定的?

     

    2.10 控制添加用户规则文件的两个文件:/etc/default/useradd 和  /etc/login.defs

    [root@panda home]# egrep -v "^$|^#" /etc/login.defs

    MAIL_DIR/var/spool/mail

    PASS_MAX_DAYS99999

    PASS_MIN_DAYS0

    PASS_MIN_LEN5

    PASS_WARN_AGE7

    UID_MIN                  1000   #用户ID开始的数字

    UID_MAX                 60000  #  用户ID结束的数字

    SYS_UID_MIN               201

    SYS_UID_MAX               999

    GID_MIN                  1000

    GID_MAX                 60000   #ID结束的数字

    SYS_GID_MIN               201

    SYS_GID_MAX               999

    CREATE_HOMEyes    #是否为用户建立home目录

    UMASK           077

    USERGROUPS_ENAB yes

    ENCRYPT_METHOD SHA512    #shadow文件的加密算法

    [root@panda home]# cat /etc/default/useradd

    /etc/default/useradd  文件中的内容如下:

    GROUP=100   #表示可以创建普通组 。 users组ID为100 。如果没有这一条,或者你把users这个组删除了,当你再创建用户时,将提示:useradd: group '100' does not exist 

    HOME=/home   #哪个目录作为用户主目录存放目录。如果你不想让用户家目录在/home下,可以修改这个地方。

    INACTIVE=-1  #是否启用帐号过期。passwd文件中第7栏。即:密码过期后是否会失效的设定值 。INACTIVE:无效。-1表示启用

    EXPIRE=     #帐号终止日期 shadow中第8栏。账号失效的日期 就是 shadow 内的第八字段,你可以直接设定账号在哪个日期后就直接失效,而不理会密码的问题。 通常不会设定此项目,但如果是付费的会员制系统,或许这个字段可以设定!

    SHELL=/bin/bash  #默认shell使用哪个

    SKEL=/etc/skel  #模板目录

    CREATE_MAIL_SPOOL=yes  #是否创建邮箱文件

    命令:chage

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

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

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

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

    -d:上一次更改的日期,为0表示强制在下次登录时更新密码

    例:修改用户test密码信息:让这个用户test首次登录系统时必须更改其密码

    [root@test ~]# chage -d 0 test

    [root@test ~]# ssh test@192.168.1.63

    ...

    Are you sure you want to continue connecting (yes/no)? yes

    Warning: Permanently added '192.168.1.63' (ECDSA) to the list of known hosts.

    test@192.168.1.63's password: 123456

    You must change your password now and login again!  #提示必须改密码

    更改用户 test 的密码 。

    互动: 两个用户的UID可以一样吗?

    [root@test ~]# vim /etc/passwd  # 改 test uid为0

    test:x:0:0:test:/home/test:/bin/bash

    [root@test ~]# su - test

    上一次登录:二 9月 19 22:03:16 CST 2017:0 上

    [test@test ~]# id test

    uid=0(test) gid=0(root) 组=0(root),10(wheel)

    查看用户相关命令:

    #id  用户和组的信息

    #whoami   #查看当前有效用户名

    #who        #显示目前登入系统的用户信息。

    #w           # w命令用于显示已经登陆系统的用户列表

    #users       #用于显示当前登录系统的所有用户的用户列表

    2.11 修改用户信息

    语法:usermod 【参数】用户名

    常用参数:

    -uUID

    -d宿主目录

    -g起始组#只能有一个

    -G附加组#可以有多个

    -s登录shell

    -L      锁定

    1:修改UID

    [test@test ~]# id oracle

    uid=1100(oracle) gid=1100(oracle) 组=1100(oracle)

    [test@test ~]# usermod   -u 1111 oracle

    [test@test ~]# id oracle

    uid=1111(oracle) gid=1100(oracle) 组=1100(oracle)

    2:修改shell

    3:更改用户主目录

    [root@panda home]# usermod -m -d /mnt/market market

    -m选项会自动创建新目录并且移到内容到新目录里面

    4:添加说明信息

    [root@panda mnt]# usermod -c "hello world" market

    总结:如果你记不住命令, 那么直接改vim /etc/passwd 一样的。

    2.12解决模板文件被删之后显示不正常的问题

    [test@test ~]# rm -rf /home/xuegod/.bash*

    [test@test ~]# su - xuegod

    -bash-4.2$ exit    #出现这个不完整的shell提示符,如何处理?

    [test@test ~]# cp /etc/skel/.bash* /home/xuegod/

    [test@test ~]# chown xuegod:xuegod /home/xuegod/.bash*

    [test@test ~]# su - xuegod

    [xuegod@test ~]$

     

    3实战:进入centos7 紧急模式恢复root密码

    实战场景:公司一台centos7系统,忘记root密码了,需要你快速把root密码修改为xuegod,找回root身份。

    首先重启,按↑↓键,进入如下界面,选择第一项,按下e键进行编辑

     

    在此界面找到ro这一项,改为rw  init=/sysroot/bin/sh

     

    改完之后,按下Ctrl+X进入紧急模式

    原理:启动一个shell环境,系统并没有真正的启动

     

    emergency   [iˈmɜ:dʒənsi]  紧急

    换根,修改密码

    chroot命令用来在指定的根目录下运行指令

    chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以/,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为/位置

    在经过 chroot 命令之后,系统读取到的目录和文件将不在是旧系统根下的而是新根下(即被指定的新的位置)的目录结构和文件,

    注:如果系统的selinux开启着,则需要执行命令: touch /.autorelabel

    以更新系统信息,否则重启之后密码修改不会生效

    先退出当前根,reboot重启系统  

     

     

     

     

     

     

     

  • 相关阅读:
    【C语言】用"I love you!"打印心形
    android js与控件交互初探。
    android 调用webview控件,为逆向h5app做准备
    git命令
    kdevelp 导入makefile工程
    解决vmvare关闭过慢
    用python.twisted.logfile每天记录日志,并用不记录stdout中的内容
    关于bjam编译自己模块出错的问题
    俄罗斯黑客在美国监狱中获刑4年,到底是什么原因?
    美国的电信巨头T-Mobile今天披露了另一起数据遭黑客泄露事件
  • 原文地址:https://www.cnblogs.com/hackerlin/p/11274168.html
Copyright © 2011-2022 走看看