扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本周继续学习了bash的相关知识,bash的变量需要注意书写规范和强弱变量以及bash变量的种类等,然后开始学习用户和组的管理,重点学习了组管理命令,用户管理的命令,用户认证相关的命令,组认证相关的命令,其他命令这些知识点,需要我们课后学习记忆。
10年积累的成都网站制作、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计制作后付款的网站建设流程,更有新罗免费网站建设让你可以放心的选择与我们合作。bash 特性之变量
程序=指令+数据
数据:文件 变量
变量:一段连续的内存空间cell=8bit (32bit字长支持4GB内存)为这一段内存空间取名 称之为变量名:在这段内存空间中所存储的数据称为变量值
赋值操作:
= 赋值操作符
赋值方法 变量=变量值(VARNAME=VALUE)
变量的命名规范
1 只能以字母或者下划线为首字符 不能使用数字 后面可以是任意字母 数字 下划线
2 大小写严格区分
3 见名知意
4 书写规范
1)全大写:FILES
2)驼峰式:MyFiles
5 不能与已知变量名相同
根据不同的编程语言 变量可以分为两类
强变量:必须在使用前声明 而且要声明变量的类型 严格区分变量的类型
255 字符类型:38bytes
整数型:1byte
null:
弱变量:可以随时使用随时声明 甚至可以不声明即使用 另外不对变量类型做硬性要求 如果没有指明变量类型 统一按照字符型对待
bash的变量即为弱变量:
引用变量的值 :${变量名}=$变量名 也称为变量替换
bash的变量种类:
全局变量(环境变量):作用范围为整个shell进程 包括其子shell
本地变量:作用范围仅仅只是当前登录的shell 不包括子shell
局部变量:作用范围仅仅只是当前的程序段 一般用于函数
默认全局变量:
位置参数变量:$1 $2 $3 $4……$n
特殊变量 $? $# $@ $* $$……
$? 表示 展开为最近一次所执行的命令状态返回值(退出状态)
$# 表示 位置参数的个数 以十进制表示
$* 表示 从一开始展开为位置参数 当使用双引号引用展开的时候 它展开为以特殊变量“IFS”的第一个字符分隔的值
$@ 表示 从一开始展开为位置参数 当使用双引号引用展开的时候 它展开为一个单独的字符串
$$ 表示 展开为当前shell的进程的标识符
$0 表示 展开为当前shell或者shell脚本的文件名
变量的使用
变量的赋值:变量=标量名 声明本地变量
撤销变量:~]# unset 变量名
声明环境变量
export 变量
export 变量=变量名
declare
-a声明索引数组(如果支持)
-A声明关联数组(如果支持)
-i声明整型变量
-l声明变量并将变量值中的字符转换为小写字母
-u声明变量并将变量值中的字符转换为大写字母
-x声明变量并将其导出为环境变量
-r声明变量为只读变量(常量)
查看环境变量
set
export
env
声明局部变量
local 变量=变量名
配置文件:
通用配置文件 /etc/bashrc /etc/profile
私人配置文件~/.bashrc ~/.bash_profile
注意 一般情况下 声明变量都是现做现用 因此我们并不需要改配置文件
用户和组的管理
用户账户
组账户
权限的分配
Cisco 思科公司开发的AAA认证体系
Authentication 认证 核实身份是否正确
Authorization 授权 对已经核实身份的用户进行资源分配
Accounting 审计 监管资源被使用的情况
多用户、多任务的系统
能够实现资源使用和完成任务的主体是:应用程序进程
安全上下文:secure context
进程是以其发起者的身份运行的 可以理解为进程的所有者就是发起者 会将发起者的信息标记在进程上
当进程试图去访问资源的时候 安全上下文会比对进程的所有者和资源所有者的关系
首先查看进程的所有者是不是资源的所有者 如果是 就按照属主的权限使用资源
如果不是 则判断进程的所有者是否属于资源所属组 如果是 按照属组的权限使用资源
如果不是 则直接使用资源的其他人访问权限来使用资源
用户账户: 就是计算机操作者在操作过程中的身份映射 在满足了认证条件之后的身份映射
1.用户分类
超级用户 (管理员)root
普通用户
系统用户: 为了保证安全 必须让那些运行在后台的进程或者服务类以非管理员的身份运行 这类用户一般不需要登录到系统
登录用户: 能够正常使用整个系统资源的用户
用户的标识
用户的登录名称: 为操作者准备的简单易记的字符串标识
用户的ID (UID): 为计算机系统准备的数字标识
超级用户的ID号码为: 0
系统用户:
centos5、6:1-499
centos7: 1-999
登录用户 :
centos5、6: 500 -60000
centos7 : 1000-60000
60000以上的标识符为用户自定义标识
名称解析:
把名字解析成UID
解析库:/etc/passwd
系统利用解析库完成认证机制 验证登录用户是否是你声称的那个人
用户的认证信息库:/etc/shadow
组的认证信息库:/etc/group
采用密码认证的机制:
设置密码的一般性策略
1.尽量使用随机字串作为密码
2.密码长度一般不要少于八个字符
3.密码中至少包括大写字母、小写字母、数字、标点符号四类中的三类
4.不定期更换密码
在Linux中 保存中认证库中的密码信息是经过加密保存的
hash单项加密算法:抽取原始数据的特征信息,数据指纹
单项加密算法的特征:
1.只要数据相同 其加密结果就必然相同
2.无论数据多大 其加密结果定长输出
3.雪崩效应
4.不可逆
单项加密常用的算法:
1.md5:Message Digest 消息摘要 128bit的定长输出
2.sha1:Secure Hash Algorithm 安全的哈希算法 160bit 定长输出
3.sha224
4.sha256
5.sha384
6.sha512
salt:随机数
/dev/random: 仅仅只是从熵池中返回随机数 如果熵池随机数耗尽 则进程被阻塞
/dev/urandom: 试图先从熵池中返回随机数 如果熵池耗尽 则利用伪随机数生成器生产伪随机数
最终认证的字符串:算法+salt+密码
在认证库中存放的信息:$6$salt$crytped_password
用户组:
将具有某些相同或者相似属性的用户联系在一起以便集中授权的容器
组类别;
管理员组:
普通用户组:
系统组:
登录组:
组的标识方法:
组名:方便操作者使用的
组的ID(GID):为系统提供组标识
管理员组:0
系统组:
centos5、6: 1-499
centos7 : 1-999
登录组:
centos5、6: 500 -60000
centos7 : 1000-60000
解析库:/etc/group
组也需要认证,组也有认证库:/etc/gpasswd
组也需要密码保护
如果组没有设置密码保护的话 则不能随时加入
以用户为核心来对组进行分类:
用户的主要组(基本组):primary group
对用户来说 这样的组必须要有而且只能有一个
用户的附加组(附属组、额外组):Addition Group
这样的组对于用户来说 可以没有 也可以有多个
根据组所容纳的用户来分:
私有组:组名与用户登录名相同 并且组中只有此用户
公共组:组中可以包含其他多个不同用户
注意:默认情况下 用户的主要组都是其私有组
用户和组的管理:
主要使用命令完成:
组管理相关的命令:
groupadd、groupdel、groupmod
用户管理相关的命令:
useradd、userdel、usermod
认证管理相关的命令:
passwd、gpasswd、chage
其他的相关管理命令:
chsh、finger、su、id
name:password:UID:GID:GECOS:directory:shell
name:登录名
password:密码字段 现在在使用了shadow机制的系统中 通常使用“X”作为占字符
UID:用户ID
GID:此用户主要组的ID
GECOS:comment 注释类的信息 现在一般都会用来存放用户的说明信息或全名
directory:用户的家目录的绝对路径
shell:用户的默认登录shell的绝对路径
/etc/group:
group_name:password:GID:user_list
group_name:组名
password:组密码占位符 默认为空
GID:组的ID
user_list:以该组的附加组的用户的列表
/etc/shadow:
login name:用户的登录名
encrypted password:加密了的密码
格式:$算法$salt$真正意义的加密密码
如果该位置为!则表明用户的密码被禁止
如果该位置为*则表明该用户为系统用户 不能登录
如果该字段为空 则用户可以不输入密码即可登录系统 不推荐使用
date of last password change:
相对概念 表示从1970年1月1日开始的天数 到最后一次更改密码的时间
minimum password age:
在多长时间内无法修改密码 默认值为0 意思即为:随时修改密码 如果是非0的其他数字 意思是在这么长的天数里不能改密码
maximum password age:
在多长时间后密码过期 默认为99999 意思是永久有效
password warning period:
密码过期之前的友善提醒天数 默认值是七天
password inactivity period:
密码过期后的宽限期 默认为-1 意思是永久宽限
account expiration date:
一个用户账户密码过期的日期 这是一个绝对的过期期限
reserved field
保留字段 以备以后使用
/etc/gpasswd:
group name:encrypted password:administrators:members
组管理命令:
groupadd:新建组账户、添加组
-g gid 在创建组账户的时候 指定组账户的GID 如果不使用该选项指定 系统会选择在组解析文件中出现在的不大于60000大GID加1
-r 创建系统组 意思是创建一个GID在1-999(1-499)之间的组
groupmod:修改组的一些相关属性信息
groupmod[选项]GROUP
-g gid:修改组账户的ID
-n NEW_GROUPNAME:修改组名
groupdel:删除组账户
groupdel[选项]GROUPNAME
注意:如果某个组是某个用户的主要组或者私有组 则该组无法删除
用户管理的命令
useradd:创建用户账户
useradd [选项] 登录名
/etc/default/useradd
/etc/login.defs
/etc/skel
以上三个文件和目录能够帮助管理员在未指定任何选项时 也能创建用户 并为用户赋予默认的属性
-c, --comment ‘COMMENT’: 在创建用户时为用户添加注释信息 一般为全名
-d –home /PATH/TO/HOME _DIR : 在创建用户的时候为用户指定家目录的绝对路径 被指定的目录应该是事先不存在的目录
-g, --gid GROUPNAME:在创建用户时 为用户指定组
-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]: 在创建用户时为用户添加附加组
-m, --create-home 在创建目录时强制性为用户创建家目录
-M 在创建用户时不创建用户家目录 即使在/etc/login.defs中CREATE_HOME的值为yes也不创建
-r –system 创建系统用户
-u, --uid UID 在创建用户的时候为用户指定UID 这个UID可以超过60000的限制
-s, --shell /PATH/TO/SHELL 在创建用户的时候 为用户指定默认shell 使用绝对路径
-D --defaults 显示或修改用户默认属性值
-s, --shell /PATH/TO/SHELL 修改/etc/default/useradd文件中SHELL的默认值
usermod:修改用户账户信息
usermod [选项] 登录名
-c, --comment ‘COMMENT’ 修改用户的注释信息
-g, --gidGROUPNAME 修改用户的主要组
-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]] 修改用户的附加组为列表中的组
-a, --append 与-G选项同时使用 给用户添加新的附加组
-d, --home /PATH/TO/HOME_DIR 修改用户的家目录
-m, --move-home 与-d选项同时使用意味着将旧的家目录中的数据移动到新家之中
-l, --login NEW_LOGIN 更改用户账户的登录名
-s, --shell/PATH/TO/SHELL 修改用户账户的登录shell
-u, --uid UID 修改用户的UID
-L, --lock 锁定用户的密码
-U, --unlock 解锁用户的密码
userdel 删除用户账户
userdel [选项] 登录名
-r 删除用户的同时 清除用户的家目录
用户认证相关的命令
passwd 设置或者查看用户密码信息的命令
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
1.如果省略用户名 意味着更改当前登录用户密码
2.如果指定用户名 更改指定用户密码 只能root使用
选项:
-l, --lock 锁定用户的密码
-u, --unlock 解锁用户的密码
相比较usermod –L|-U 而言 其优先级更高
如果使用usermod –L锁定的用户密码 可以使用passwd –u解锁
而是用passwd –l锁定的用户密码 无法使用usermod –U解锁
-d,-–delete 删除用户密码 将/etc/shadow文件中第二字段清空
-S, --status 查看用户的密码状态
--stdin 借助于管道将输入数据流当做标准输入信息送给passwd命令
echo“PASSWORD”|passwd—stdin USERNAME
组认证相关的命令
gpasswd
gpasswd [选项] groupname
-a, --adduser 向名为 group 的组中添加用户 user。
-d, --deleteuser 从名为 group 的组中移除用户 user。
其他命令
su switch user 切换用户身份
su USERNAME 部分切换 半切换 在切换用户的时候不会重新读取用户的配置文件 因此 用户并没有登录行为 所以 工作环境不初始化
su-USERNAME 完全切换 在切换用户的时候 重新读取目标用户的配置文件并且初始化工作环境 相当于su –l USERNAME
-c“COMMAND”并不切换用户身份 而是以目标用户的身份执行某命令
使用su命令的时候 从root切换到其他普通用户 无需密码 但普通登录用户进行切换时 必须给出目标用户的密码
进行用户切换之后 不要连续切换 而是用exit命令返回之前的用户
newgrp GOUPNAME 临时更改当前登录用户的主要组 使用exit返回之前的状态
id 显示真实的和有效的用户和组的ID
真实ID 在/etc/passwd定义的用户的UID和GID
有效的ID 当前生效的用户的UID和GID
id [OPTION]... [USER]
-g 只显示用户的有效GID
-n 只显示用户的有效UID
-G 显示用户所有组的ID
-n 以名称代替ID来显示
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流