12、bash變量算法
變量:一段有名稱的連續的內存空間;這段內存空間的名稱,成爲變量名;在這段內存空間中存儲的數據,則稱爲變量值;shell
數據:文件,存在值;windows
向內存空間(變量)中存儲數據的過程,稱爲賦值操做;賦值符號一般爲「=」;數組
變量的類型:安全
123 --整型:01111011bash
--字符型:ASCII:3字節服務器
--字符型:UTF-8:9字節網絡
變量:dom
強變量:使用以前必須事先予以聲明;必須聲明變量類型;ssh
弱變量:在使用以前無需聲明、也無需指明變量類型;(bash變量)
變量的賦值方法:
VARNAME=VALUE
其含義:將某數值(VALUE)經過賦值操做存儲於特定的內存空間中(VARNAME)
bash變量名稱的命名規範:
1.變量名只能以「_」或「字母」爲起始字符,後面其餘字符能夠是任意字母,數字或下劃線:
ABC A_B
2.變量名中的字母是大小寫敏感的;
3.命名的書寫格式:
全大寫:HISTSIZE
全小寫:myvar
駝峯式:MyNewVariable
4.變量名要能見名知意;
5.變量名不能與已知變量或bash的內置變量重複;
bash中的變量分類:
根據變量的做用範圍來劃分:
全局變量(環境變量):做用範圍爲整個shell進程包括其子shell;
本地變量:做用範圍爲當前登陸時所打開的shell進程,不包括其子shell;
局部變量:做用範圍僅僅只是當前程序段,通常用於函數;
根據變量的聲明方式來劃分:
bash內置變量:
普通的內置變量:HISTSIZE,……
位置參數變量:$0,$1,$2,$3……
特殊變量:$?,$#,$*,$@,$$,……
$?:展開爲最後一次執行的命令的狀態返回值(退出狀態碼):用以表示最後一次執行的命令是否成功執行;
$#:不包括$0在內的其他位置參數的個數,以十進制數字表示;
$*:從$1開始展開爲位置參數當使用雙引號引用展開的結果時,他展開爲特殊變量IFS的第一個字符分隔值;
$@:從$1開始展開爲位置參數,當使用雙引號引用展開的結果時,他展開爲一個單獨的字符串;
$$:展開爲當前shell的進程標識符
自定義變量:
變量的使用:
1.變量的聲明和賦值:
1)聲明全局變量(環境變量):
export VARNAME
export VARNAME=VALUE
declare命令:
declare -Set variable values and attributes
格式:declare [-aAfFgilrtux] [-p] [name[=value] ...]
經常使用選項:
-a:聲明索引數組(若是支持)
-A:聲明關聯數組(若是支持)
-i:聲明整型變量
-l:聲明變量並將變量值中的字母轉換爲小寫字母
-u:聲明變量並將變量值中的字母轉換爲大寫字母
-r:聲明只讀變量,該變量只能進行一次賦值操做
-x:聲明變量並將其導出爲全局變量;
declare -x VARNAME[=VALUE]
2)聲明本地變量:
VARNAME=VALUE
3)聲明局部變量;
local VARNAME[=VALUE]
2.查看環境命令
set命令:查看和修改shell屬性的值及查看shell變量名和變量值;
set: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
Set or unset values of shell options and positional parameters.
export命令:查看變量名稱,也能夠爲變量賦值
env命令:
3. 查看變量的值:
echo ${VARNAME}
4.撤銷變量的賦值及變量聲明:
unset VARNAME
有關於保存變量的shell配置文件:
通用配置文件:
/etc/bashrc
/etc/profile
/etc/profile.d/*
私人配置文件:
~/.bashrc
~/.bash_profile
注意:
1. 通常狀況下,變量都是隨用隨聲明,除非有必要不然不建議修改配置文件的內容;
2. 聲明變量在使用完之後,最好使用unset命令予以撤銷;
用戶和組管理:
用戶帳戶
組帳戶
權限分配
沒有一個完整的認證機制資源將會形成一種混亂的局面尤爲是在服務器上他並非給某我的或某個團體網給多個部門和團體使用,爲了保證資源的安全利用最開始由Cisco開發並創建了AAA認證體系:
Authentication:認證並覈實使用者身份;
Authotization :受權,對已經覈實身份的使用者進行資源分配;
Acciunting:審計,監管資源被使用的狀況;
多任務,多用戶操做系統;(windows中並不能夠多用戶操做)
可以實現資源使用和完成任務的主體是:應用程序進程;
安全上下文:Secure Context(對進程和文件都是有的)
進程是以發起者的身份運行的;能夠理解爲,進程的全部者就是發起者;每一個進程上都會標記上其全部者的身份信息;
當繼承試圖訪問資源的時候,安全上下文會比對進程的全部者和資源的全部者之間的關係;
首先,查看進程的全部者是否和資源的全部者爲同一用戶,若是是,就按照全部者所擁有的權限來使用資源;若是不是,則判斷進程的全部者是否屬於該資源所屬組的成員;若是是,按照所屬組的權限來使用資源;
若是不是,就按照最爲普通的其餘用戶的權限來使用資源;(最關鍵的兩個問題全部者和所屬組)
用戶帳戶:實現操做者和計算機交互式操做的基礎,是操做者的身份在知足了驗證條件以後的計算機系統中的映射;
用戶帳戶分類(Linux中用戶帳戶有不少):
超級用戶(管理員):root/
普通用戶:
系統用戶(非登陸用戶)
爲了保證系統安全,每每會讓某些進程或服務必須以非管理員的用戶身份運行;(網絡會話劫持:劫持系統中正在進行的一個進程)這類非管理員用戶,稱爲系統用戶:此類用戶通常不容許登錄到系統,防止被網絡會話劫持後系統遭到破環。
登陸用戶
能經過登錄行爲驗證用戶身份進而得到資源訪問權限並能夠對資源進行操做的用戶,能夠稱爲登陸用戶;
用戶帳戶的表示方式:
用戶登錄名稱:
位操做者提供簡單易記的字符串表示
用戶的數子ID(UID):
爲計算機操做系統提供的標準數字標識符號,0~2^32-1
超級用戶:
用戶名:root
UID:0
普通用戶:
系統用戶:
Centos 6及之前的版本:系統的UID是1~499
Centos 7及之後的版本:系統的UID是1~999
登陸用戶:
Centos 6及之前的版本:500+
Centos 7及之後的版本:1000+
注意:60000+的UID一般須要用戶自定義標識;
名稱解析:
用戶名<- ->UID
用戶名解析庫:/etc/passwd
操做系統中的認證組件經過解析庫實現認證機制,即認證登陸用戶是否爲已經存在的用戶;
用戶的認證庫:/etc/shadow
經過此前的解析庫認定用戶是存在的,在通過認證庫的認證,來證實登陸用戶就是其聲明的用戶;
默認的認證機制:密碼認證;
密碼發雜性要求:
1.儘可能避免使用有規律的或者來源於字典中的字符串做爲密碼;
2.密碼要足夠長,通常不得少於6個字符;
3.密碼要足夠複雜,其中應該至少包括大寫字母小寫字母數字及其餘符號中的三類;
4.密碼要不按期更換。
在Linux中保存到認證庫的密碼是通過單向加密算法處理過的;
可以加密密碼的算法有兩類:
MD:
MD5,Message Digest Version 5,消息摘要算法第五版;
128位定長輸出;(如今已經不多會用到)
SHA:Secure Hash Algorithm,安全的哈希算法;
sha1:160加密輸出
sha224:
sha256:
sha384:
sha512:Linux中默認的加密算法;
salt:經過隨機算法計算獲得的隨機數;
隨機數的生成裝置:
/dev/random:
僅僅是從熵池中返回隨機數;若是熵池中隨機數耗盡,進程會被阻塞;
/dev/urandom
首先試圖從熵池中返回隨機數,若是熵池中隨機數耗盡,則利用僞隨機數生成器生成僞隨機數;
在認證庫中的密碼的最終形態:算法+salt+加密字符串;
算法:$1~$6
salt:$隨機字符串
加密字符串:$單向加密的結果
組帳戶:將具備某些相同或類似屬性的用戶聯繫在一塊兒以即可以集中受權的容器;
組的分類:
超級用戶組
普通用戶組
系統用戶組
登陸用戶組
組帳戶的標識方法:
組帳戶名稱:
組帳戶ID(GID):
超級用戶組:0
系統用戶組:
Centos6 -:500+
Centos7+:1000+
組名解析:
解析庫:/etc/group
認證庫:/etc/gshadow
組也須要使用密碼加密保護;
用戶帳戶和組帳戶之間的關係:
在Linux中,每一個用戶必須字少屬於一個組;
用戶帳戶的GID標識被稱爲用戶的主要組(基本組)Primary Group;每一個用戶必需要有主要組,並且只能有一個;
在主要組的基礎之上,用戶能夠與其餘的組帳戶存在邏輯關係,此類組稱爲用戶的附加組(附屬組,額外組),Addtion Group;對於用戶來講,此類組能夠沒有,也能夠有多個;
用戶和組的管理命令:
組帳戶的管理命令:
groupadd 、groupdel 、groupmod
用戶帳戶的管理命令:
useradd、userdel、usermod
認證相關的命令:
passwd、gpasswd
其餘的相關命令:
chage,chsh,finger,su,id
與用戶和組相關的命令:
1.groupadd
groupadd - 建立一個新組
格式:groupadd [選項] group
經常使用選項:
-g GID:指定要建立的組的GID;
-r:將組建立爲系統組,此時應該保證GID在系統組範圍內;
2. Groupdel
groupdel - 刪除一個組
格式:groupdel [選項] GROUP
注意:若是某個組是某個用戶的主要組,則改組不能刪除;
3. Groupmod
groupmod - modify a group definition on the system
格式:groupmod [選項] GROUP
經常使用選項:
-g GID:修改指定組的GID;
-n GROUP_NAME:修改指定組的組帳戶名稱;
例如:[root@localhost ~]# groupadd group1
[root@localhost ~]# tail /etc/group
postfix:x:89:
sshd:x:74:
slocate:x:21:
avahi:x:70:
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:
tcpdump:x:72:
die:x:1000:die
group1:x:1001:
[root@localhost ~]# groupmod -g 6000 -n grp1 group1
[root@localhost ~]# tail /etc/group
postfix:x:89:
sshd:x:74:
slocate:x:21:
avahi:x:70:
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:
tcpdump:x:72:
die:x:1000:die
grp1:x:6000:
4.useradd
useradd - 建立一個新用戶或更新默認新用戶信息
格式: useradd [選項] username
useradd -D[選項]
經常使用選項:
-c, --commentCOMMENT:爲用戶添加註釋信息
-d, --homeHOME_DIR:爲用戶指定家目錄的路徑;此目錄不能事先存在
-e, --expiredateEXPIRE_DATE:用戶帳戶將被禁用的日期 ;如:2017/10/11
-f, --inactiveINACTIVE:爲用戶指定密碼使用達到最大時間以後的寬限期
-g, --gidGROUP:爲用戶指明GID;若是不寫此選項,系統將建立一個與用戶相同的組
-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:爲用戶添加附加組
-m, --create-home :必須爲用戶建立家目錄
-M :不爲用戶建立家目錄;在建立系統用戶時經常使用
-r,--system:建立系統用戶;
-s, --shellSHELL:爲用戶指定默認的shell ;
-u, --uidUID:爲用戶指定UID
5.userdel
userdel - 刪除用戶帳戶和相關文件
格式:userdel [選項] username
經常使用選項:
-r, --remove:刪除用戶的同時刪除用戶的家目錄及用戶郵箱文件;
6.usermod
usermod -修改一個用戶帳戶
格式;usermod[選項]username
經常使用選項:能夠在shell中man一下基本上和useradd同樣
-c, --commentCOMMENT:修改註釋信息
-d, --homeHOME_DIR:修改用戶的家目錄
-e, --expiredateEXPIRE_DATE:修改用戶密碼過時的絕對日期
-f, --inactiveINACTIVE:修改用戶密碼過時以後的寬限期;
-g, --gidGROUP:爲用戶指明GID;
-G, --groupsGROUP1[,GROUP2,...[,GROUPN]]]:修改用戶的附加組位此列表中的組,若是同時使用了-a選項,則保留了原有的附加組,將此列表中的組追加到用戶的附加組列表;
-l, --loginNEW_LOGIN:修改用戶的登陸名
-s, --shellSHELL:爲用戶指定默認的shell ;
-u, --uidUID:爲用戶指定UID
-L, --lock:鎖定用戶
-U, --unlock:解鎖被usermod -L鎖定的用戶;
7.passwd
passwd - update user's authentication tokens
格式:passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
經常使用選項:
-l, --lock:鎖定用戶
-u,--unlock:解鎖用戶
--stdin:經過標準輸入接受密碼,能夠用於管道;
例如:[root@localhost ~]# echo 123 | passwd --stdin user1
更改用戶 user1 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。
-d, --delete:刪除用戶密碼,也能夠用於解除用戶鎖定
[root@localhost ~]# tail -1 /etc/shadow
user2:!!:17471:0:99999:7:::
其中的歎號證實用戶已被鎖定,能夠經過解鎖的方式登陸用戶也能夠在root用戶下用vi去刪除!來實現對用戶的解鎖
-n, --minimum DAYS:用戶密碼的最短使用時長;默認值位0;
-x, --maximum DAYS:用戶密碼的最長使用時長;默認值位99999;
-w, --warning DAYS:用戶密碼過時以前多少天開始發送警告信息;
-i, --inactive DAYS:用戶密碼過時以後的寬限期;
-S, --status」:查看用戶密碼的狀態信息
8.chage
chage - 更改用戶密碼過時信息
格式:chage [選項] username
經常使用選項:
-d, --lastdayLAST_DAY:
-E, --expiredateEXPIRE_DATE
-I, --inactiveINACTIVE
-l, --list 現實帳戶年齡信息
-m, --mindaysMIN_DAYS
-M, --maxdaysMAX_DAYS
-W, --warndaysWARN_DAYS
9.chsh
chsh - change your login shell
格式:chsh [-s shell] [-l] [-u] [-v] [username]
10.finger
finger — user information lookup program
格式:finger [-lmsp] [user ...] [user@host ...]
11.id
id - print real and effective user and group IDs
格式:id [OPTION]... [USER]
經常使用選項:
-u:顯示用戶的有效UID;
-g:顯示用戶的有效GID;
-n:顯示名稱;
12.su
su - run a command with substitute user and group ID
格式:su [options...] [-] [user [args...]]
經常使用選項:
-, -l, --login:之後面的用戶身份登陸到系統;
-c "COMMAND":之前面指定的用戶身份運行COMMAND;不進行身份登陸切換;