Linux用户管理
Linux系统用户管理
1、用户管理
2、Linux用户命令
3、用户创建的原理
4、密码管理
5、组命令管理
6、身份切换
7、sudo提升权限
我们现在所使用的操作系统都是Linux操作系统。
用户和组存在的意义:
1、系统上的每一个进程(运行的进程)都需要特定的用户运行
2、每一个文件都有特定的用户拥有
3、访问文件或目录受到用户的限制
4、进程能够以何种方式访问某一个文件或目录,与进程所管理的用户有关
用户uid的分类
0-65535
0 超级管理员
1-200 系统用户,由系统分配给系统进程使用
201-999 系统用户,用来运行服务账户,不需要登陆系统(动态分配)
1000+ 常规用户
注意:Linux7之前的惯例是uid 1-499用于系统用户,而500+则用于普通用户
组类别:
基本组 优先使用基本组,用户只能始于一个基本组,用户默认基本组
附加组 基本组不能满足授权要求,创建附加组,用户可以属于多个附加组
私有组 创建用户时如果没有指定基本组,系统会创建和用户同名的组
1、用户管理
用户信息存放在/etc/passwd,用户密码信息保存至/etc/shadow,这两根文件是Linux系统中最重要的文件之一。
如果没有这两个文件或者这两个文件出问题,会导致无法正常登陆Linux系统。
[root@lzg ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
/etc/passwd 由':'分割成7个字段,每个字段的具体含义如下:
字段名称
1、用户名称 #用户的账户名称
2、密码占位符 #存放账户的口令,暂用x表示,密码保存在/etc/shadow
3、用户的UID #用户标识号
4、用户基本组GID #组标识号
5、用户注释 #用户详细信息
6、用户家目录 #用户家目录,root家目录是/root,普通用户的家目录存在/home/useranme,可自定义
7、用户登陆Shell #用户登陆Linux使用的shell,cat /etc/shells
/etc/shadow 用户密码文件
[root@lzg ~]# cat /etc/shadow
ceshi1:!!:18183:0:99999:7:::
/etc/shadow 由':'分割成9个字段,每个字段的具体含义如下:
字段名称
1、用户登陆名 #用户的账户名称
2、加密后的密码 #用户密码,这是加密过的口令(未设置密码为!!)
3、最近一次密码更改时间 #从1970年到最近一次更改密码时间之间过了多少天
4、密码最少使用几天 #密码最少使用几天才可以更改密码(0表示无限制)
5、密码最长使用几天 #密码使用多少天需要修改密码(默认99999永不过期)
6、密码到期前警告期限 #密码过期前多少天提醒用户更改密码(默认过期提前7天告警)
7、密码到期后保持活动的天数 #在此期间内,用户依然可以登陆系统并更改密码,指定天数过后,账户被锁定
8、账户到期时间 #从1970年起,账户在这个日期前可使用,到期后失效
9、标志 #保留
密码格式:
$a$b$c
a:表示加密算法
b:salt随机值
c:加密后的值
使用chage更改用户密码使用情况
-d 设置最近一次更改密码时间,0下次登陆系统强制修改密码
-m 设置用户两次改变密码之间使用“最小天数”
-M 设置用户两次改变密码之前使用“最大天数”
-W 设置密码更改告警时间,将过期警告天数设为“警告天数”
-I 设置密码过期天数后,密码为失效状态
-E 设置用户过去时间,账户失效后无法登陆
-l 显示用户详细信息(各个时间段)
2、Linux用户命令
添加用户前需要确定:
确定用户的默认组是否有特殊要求
确定用户是否允许登陆
确定用户的密码策略
确定用户的有效期
确定用户的uid是否有特殊要求
使用useradd命令新增账户,注意:adduser命令软链接指向useradd命令
-u:指定用户的UID,不能和现有ID冲突
-g:指定用户默认基本组
-G:指定用户附加组,用逗号隔开添加多个附加组
-d:指定用户家目录
-c:指定用户注释信息
-M:不建立家目录
-s:指定用户默认shell
-r:创建系统账户,没有家目录
[root@lzg ~]# groupadd sa
[root@lzg ~]# groupadd dba
[root@lzg ~]# groupadd students
[root@lzg ~]# tail -3 /etc/group
sa:x:1000:oldboy
dba:x:1001:oldboy
students:x:1002:
[root@lzg ~]#
[root@lzg ~]# useradd -u 5001 -g students -G sa,dba -c "2019 new students" -d /home/oldboy -s /bin/bash oldboy
[root@lzg ~]# tail -1 /etc/passwd
oldboy:x:5001:1002:2019 new students:/home/oldboy:/bin/bash
[root@lzg ~]#
[root@lzg ~]# useradd -M -s /sbin/nologin mysql
[root@lzg ~]# useradd -r -s /sbin/nologin mysql1
使用usermod命令修改用户组:
-u:修改用户的UID
-g:修改用户所属的基本组
-G:修改用户族,使用逗号隔开多个附加组,覆盖原有的附加组
-a:追加更多的附加组,必须和-G使用,-aG追加附加组
-md:家目录迁移,必须和-d一起使用,移动用户的家目录到新的位置
-d:指定用户的家目录新位置(单独使用无意义)
-c:修改用户的注释信息
-s:更改用户使用的shell
-l:更改用户登录名
-L:锁定用户
-U:解锁用户
finger
chfn
使用finger命令查询用户信息以及登陆信息:
[root@lzg ~]# finger oldboy
Login: oldboy Name: 2019 new students
Directory: /home/oldboy Shell: /bin/bash
Never logged in.
No mail.
No Plan.
使用chfn修改用户信息:
[root@lzg ~]# chfn oldboy
Changing finger information for oldboy.
名称 [2019 new students]: 2019 students
办公 []: 12345678
办公电话 []: 18396542014
住宅电话 []: 17756895213
Finger information changed.
使用finger再次查看:
[root@lzg ~]# finger oldboy
Login: oldboy Name: 2019 students
Directory: /home/oldboy Shell: /bin/bash
Office: 12345678, +1-839-654-2014 Home Phone: +1-775-689-5213
Never logged in.
No mail.
No Plan.
[root@lzg ~]#
使用chsh命令更改用户登陆shell:
[root@lzg ~]# chsh oldboy
Changing shell for oldboy.
New shell [/sbin/nologin]: /bin/bash
Shell changed.
[root@lzg ~]#
userdel -r :删除用户,-r 删除家目录
3、用户创建的原理
Linux创建用户默认会读取/etc/defaults/useradd配置文件,如果当指定参数时,则使用指定参数,如果不指定参数,默认使用
/etc/defaults/useradd中的配置,当我们使用useradd命令新建用户时,用户家目录下会产生相应的.bash_*文件,
这些文件默认是从/etc/skel目录中复制,如需变更环境拷贝目录站点可修改:/etc/defaults/useradd的配置文件。
注意:如果执行useradd命令新建用户时,指定了参数,就会覆盖/etc/defaults/useradd默认的配置。
[root@lzg ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home #把用户的家目录建在/home中
INACTIVE=-1 #是否启用账户过期停权,-1表示不启用
EXPIRE= #账户终止日期,不设置表示不启用
SHELL=/bin/bash #新用户默认所有的shell类型
SKEL=/etc/skel #配置新用户家目录的默认文件存放路径
CREATE_MAIL_SPOOL=yes #创建mail文件
[root@lzg ~]# cat /etc/login.defs 用户默认属性设置文件(模板文件)
[root@lzg ~]# grep -E -v "^#|^$" /etc/login.defs
MAIL_DIR /var/spool/mail #邮箱目录
PASS_MAX_DAYS 99999 #密码最大天数
PASS_MIN_DAYS 0 #密码最小天数
PASS_MIN_LEN 5 #密码等级
PASS_WARN_AGE 7 #密码到期后保持活跃的天数
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512
4、密码管理
创建完账户后,默认是没有设置密码的,所以该账户是没有办法登陆操作系统,只有使用passwd设置好密码后方可登陆系统,
使用passwd为用户创建密码时,为了安全起见,请尽量设置复杂一些,可以按照如下规则设置密码:
1、长度大于10位字符
2、密码中包含大小写字母,数字,以及特殊符号等
3、不规则性(不要出现自己名字,公司名字,自己电话,等简单的密码格式)
需要注意:
1、普通用户只能更改自己的密码
2、管理员root能更改任何用户的密码
使用passwd + 用户名,修改用户密码;passwd后面不加用户则是修改当前账户密码。
随机密码生成工具:
1、系统内置变量生成随机密码
[root@lzg ~]# echo $RANDOM | md5sum | cut -c 1-10
abead6c80e
2、mkpasswd密码生成工具expect:
[root@lzg ~]# yum install -y expect
[root@lzg ~]# mkpasswd -l 15 -d 3 -C 5 #-l指定密码长度(默认10位),-d表示要有3个数字,-C表示5个大写
ad4gZR8H_RX4mmg
选项:
-l #指定密码长度
-d #指定数字个数
-c #指定小写字符个数
-C #指定大写字符个数
-s #特殊字符个数
-v (verbose, show passwd interaction)
-p prog (program to set password, default = /bin/passwd)
3、Lastpass付费软件
回顾:
1、用户相关文件
/etc/passwd
/etc/shadow
/etc/skel
/etc/defaults/useradd
/etc/login.defs
2、用户相关命令
useradd ***
usermod ***
userdel ***
passwd ***
chage ***
chfn ***
chsh ***
who
whowhoami
id
finger
用户创建的流程
用户的意义
扩展:
如何将一个普通用户变为管理员
sudo
5、组命令管理
组账户信息保存在/etc/group和/etc/gshadow两个文件中
/etc/group 组账户信息
[root@lzg ~]# head -2 /etc/group
root:x:0:
bin:x:1:
/etc/group 由 ':' 分割成4个字段,每个字段的具体含义如下:
字段名称
1、组账户名称 #组的名称
2、密码占位符 #组的密码(存在/etc/gshadow)
3、组GID #组GID信息
4、组成员 #这样仅显示附加成员,基本成员不显示
/etc/gshadow 组密码信息
[root@lzg ~]# head -2 /etc/gshadow
root:::
bin:::
/etc/gshadow 由 ':' 分割成4个字段,每个字段的具体含义如下:
字段名称
1、组账户名称 #组的名称
2、密码占位符 #组的密码
3、组管理员 #组管理员
4、组成员 #这样仅显示附加成员,基本成员不显示
使用groupadd命令新增组
语法:groupadd [-g GID] groupname
不指定gid默认从1000开始
groupmod 修改组信息
groupdel 删除组,只能删除附加组,不能删除基本组
gpasswd 设置组密码
newgrp 切换基本组信息
6、身份切换
Linux系统中,有时候普通用户有些事情是没办法操作的,出发时root用户才能做到,这时就需要临时切换到root身份来做事了,那么在学习如何切换用户之前,我们先来了解用户工作环境
Shell分类
交互式shell 等待用户输入执行提交的命令(终端操作),exit退出
非交互式shell 执行shell脚本,脚本执行结束shell自动退出
1.把交互命令换成同等功能的非交互命令
2.提前做好应答文件
登陆shell 需要输入用户名和密码才能进入shell,su - oldboy
非登录shell 不需要输入用户名和密码就能进入,比如执行 sh bash
查看登陆shell
[root@lzg ~]# yum install -y psmisc
[root@lzg ~]# pstree
个人配置文件:~/.bash_profile ~/.bashrc
全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc
[root@lzg ~]# cat /etc/locale.conf #默认语音环境变量,永久生效,CentoOS7
LANG="zh_CN.UTF-8"
profile类文件,设定环境变量,登陆前运行的脚本和命令
bashrc类文件,设定本地变量,定义命令别命
全局配置和个人配置冲突,以个人设置为准
shell配置文件应用顺序
登陆式shell配置文件执行顺序
先执行:/etc/profile -> /etc/profile.d/*.sh -> ~/.bash_profile -> ~/.bashrc -> /etc/bashrc(最后)
非登陆式shell配置文件执行顺序
~/.bashrc -> /etc/bashrc -> /etc/profile.d/*.sh
如何验证登陆shell和非登陆shell,配置文件执行顺序,只需要在没给配置文件加一段"echo hello"命令测试即可
注意:添加echo字段必须放在第二行
最后通过登陆shell和非登陆shell方式登陆Linux,即可验证执行顺序
以某个用户的身份执行某个服务,使用su - username -c 'ifconfig'
[root@lzg ~]# su - oldboy -c 'ifconfig'
[root@lzg ~]# su - oldboy -c 'touch /tmp/test11.txt' #创建文件
[root@lzg ~]# ls -l /tmp/
总用量 0
-rw-r--r--. 1 oldboy oldboy 0 12月 2 17:16 test11.txt #归属oldboy
7、sudo提升权限
su切换用户身份,每个普通用户都能够切换到root身份,如果某个用户不小心泄露了root密码,那系统会变的非常不安全。
为了改进这个问题,从而产生了sudo这个命令,使用sudo执行一个root才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码,而是用户自己的密码。
默认只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预设定的,即,使用visudo命令去编辑相关的配置文件/etc/sudoers
CentOS7提权方法,授权用户具有管理员所有的权限:
[root@lzg ~]# usermod -G wheel oldboy
/var/log/message #公共日志
/var/log/secure #安全日志