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來顯示
本文轉自 Runs_ 51CTO部落格,原文連結:http://blog.51cto.com/12667170/1911416,如需轉載請自行聯系原作者