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 [email protected]

...

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.

[email protected]'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重启系统  

 

 

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/hackerlin/p/11274168.html