摘要:F:那Linux与Windows系统的用户有什么区别? Q:本质都是登陆系统,只不过Linux支持多个用户同时登陆。
技术答疑/课程咨询+小助理V:glab-mary(备用V:B站)
用户指的是能够正常登录Linux或Windows系统(可以理解为你租了房子,能够正常入驻)
F:那Linux与Windows系统的用户有什么区别? Q:本质都是登陆系统,只不过Linux支持多个用户同时登陆。
F:难道Windows就不算多用户操作系统吗? Q:其实不是,在Windows系统中可以创建多个用户,但不允许同一时刻多个用户登陆系统,但Linux系统则允许同一时刻多个用户同时登陆,登陆后相互之间操作并不影响。
或者说我们为什么要创建用户?
1.系统上的每一个进程(运行的程序),都需要一个特定的用户运行 2.通常在公司是使用普通用户管理服务器,因为root权限过大,容易造成故障。
如何查看系统中所存在的用户
4.用户存存放位置
Linux系统会将用户的信息存放在/etc/passwd,记录了用户的信息,但没有密码信息,密码被存放在/etc/shadow中。
也就是说这两个文件非常的重要,不要轻易删除与修改。
1./etc/passwd 配置文件解释如下图,或者man 5 passwd
2./etc/shadow 配置文件解释如下图,或者man 5 shadow
PS: 使用change修改密码过期时间示例
4.最后我们需要了解下系统对用户的一个约定?(约定娶你,就真的会娶吗?)
用户UID系统中约定的含义0超级管理员,最高权限,有着极强的破坏能力1~200系统用户,用来运行系统自带的进程,默认已创建201~999系统用户,用来运行用户安装的程序,所以此类用户无需登录系统1000+普通用户,正常可以登陆系统的用户,权限比较小,能执行的任务有限
超级管理员用户 root 0
普通用户
系统用户:用来启动系统的一些服务和进程的用户,不可以登陆 1-999(centos7)1-499 (centos6)
可登陆用户:能登录系统的用户 1000-65535(centos7)500-65535(centos6)
下面我们就围绕着用户的创建、变更、删除等来讲讲涉及到的命令: useradd、usermod、userdel
1.新增用户使用useradd命令,注意: adduser命令软链接指向useradd命令
useradd相关文件
/etc/default/useradd 创建用户的默认文件
/etc/skel/* 默认复制的文件
2.修改用户信息
使用usermod命令修改用户信息
用户修改usermode-c 修改描述信息
-d 修改家目录,默认不会创建新目录,如果想移动家目录,则需要使用-m
-g 修改用户组
-G 修改用户的附加组,默认情况下是替换
-a 追加附加组
-l newname 修改用户的登录名称
-L 锁定用户,不能登录系统,修改密码默认情况下回解锁
-U 解锁用户
-s 修改用户登录后的shell
-u 修改用户的uid
-e 年-月-日 修改用户的过期时间,过期以后不能登录
3.删除账户
使用userdel命令删除账户
删除用户 userdel默认删除用户不删除用户的家目录
-r 删除家目录
-f 强制删除
默认情况下,用户登录状态下是不能删除用户,强制删除用户以后,用户还是可以用的
4.其他
使用finger命名查询用户信息以及登录信息(yum install finger),示例: finger UserName
使用chfn命令修改用户信息(其实是修改注释),示例: chfn UserName
使用chsh命令修改用户登录Bash Shell,示例: chsh UserName
使用who(当前有哪些用户登录了)、whoami、w检查用户登陆情况
查看用户相关信息id前面我们学习如何创建、修改、删除用户,接下来了解下用户的?
1.useradd创建用户时,系统会以/etc/login.defs、/etc/defaults/useradd两个配置文件作为参照物,
如果在创建用户时指定了参数则会覆盖/etc/login.defs、/etc/defaults/useradd文件默认配置,如未指定则使用默认。
2.当使用useradd创建用户时,创建的用户家目录下会存在 .bash_ 环境变量相关的文件,这些环境变量文件默认从/etc/skel目录中拷贝。
这个默认拷贝环境变量位置是由/etc/defaults/useradd配置文件中定义的。
创建用户后,如需要使用该用户登陆系统则需要为用户设定密码,设定密码使用passwd命令。建议密码复杂度高一些、长度大于10、出现各种特殊字符、无任何规律(不要出现名字,电话,生日等)
PS: 注意事项
1.普通用户只允许变更自己的密码,无法修改其他人密码,并且密码长度必须8位字符
2.管理员用户允许修改任何人的密码,无论密码长度多长或多短。
PS: 推荐密码保存套件工具,支持windows、MacOS、Iphone以及浏览器插件Lastpass官方网站
passwd [OPTION...]
-d 删除指定用户的密码,删除密码之后就不能登录
-l 锁定用户
-u 解锁用户
-e 在下次登录以后强制用户修改密码
-f 强制操作
-x maxday 密码的最长使用时间
-n minday 密码的最短使用时间
-w warnday 密码过期前多长时间提醒
-i inactiveday 密码过期多长时间以后禁用
--stdin 从标准输入读取密码 echo '123'|passwd --stdin peiqi
用户名
密码 $加密方式(默认sha512)$盐$加密后的字符串$
从1970年1月1日到最近一次修改密码经过的时间
密码的最短使用时间(0表示随时可以修改)
密码的最长使用时间(99999表示永不过期)
密码过期多长时间提醒(默认是一周)
密码过期多长时间锁定
从1970年1月1日开始算起,多长时间后账号失效
密码的复杂性策略必须包括数字、大小写、特殊字符
密码必须12位以上
不能为弱口令
必须为随机密码
3个月或者半年修改一次
机器免密登录非对称加密,公钥登录(在已登录上机器机器上生成公钥,copy公钥给要登录的机器):
ssh-keygen 一路回车
ssh-copy-id 要登录的机器
往往公司的服务器对外都是禁止root用户直接登录,所以我们通常使用的都是普通用户,那么问题来了?
当我们使用普通用户执行/sbin目录下的命令时,会发现没有权限运行,这种情况下我们无法正常的管理服务器,那如何才能不使用root用户直接登录系统,同时又保证普通用户能完成日常工作?
PS: 我们可以使用如下两种方式: su、sudo
1.su切换用户,使用普通用户登录,然后使用su命令切换到root。优点:简单 缺点:需要知道root密码
2.sudo提权,当需要使用root权限时进行提权,而无需切换至root用户,优点:安全、方便 缺点:复杂
在使用su切换前,我们需要了解一些预备知识,比如shell分类、环境变量配置文件有哪些
1.Linux Shell主要分为如下几类 交互式shell,等待用户输入执行的命令(终端操作,需要不断提示) 非交互式shell,执行shell脚本,
脚本执行结束后shell自动退出 登陆shell,需要输入用户名和密码才能进入Shell,日常接触的最多的一种 非登陆shell,不需要输入用户和密码就能进入Shell,比如运行bash会开启一个新的会话窗口
2.bash shell配置文件介绍(文件主要保存用户的工作环境) 个人配置文件:~/.bash_profile ~/.bashrc 。
全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc profile类文件, 设定环境变量, 登陆前运行的脚本和命令。
bashrc 类文件, 设定本地变量, 定义命令别名 PS: 如果全局配置和个人配置产生冲突,以个人配置为准。
3.登陆系统后,环境变量配置文件的应用顺序是? 登录式shell配置文件执行顺序: /etc/profile->/etc/profile.d/.sh->/.bash_profile->/.bashrc->/etc/bashrc
非登陆式shell配置文件执行顺序: ~/.bashrc->/etc/bashrc->/etc/profile.d/.sh PS: 验证使用echo在每行添加一个输出即可
4.说了这么多预备知识,那这些和su命令切换用户有什么关系? su - username属于登陆式shell,su username属于非登陆式shell,区别在于加载的环境变量不一样。 su username 属于非登陆式shell
普通用户su -可以直接切换至root用户,但需要输入root用户的密码。 超级管理员root用户使用su - username切换普通用户不需要输入任何密码。su [options] [-] [USER [arg]...]
切换用户的方式
完整切换:su - username 登录式切换,环境变量等都会切换
不完整切换:su username 不会切换用户的环境变量家目录等
root切换普通用户不需要密码,非root用户切换需要密码
切换用户执行命令,并在切换会来
[root@localhost ~]#su - peiqi -c "whoami"
peiqi
su命令在切换用户身份时,如果每个普通用户都能拿到root用户的密码,当其中某个用户不小心泄漏了root的密码,那系统会变得非常不安全。为了改进这个问题,从而产生了sudo这个命令。
其实sudo就相当于给某个普通用户埋下了浩克(hulk)的种子,当需要执行一些高级操作时,进行发怒,但正常情况下还是普通人,还是会受到限制。
1.如何快速埋下hulk的种子呢?
2.埋下了hulk种子后又如何提权使用呢?
3.开启某个命令的使用权限
提升的权限太大,能否有办法限制仅开启某个命令的使用权限?其他命令不允许?
第一种方式:使用sudo中自带的别名操作,将多个用户定义成一个组,这个组只有sudo认可
第二种方式:使用groupadd添加组,然后给组分配sudo的权限,如果有新用户加入,直接将用户添加到该组.
4.sudo命令的执行流程
普通用户执行sudo命令时, 会检查/var/db/sudo是否存在时间戳缓存
如果存在则不需要输入密码, 否则需要输入用户与密码
输入密码会检测是否该用户是否拥有该权限
如果有则执行,否则报错退出
执行本身不能执行的命令sudo 配置文件为/etc/sudoers
peiqi ALL=(ALL) NOPASSWD:ALL
其中的NOPASSWD 是不需要输入密码
其实就是一种逻辑层面的定义,逻辑上将多个用户归纳至一个组,当我们对组操作,其实就相当于对组中的所有用户操作。
2.组有类别对于用户来说,组有几种类别?
基本组,用户只能有一个基本组,创建时可通过-g指定,如未指定则创建一个默认的组(与用户同名),简称私有组
附加组,基本组不能满足授权要求,创建附加组,将用户加入该组,用户可以属于多个附加组
组账户信息保存在/etc/group和/etc/gshadow两个文件中。重点关注group
1./etc/group 配置文件解释如下图
head -1 /etc/group
2./etc/gshadow 配置文件解释如下图
超级用户组 root 0
普通用户组
系统用户组 1-999(centos7) 1-499(centos6)
可登陆用户组 1000-65535(centos7)500-65535 (centos6)
groupadd
-g 指定组id
-r 创建系统用户组
/etc/group
组名
密码占位
组成员
/etc/gshadow
组名
密码
组管理员的密码
组成员
1 groupadd新增组使用groupadd命令新增组,groupadd [-g GID] groupname
2 groupmod修改组
使用groupmod命令修改组
删除时需要注意,如果用户存在基本组则无法直接删除该组,如果删除用户则会移除默认的私有组,而不会移除基本组。
使用gpasswd设置组密码[扩展,可以不会
5 newgrp切换基本组身份修改组信息groupmod
-g 修改gid
-n 修改组名
来源:小贺科技观察