@@@第三天第二段
@@stat命令:查看文件的元數據信心!Inode
stat FILE...
bash文本編輯器編輯器:進行文本內容修改的程序
行編輯器:sed
全屏編輯器:nano, vi, vim
@@nano FILE...
用戶和權限管理:
1、用戶是什麼?
2、沒有用戶計算機也可以正常運行
用戶:用戶就是計算機系統按需對操作人員授權,標識資源獲取的識別符!資源分配,是安全權限模型的核心要素之一
密碼:用戶認證,對用戶是否具有授權進行驗證!
多用戶的操作系統:同一時間允許多個用戶對計算機進行操作的操作系統
用戶容器:組(group),角色(role)
組名,Group IDentifier, GID
解析:在數據庫按搜索碼查找到對應的條目,並找與之對應額外其它數據過程
數據庫
文本文件
SQL數據庫
ldap數據庫
/etc/passwd:用戶信息
/etc/shadow:密碼信息庫
加密方法:
對稱加密:DES, 3DES, AES
公鑰加密:DSA, RSA
單向加密:雪崩效應,定長輸出,不可逆
MD5: 信息摘要,128bits
SHA1: 安全的hash算法, 160bits
SHA256:
SHA512:
md5sum, sha1sum計算加密算法後所得值
組:用戶容器,角色
/etc/group : 組信息
/etc/gshadow: 組密碼
安全上下文:是一類定義某個進程允許做什麼的許可和權限的集合,即運行中的進程有其屬主和屬組來定義進程所能獲得的權限.
大綱:useradd, id, passwd, usermod, chsh, chage, chfn, userdel, groupadd, groupmod, groupdel, su
@@@第三天第三段
創建用戶:
@@useradd :創建用戶
/etc/passwd:文件信息解釋
用戶名:x:UID:基本組ID:comment信息:HOME:默認shell
useradd [options] UserName
-u UID:指定UID
-g GID: 指定GID,即指定用戶的基本組,但GID要事先存在
-G GID:指定用戶的額外組,組要事先存在;
-d /path/to/somewhre:
-c "Comment":
-s /path/to/shell: 指定默認shell,應該指定使用/etc/shells文件中出現的shell;
-m: 創建用戶時,強制給用戶創建家目錄;
-M: 創建用戶,但不創建家目錄;
-r: 創建系統用戶,不會爲用戶創建家目錄,id: 1-499,默認shell爲/sbin/nologin
-D: default,爲useradd命令創建的用戶指定新的默認值
@@groupadd:創建組
groupadd [options] GrpName
-g GID: 創建組併爲其指定GID
用戶類別:
管理員:0
普通用戶:1-65535
系統用戶:1-499
登錄用戶:500+
用戶組:
管理員組
普通組
以用戶爲視角,組可爲兩類:
基本組: 顯示在/etc/passwd中GID字段組,爲用戶的基本組;
額外組,附加組: /etc/group
userdel: 刪除用戶, 默認會保留家目錄
格式:userdel UserName
-r: 一併刪除家目錄
總結:
/etc/passwd:
Username:x:UID:GID:Comment:Home:Shell
/etc/group:
GroupName:x:GID:User List
/etc/skel:用戶創建時調取的默認文件
/etc/default/useradd:修改創建用戶默認文件配置的屬性
@@userdel:刪除用戶,默認會保留家目錄,
-r :刪除時刪除家目錄
@@passwd:修改設定用戶密碼,
-l: 鎖用戶
-u: 解鎖
普通用戶:只能修改自己的用戶密碼
管理員:管理所有用戶的密碼
改自己密碼:passwd
改其它用戶密碼:passwd UserName
密碼安全性策略:足夠複雜,夠長;交叉應用數字、大寫字母、小寫字母和特殊中的至少三種;儘量避免使用易猜測的密碼;定期更換;
設定組密碼:gpasswd GroupName
如何修改用戶的屬性定義:
@@chsh 修改用戶默認shell: chsh usename 回車
@@chfn 修改用戶註釋:chfn username 回車
@@usermod:修改已建立的用戶信息:
usermod [options] username
-u UID:
-g GID:
-G GID: 默認會覆蓋原有的附加組;如果是添加,則同時使用-a選項;
-c String:
-d /path/to/New_Home: 默認不會遷移用戶的家目錄;如果要遷移,則同時使用-m
-s SHELL:
-l New_login_name: 更改用戶爲新的登錄名
-L: 鎖定用戶帳號
-U: 解鎖
# usermod -u 2000 -g 3000 -G 4000 -c *** -d /bin/bash test1
@@groupmod修改組屬性定義:
groupmod :
-g GID
-n New_Group_Name:
/etc/shadow文件的格式:
UserName:加密的密碼:最近一次密碼修改時間:最短使用期限:最長使用期限:警告區間:非活動區間:帳號的過期期限:預留段
@@chage 修改帳號日期屬性:chage
-E: 設置時間
-I: 設置密碼的過期時間
-m:更換密碼最小時間
-M:更換密碼最大時間
-W:更換密碼提醒時間
@@id:查看用戶相關信息:
id UserName
-u: 顯示UID,跟-n一起使用則顯示用戶名
-g: 顯示基本組ID,跟-n一起使用則顯示基本組名
-G: 顯示所有組ID,跟-n一起使用則顯示所有組名
@@groupdel:刪除組.
@@gpasswd:修改組密碼
練習:
1、創建一個用戶mandriva,其ID號爲2002,基本組爲distro(組ID爲3003),附加組爲linux;
2、創建一個用戶fedora,其全名爲Fedora Community,默認shell爲tcsh;
3、修改mandriva的ID號爲4004,基本組爲linux,附加組爲distro和fedora;
4、給fedora加密碼,並設定其密碼最短使用期限爲2天,最長爲50天;
5、將mandriva的默認shell改爲/bin/bash;
回顧:
文件管理:ls, cat, tac, tail, head, more, less, cp, mv, rm, touch, stat, file, nano
用戶管理:useradd, usermod, userdel, passwd, groupadd, groupmod, groupdel, id, su, chage, chfn, chsh, newgrp, gpasswd
@@@第三天第四段
權限:read(讀,r), write(寫,w), execute(執行,x)
文件:
r: 可以使用內容查看類的命令來顯示其相關內容;
w: 可以使用編輯器修改其內容;
x: 可以將其發起一個進程;
目錄:
r: 可以使用ls命令查看目錄內容的文件信息;
w: 可以創建、刪除文件;
x: 可以使用ls -l命令查看目錄內容的文件信息,並且可以使用cd命令切換此目錄爲工作目錄;
用戶的不擁有某位權限,則使用-佔位;
r-x:
r--
rw-
@三位二進制表示三種用戶的權限
-rw-r--r-- 1 root root 852 Jul 30 2013 bincp.sh
000: ---, 0
001: --x, 1
010: -w- 2
011: -wx 3
100: r-- 4
101: r-x 5
110: rw- 6
111: rwx 7
常用權限代碼:
755: rwxr-xr-x
644: rw-r--r--
700: rwx------
600: rw-------
750: rwxr-x---
640: rw-r-----
040: ---r-----
777: rwxrwxrwx(危險,全權限)
元數據,屬性,inode:保存用戶權限信息
修改屬主、屬組:僅管理員可執行,chown, chgrp
@@chmod改文件權限:
1,操作三類用戶的權限:使用8進制代碼形式
chmod [-R] OCTAL-MODE file...
chmod 700 testfile
2,操作指定類別用戶的權限:使用u,g,o,a來賦權,基於=或+/-來進行
u: 屬主 g: 屬組 o: 其它 a: 所有
chmod u=rwx g= o= testfile
=:操作指定類別用戶的權限;u=, ug=, u=,g=
+/-: 操作指定類別用戶的單個權限: u-x, g+r, o-x, +x
-R:遞歸,改變目錄極其子目錄文件的權限
參照其它文件的權限爲當文件賦權
--reference=要參照的文件 要修改權限的文件
@@umask:查看或者指定用戶的umask碼
創建文件的初始權限爲:666-umask
文件默認決不允許出現執行權限;
創建目錄初始權限:777-umask
用戶的umask碼值
root: 022
如果用戶名和基本組組名一致:002;否則則爲022;
@@chown修改文件的屬主或屬組:,
-R: 遞歸
--reference=
同時修改屬主和屬組 屬主和屬組中間加:或者.號
chown [option] UserName[{:|.}GroupName] file...
@@chgrp:修改文件的屬組
權限應用模型:
進程的屬主,是否與文件的屬主相同;如果相同,進程則以文件屬主的權限來訪問文件;否則
進程的屬主所屬的組,是否其中之一與文件的屬組相同;如果相同,進程則以文件屬組的權限來訪問文件;否則,
進程則以文件的其它用戶的權限來訪問文件;
練習:
1、新建一個用戶openstack,但不給其創建家目錄;創建完成後使用su命令切換至此用戶,查看其命令提示符及PATH和HOME兩個環境變量的值;
2、複製/etc/skel目錄爲/home/openstack;
3、改變/home/openstack及其內部文件的屬主屬組均爲openstack;
4、/home/openstack及其內部的文件,屬組和其它用戶沒有任何訪問權限;
練習:
完成以下任務:
(1)新建系統組mysql;新建系統用戶mysql,屬於mysql組,要求其沒有家目錄且shell爲/sbin/nologin;
(2)新建GID爲600的組magedu;新建用戶gentoo,要求其家目錄爲/users/gentoo,密碼同用戶名;
(3)新建用戶centos,其家目錄爲/users/centos,密碼同用戶名;
(4)新建用戶www,其家目錄爲/users/www;刪除www用戶,但保留其家目錄;
(5)用戶gentoo和centos均以magedu爲其附加組;
總結權限管理:chmod, chown, chgrp, umask
@@@第四天第一段
bash介紹:
shell: 人機交互界面
sh、csh、tcsh、bash、ksh、dash、zsh
bash: 命令解釋器
bash特性之六:bash的快捷鍵
Ctrl+a: 跳至命令行首
Ctrl+e: 跳至命令行尾
Ctrl+u: 刪除命令行首至當前光標所在處的內容
Ctrl+k: 刪除當前光標所有處至命令行尾的內容
Ctrl+l: 清屏,相當於clear命令
Ctrl+c: 取消或終止;
Ctrl+z: 將當前命令送至後臺
bash特性之七:bash補全
命令補全:使用TAB鍵,bash講自動檢索與輸入字母對應唯一的執行程序,如果不是唯一,則給出可選項
shell命令:內部,外部
外部:在系統某路徑下有一個可執行程序保存在系統變量PATH中. PATH,是一組由冒號分隔的路徑
使用tab鍵執行補全
路徑補全:在給出的打頭路徑補全;如果沒有打頭路徑,則爲當前;
編程語言:
C:關鍵字,選擇、順序
編譯器:語言平臺
解釋器:語言平臺
程序執行邏輯:
順序執行:默認法則,逐條執行各語句
選擇執行:有多個分支,條件判斷,符合條件的分支予以執行
循環執行:將同一段代碼反覆執行優先次,所以,循環必須有退出條件,否則將陷入死循環。
動態語言:沒有提前申請內存空間,使用時申請,用完後退出,
解釋型
perl, bash, python
靜態語言:變量先申請使用內存空間,
編譯型
C, C++
變量:
數據存儲格式:
ASCII:11
Binary:11
按照其變量是否需要嚴格定義其類型來劃分:
強類型語言:C
弱類型語言:bash
定義變量類型的作用:
1、申明數據存儲格式;
2、申明數據的有效存儲範圍;
3、比較機制不同;
4、參與的運算類型不同;
字符型
數值型:正,負
精確數值型:
整型:
近似數值型:
浮點數
單精度
雙精度
布爾型:
bash特性之八:提供編程環境
變量: 可以講一個或多個值賦值給一個變量名
程序控制: 使用邏輯判斷達到簡化操作的目的!
腳本書寫格式:
#!/bin/bash: 腳本入口,調用程序的路徑,第一行頂格寫
# Description: 描述
# Version: 版本
# Datetime: 時間
# Author: 作者
練習:寫一個腳本
1、創建一個組newgroup, id號爲4000;
2、創建一個用戶mageedu1, id號爲3001,附加組爲newgroup;
3、創建目錄/tmp/hellodirxyz
4、複製/etc/fstab至上面的目錄中
5、改變目錄及內部文件的屬主和屬組爲mageedu1;
6、讓目錄及內部文件的其它用戶沒有任何權限;
@@@第四天第二段
ELF:bash裏可執行文件類型
程序=指令+數據
變量:
弱類型語言:
1、不強制區分變量的類型,無論存儲何種數據,均以字符格式進行;
2、無須事先聲明;用到時,直接使用,直接賦值;
bash: 動態編程語言,是弱類型語言;
bash的特性之九:bash中的變量
變量的類型:
變量的命名要求:
只能使用數字、字母和下劃線組成;
不能以數字開頭;
不能使用程序中的關鍵字;
見名知義;totalWeight
@@set: 變量賦值或查看當前系統上的所有變量
@@unset: 撤銷變量
@@export: 將變量改爲環境變量
本地變量:只對當前shell進程有效,對其子shell以及其它shell都無效;
定義變量: [set]Var_Name="Value"
引用變量: ${Var_Name}
撤銷變量: unset Var_Name
局部變量:僅對局部代碼生效
local Var_Name="Value"
環境變量:對當shell進程及其子shell有效;用來調整bash的工作特性,用於保存當前會話的屬性信息;
export Var_Name="Value"
Var_Name="Value"
export Var_Name
位置變量:在腳本中引用其它腳本參數
$1, ..., $n
./first.sh 2 8
特殊變量:
$0: 腳本名稱自身
$?: 上一條命令的執行狀態;
狀態用數字來表示:0-255;
0: 成功
1-255: 失敗
$$
$!
$#
$*
例:新建十個用戶:mageduuser1-mageeduuser10
# useradd mageeduuser1
練習:
完成以下任務:
(1)新建系統組mysql;新建系統用戶mysql,要求其沒有家目錄且shell爲/sbin/nologin;
(2)新建GID爲600的組magedu;新建用戶gentoo,要求其家目錄爲/users/gentoo,密碼同用戶名;
(3)新建用戶centos,其家目錄爲/users/centos,密碼同用戶名;
(4)新建用戶www,其家目錄爲/users/www;刪除www用戶,但保留其家目錄;
(5)用戶gentoo和centos均以magedu爲其附加組;
完成以下任務:
(1) 切換至centos用戶,定義本地變量FirstVar,其值爲“test variable”;
(2) 另啓一個終端,使用gentoo用戶查看FirstVar變量的值;如果沒有值,爲什麼?
(3) 聲明一個變量CurTime,其值爲當前系統時間;
(4) 使用echo命令顯示“The current time is:”,is後跟上CurTime變量的值;
(5) 回至centos用戶的終端:複製/etc/pam.d目錄至/tmp目錄中,並重命名爲test;
(6) 聲明變量fileName,其值爲剛纔複製的目錄/tmp/test;
(7) 修改變量fileName所表示的目錄及其內部所有文件的其它用戶均沒有任何訪問權限;
(8) centos用戶是否可以修改變量fileName所表示的目錄的屬主和屬組?如果能,將其改爲gentoo用戶和gentoo組;如果不能,則使用root用戶修改;
@@@第四天第三段
顯示所有環境變量:@@export, @@env, @@printenv
bash的配置文件:持久保存用戶配置
profile類:爲交互式登錄的用戶提供配置
/etc/profile:全局
/etc/profile.d/*.sh:全局
~/.bash_profile:個人配置,僅對當前用戶有效
功能:
設定環境變量
運行命令或腳本
bashrc類:非交互工登錄用戶提供配置
/etc/bashrc: 全局
~/.bashrc: 個人配置
功用:設定本地變量,定義命令別名,
登錄類型:
交互式登錄:
直接通過終端輸入用戶信息登錄系統;
su - UserName或su -l UserName;
非交互式登錄:
su UserName
圖形界面的終端
執行腳本
新增配置的生效方式:
@@source
通知shell重讀配置文件的命令:
source (.)
. FILE
重新登錄
交互式登錄用戶:讀取環境變量順序
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登錄用戶:讀取環境變量順序
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
@@@第四天第四段
bash腳本:面向過程的變成中有三種方式
順序執行:默認法則,逐條執行各語句
選擇執行:有多個分支,條件判斷,符合條件的分支予以執行
循環執行:將同一段代碼反覆執行優先次,所以,循環必須有退出條件,否則將陷入死循環。
程序代碼:由語句和表達式組成
控制語句:for,if
bash循環控制語句:
for
while
until
@@ for循環:通過使用一個變量去便利給定列表中的每個元素,在每次變量賦值時執行一次循環體, 直至遍歷完所有元素退出循環
for var in list;do 循環體;done
for var_Name(將要賦值的變量名) in List(賦值列表,列表內的值將賦值給前面var_Name); do
語句1
語句2
...(循環體,將賦值後的var_Name變量按照語句進行操作)
done
列表的生成方法:
1,直接給出列表
2,使用文件名通配的機制生成列表
3,用命令生成列表
4,生成數字序列列表:{n1..n10} 1-10 (點號不能省略)
seq n1 n2 n3 n1是起始數,n2步長,n3結束數
@@bash:執行bash腳本
# bash [options][FileName]...
-n:不執行腳本,只檢查腳本內語法是否有錯誤.
#!/bin/bash
#
文本處理類的命令:wc,word,count
@@wc: word count 字符統計,爲文件統計字節數,單詞數,行數,
wc [options][file]...
-l:僅統計行數
-w:僅統計單詞數
-c:僅統計字節數
@@|:管道,把一個命令的輸出結果傳給下一個命令做輸入結果中間用|隔開
@@tr:轉換字符或刪除字符,把字符轉換成相應的字符集內的字符,如果只給一個字符集,則刪除相應的字符.
tr '集合1' '集合2'
#echo "hello world" | tr 'abcdefg' 'ABCDEFG'
@@cut:將輸入的內容按指定的分隔符,切割成片,顯示指定的片
-d字符:指定的分隔符
-f#:指定要現實的字段
#:爲單個數字,顯示第#個字段
逗號隔開的多個數字:顯示指定數字的多個離散字段
-:連續字段,如3-5顯示第三個到第五個字段
#echo "This is a new line " | cut -d' ' -f1 (空格分割,取第一段)
#cut -d: -f1,7 /etc/passwd (取/etc/passwd中:號分割的第一和第七個字段,即用戶名和shell)
@@sort:爲文件進行排序 sort [options] file...
-f:忽略字符大小寫
-n:按ASCII碼比較數值大小
-t:指定分隔符,切片
-k:指定分隔符後,進行比較字段
-u:連續重複的行只顯示一次
sort -n -t: -k3 /etc/passwd(把/etc/passwd按照:分割取第三段字符的大小進行排序)
@@uniq:移除連續重複的行
-c:顯示每行重複的次數
uniq -c testfile
sort testfile | uniq -c
-d:僅顯示重複出現的次數,連續重複出現兩次的行
-u:僅顯示不曾重複的行
(新建一個文本輸入多行內容)
uniq -c testfile
sort testfile | uniq -c
@練習題:
1、統計/bin、/usr/bin、/sbin和/usr/sbin等各目錄中的文件個數;
2、顯示當前系統上所有用戶的shell,要求,每種shell只顯示一次
3、取出/etc/passwd文件的第7行;
4、顯示第3題中取出的第7行的用戶名;擴展把用戶名換成大寫
5、統計/etc目錄下以P或p開頭的文件個數;
練習:寫一個腳本,用for循環實現
顯示/etc/init.d/functions、/etc/rc.d/rc.sysinit和/etc/fstab各有多少行;
練習:寫一個腳本
將上一題中三個文件的複製到/tmp目錄中;
用for循環實現,分別將每個文件的最近一次的修改時間改爲2011年9月15號13點27分;
練習:寫一個腳本
顯示/etc/passwd中第3、7和11個用戶的用戶名和ID號;(提示獲得用戶名和ID號後賦值給變量,然後用命令再次分割)