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重启系统