#0、建立腳本 #一、腳本必須放在/etc/init.d/目錄下面 #二、腳本要有 執行權限 chmod +x #三、腳本的開頭要有# chkconfig: 2345 99 99 (注意空格) 2345表示運行級別,99表示腳本是開機啓動順序,99表明關閉順序 注意開啓或者關係順序不要重複了 #四、加入到chkconfig中,讓chkconfig管理 chkconfig --add 腳本名字
以上使用文檔,能夠查看chkconfig幫助: man chkconfightml
能夠嘗試翻譯出來python
以前咱們修改配置,老是會有臨時生效和永久生效,這兩類修改mysql
那麼這兩類修改有什麼規律呢?linux
在我看來,臨時生效是執行了命令。而永久生效須要修改某些特定文件web
可是永久關閉防火牆chkconfig iptables on命令 好像並非在修改文件呀,這是怎麼一回事呢?sql
這就須要探尋一下chkconfig背後到底作了什麼shell
其本質,也是修改了文件,修改的文件是/etc/下的rc3.d這類文件夾下的文件,咱們只拿rc3.d巨了這個例子,etc下還有相似的rc1.d、rc2.d等數據庫
[root@learn-Linux001 ~]# ll /etc/rc3.d/ total 0 lrwxrwxrwx. 1 root root 16 Jan 30 16:25 K01smartd -> ../init.d/smartd lrwxrwxrwx. 1 root root 16 Jan 30 16:25 K10psacct -> ../init.d/psacct lrwxrwxrwx. 1 root root 19 Jan 30 16:24 K10saslauthd -> ../init.d/saslauthd lrwxrwxrwx. 1 root root 18 Jan 30 16:25 K15svnserve -> ../init.d/svnserve lrwxrwxrwx. 1 root root 18 Jan 30 16:25 K61nfs-rdma -> ../init.d/nfs-rdma lrwxrwxrwx. 1 root root 14 Jan 30 16:25 K74ntpd -> ../init.d/ntpd lrwxrwxrwx. 1 root root 17 Jan 30 16:24 K75ntpdate -> ../init.d/ntpdate lrwxrwxrwx. 1 root root 19 Jan 30 16:25 K75quota_nld -> ../init.d/quota_nld lrwxrwxrwx. 1 root root 21 Jan 30 16:23 K87restorecond -> ../init.d/restorecond lrwxrwxrwx. 1 root root 20 Jan 30 16:24 K89netconsole -> ../init.d/netconsole lrwxrwxrwx. 1 root root 15 Jan 30 16:23 K89rdisc -> ../init.d/rdisc ... ...
這些都是軟鏈接vim
作一個開啓和關閉防火牆的對比windows
[root@learn-Linux001 ~]# chkconfig iptables on [root@learn-Linux001 ~]# ll /etc/rc3.d/ |grep ipt lrwxrwxrwx. 1 root root 18 Jan 30 22:29 S08iptables -> ../init.d/iptables [root@learn-Linux001 ~]# chkconfig iptables off [root@learn-Linux001 ~]# ll /etc/rc3.d/ |grep ipt lrwxrwxrwx. 1 root root 18 Jan 30 22:30 K92iptables -> ../init.d/iptables
發現過濾出來的文件發生了變化,因此,能夠猜測
chkconfig iptables on ===>/etc/rc3.d/ S08iptables -> ../init.d/iptables chkconfig iptables off ===>/etc/rc3.d/ K92iptables -> ../init.d/iptables S----->start K----->kill 驗證: #0、首先防火牆是關閉的 [root@learn-Linux001 ~]# chkconfig iptables off [root@learn-Linux001 ~]# ll /etc/rc3.d/ |grep ipt lrwxrwxrwx. 1 root root 18 Jan 30 22:30 K92iptables -> ../init.d/ipta #一、移除 K92iptables [root@learn-Linux001 ~]# mv /etc/rc3.d/K92iptables /tmp [root@learn-Linux001 ~]# ll /etc/rc3.d/ |grep ipt #二、建立S08iptables做爲iptables的軟鏈接 [root@learn-Linux001 ~]# ln -s /etc/init.d/iptables /etc/rc3.d/S08iptables [root@learn-Linux001 ~]# ll /etc/rc3.d/ |grep ipt lrwxrwxrwx. 1 root root 20 Jan 30 22:41 S08iptables -> /etc/init.d/iptables #三、查看並驗證 [root@learn-Linux001 ~]# chkconfig |grep ipt iptables 0:off 1:off 2:off 3:on 4:off 5:off 6:off
經過查看iptables文件的內容,能夠看到# chkconfig: 2345 08 92
08是開啓順序,92是關閉順序
UID至關於身份證號,GID是用戶組ID號,至關於戶口本編號
UID:0 皇帝
UID:1-499 傀儡,爲了知足每一個進程、軟件須要一個用戶和用戶組,自己沒法使用
一、每一個進程、軟件須要一個用戶和用戶組
二、傀儡用戶不須要,也沒法登錄系統
三、用戶的命令解釋器/sbin/nologin
非虛擬用戶的命令解釋器是/bin/bash
UID:500+
root:x:0:0:root:/root:/bin/bash pizza:x:500:500::/home/pizza:/bin/bash #第一列:用戶名 #第二列:x 表明密碼,若是刪除x。那麼這個用戶就沒有密碼了,隨便進入 #第三列:UID #第四列:GID #第五列:用戶的說明信息 #第六列:用戶家目錄 ~ #第七列:用戶使用的的命令解釋器(shell) 解釋器種類 /bin/bash 用戶默認的解釋器 /sbin/nologin 虛擬用戶 /bin/sh 和/bin/bash差很少,用於解釋腳本 ...還有幾個放在/etc/shells中 [root@learn-Linux001 ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash Ubuntu默認的 /bin/tcsh Unix csh的升級版 /bin/csh Unix 注意:不要隨便切換用戶的命令解釋器
新用戶的家目錄的模板
[root@learn-Linux001 ~]# ls -la /etc/skel/ total 20 drwxr-xr-x. 2 root root 4096 Jan 30 16:19 . drwxr-xr-x. 78 root root 4096 Feb 1 10:14 .. -rw-r--r--. 1 root root 18 Mar 23 2017 .bash_logout # 用戶退出的時候運行裏面的命令 -rw-r--r--. 1 root root 176 Mar 23 2017 .bash_profile # 至關於 /etc/profile -rw-r--r--. 1 root root 124 Mar 23 2017 .bashrc # 至關於 /etc/bashrc #
新用戶家目錄是什麼樣子,就能夠在這裏修改!
[root@learn-Linux001 ~]# echo 'my wechat is: DYbest-' >/etc/skel/readme.txt [root@learn-Linux001 ~]# ll /etc/skel/ total 4 -rw-r--r--. 1 root root 22 Feb 1 12:22 readme.txt [root@learn-Linux001 ~]# useradd Dao [root@learn-Linux001 ~]# ll /home/Dao/ total 4 -rw-r--r--. 1 Dao Dao 22 Feb 1 12:22 readme.txt [root@learn-Linux001 ~]# cat /home/Dao/readme.txt my wechat is: DYbest- [root@learn-Linux001 ~]# ll /home/pizza/ total 0
故障提示:
-bash-4.1$
-bash-4.1$
模擬:
[root@learn-Linux001 ~]# su - Dao [Dao@learn-Linux001 ~]$ \rm -f .bash* 搞點破壞 [Dao@learn-Linux001 ~]$ [Dao@learn-Linux001 ~]$ logout 退出再進去,故障就出來了 [root@learn-Linux001 ~]# su - Dao -bash-4.1$
-bash-4.1$ ls -la 查看一下用戶家目錄下的文件
total 16
drwx------. 2 Dao Dao 4096 Feb 1 12:28 .
drwxr-xr-x. 4 root root 4096 Feb 1 12:23 ..
-rw-------. 1 Dao Dao 22 Feb 1 12:28 .bash_history
-rw-r--r--. 1 Dao Dao 22 Feb 1 12:22 readme.txt
-bash-4.1$
正常狀況下,用戶目錄下還有不少文件,可是如今沒有了
出現這種狀況的緣由:
用戶下的與環境變量相關的隱藏文件 被刪除了
-bash-4.1$ echo $PS1 \s-\v\$ 正常的是: [root@learn-Linux001 ~]# echo $PS1 [\u@\h \W]\$
如何解決:
從其餘地方複製這些文件
#方法一:從/etc/skel 複製 [root@learn-Linux001 ~]# su - Dao -bash-4.1$ cp /etc/skel/.bash* ~ -bash-4.1$ logout [root@learn-Linux001 ~]# su - Dao [Dao@learn-Linux001 ~]$ logout [root@learn-Linux001 ~]# #方法二:從其餘用戶家目錄複製 -bash-4.1$ cp /home/pizza/.bash* ~ cp: cannot stat `/home/pizza/.bash*': Permission denied -bash-4.1$
報錯了,因沒有權限,你能夠解決嗎?
先想一下,在看如何解決
-bash-4.1$ logout [root@learn-Linux001 home]# cp /home/pizza/.bash* /home/Dao/ [root@learn-Linux001 home]# su - Dao [Dao@learn-Linux001 ~]$ #也許還有其餘辦法
.*表示的含義 在正則中,就是全部 在命令行中,以點開頭的全部文件和目錄 有點參與表示的含義有如下幾種: #一、以點開頭的全部東西 #二、當前目錄 #三、.. 當前目錄的上一級目錄 #四、表示以點開頭隱藏的文件或目錄 #五、.bash* 因此,rm .* -fr 將摧毀一切,請慎重
添加用戶
-u # 指定用戶的uid -s # 指定用戶使用的shell -M # 表示不建立家目錄 通常常見虛擬用戶使用 -g # 指定 用戶屬於的組(組的名字) 添加用戶的時候 默認建立一個與用戶名同樣的家庭
-c # 添加說明信息
題目:添加一個用戶xiaodao001 ,制定uid爲888 禁止用戶登陸系統,不建立家目錄
[root@learn-Linux001 home]# useradd xiaodao001 -u 888 -s /sbin/nologin -M [root@learn-Linux001 home]# grep xiaodao /etc/passwd xiaodao001:x:888:888::/home/xiaodao001:/sbin/nologin You have new mail in /var/spool/mail/root [root@learn-Linux001 home]# ll total 8 drwx------. 2 Dao Dao 4096 Feb 1 12:50 Dao drwx------. 2 pizza pizza 4096 Jan 30 23:14 pizza [root@learn-Linux001 home]#
刪除用戶
#通常的刪除用戶的操做是:把這個用戶在/etc/passwd中註釋 userdel默認不會刪除用戶的家目錄和郵箱 -r 連窩端 #刪除與用戶相關的全部信息(家目錄)
修改用戶信息,他的參數和useradd 是差很少的
-s #修改用戶使用的shell -g #修改屬於的家庭 用戶組的名字 -G #屬於多個家庭 -c # 修改用戶信息 [root@learn-Linux001 home]# usermod -g root pizza [root@learn-Linux001 home]# id pizza uid=500(pizza) gid=0(root) groups=0(root) [root@learn-Linux001 home]# usermod -G root,pizza pizza [root@learn-Linux001 home]# id pizza uid=500(pizza) gid=0(root) groups=0(root),500(pizza) [root@learn-Linux001 home]# usermod -c 'a new user' pizza [root@learn-Linux001 home]# id pizza uid=500(pizza) gid=0(root) groups=0(root),500(pizza) [root@learn-Linux001 home]# grep pizza /etc/passwd pizza:x:500:0:a new user:/home/pizza:/bin/bash [root@learn-Linux001 home]#
修改密碼
[root@learn-Linux001 home]# passwd pizza Changing password for user pizza. New password:
非交互式設置密碼
[root@learn-Linux001 home]# echo '123456' | passwd --stdin pizza Changing password for user pizza. passwd: all authentication tokens updated successfully.
注:- -stdin 參數只能是root用戶使用
注:這裏有一個漏洞:這樣設置完密碼以後,經過history就能夠查看到咱們設置的密碼
[root@learn-Linux001 home]# history |tail -5 39 passwd pizza 40 echo '123456' | passwd --stdin pizza 看到密碼了 41 history 42 history |tail -2 43 history |tail -5 [root@learn-Linux001 home]# history -c 經過此命令清除歷史 [root@learn-Linux001 home]# history 1 history
#一、密碼要複雜12位以上字母數字特殊字符 #二、大的企業用戶和密碼統一管理(至關於活動目錄(AD),openidap域) #三、動態密碼:動態口令,第三方提供,本身開發也簡單。 # 如何保存密碼: keepass 至關於本身弄了一個保險櫃 lastpass 至關於在別人那裏租了一個保險櫃,是一個在線軟件
一、運維的軟件必定要從官網下載,將兩個文件都下好以後,開始安裝使用
https://keepass.info/download.html
二、下載翻譯包
三、將兩個文件同時解壓
四、將翻譯包KeePass-1.36-Chinese_Simplified下的Chinese_Simplified.lng文件放到軟件包\KeePass-1.37\Languages下
五、雙擊KeePass.exe使用
點擊不跟新
六、進入主界面,選擇view---change language,選擇chinses
重啓後,進入中文界面
七、文件---新建,建立一個‘’保險箱‘’
八、保險箱建立好了,能夠自定義建立密碼類型,右鍵單擊常規---建立子項目server,在server下建立密碼記錄
建立記錄
點擊使用生成隨機密碼
若是不滿意,能夠一直點擊生成,指導滿意爲止,點擊接受---提交
要使用的時候,複製密碼,而後在命令行中使用
九、密碼記錄建立好了以後,能夠將這個保險箱保存在本地,下次使用時,須要輸入保險箱密碼
十、這個軟件還有不少功能,歡迎嘗試探究,並分享出來
怎麼讓系統更安全呢?
安裝系統和軟件都最小化安裝
運行的軟件越少越好
禁止root用戶遠程登陸
修改遠程鏈接端口號22
進行日誌分析:failed 或者failure(/var/log/secure文件)
給系統經常使用命令 +i
給系統配置文件 +a
文件內容的變化 ====> 指紋變化
經過對比指紋,就能夠知道文件內容有沒有變化
一、給文件建立指紋
md5sum 文件
二、如何快速對比指紋
把你的指紋記錄下來 md5sum 文件 > 放置指紋的文件(指紋庫)
進行對比 md5sum -c 文件
三、使用定時任務+md5sum定時檢查
[root@learn-Linux001 pizza]# echo pizza.com > learn.txt [root@learn-Linux001 pizza]# md5sum /pizza/learn.txt 4c9168f0838663a132a2d09f19caecfc /pizza/learn.txt [root@learn-Linux001 pizza]# md5sum /pizza/learn.txt 4c9168f0838663a132a2d09f19caecfc /pizza/learn.txt 指紋沒有變化 #將文件指紋存在一個文件中 [root@learn-Linux001 pizza]# md5sum /pizza/learn.txt >police.log [root@learn-Linux001 pizza]# #對比 ## 沒有改變時候,檢查結果是OK [root@learn-Linux001 pizza]# md5sum -c police.log /pizza/learn.txt: OK ## 加入新內容太后,檢查結果是FAILED [root@learn-Linux001 pizza]# echo 'talk is cheap' >>learn.txt [root@learn-Linux001 pizza]# md5sum -c police.log /pizza/learn.txt: FAILED md5sum: WARNING: 1 of 1 computed checksum did NOT match [root@learn-Linux001 pizza]# # 文件內容已經變化了
注:咱們平時在下載一些重要的文件的時候,網站會提供MD5值,下載完成後,咱們用軟件(notepad++中就有這個功能)生成MD5值以後,與官網給的值進行比較,若是是同樣的,就說明這個軟件包是完整的,或者沒有被修改過的
參考:http://lidao.blog.51cto.com/3388056/1910889
批量添加10個用戶stu01,stu02......stu10,並設置8位隨機密碼(禁止使用for,while等循環)
先想一下吧......
題目看似很是簡單,實際上,對Linux基礎命令要求很是高,不能使用shell循環就是爲了考同窗們的基礎知識的。 話很少說,言歸正傳,說實話若是單純爲了到達這道題的結果,只要基礎命令好的同窗,也很簡單,我先說一下我看到題目的思路吧。 1、用戶名稱的批量生成。 2、隨機密碼生成的方法。 3、由於要一條命令搞定,因此考慮構造一個命令,使之符合要求,最後交給bash執行。 思路明確以後,那咱們就開始着手作吧。 <1> 用戶名稱的批量生成 由於咱們要生成相似以下的序列: stu01 stu02 stu03 ...... stu08 stu09 stu10 法一:花括號展開{..} echo stu{01..10} stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10 由於咱們須要的是豎行排列的,那怎麼辦呢? 這裏說明一下爲何非要豎行排列的,由於咱們後面構造命令,是指望一行一行的執行,因此須要讓它豎列排序的。 那咱們就想辦法呀,看看有什麼命令能搞定或者echo自己能不能搞定啊。 因而咱們又有了兩個思路: ①經過echo自己能夠打印出豎列的效果,可是此處彷佛用不上啊。 echo -e "stu01\nstu02" stu01 stu02 ②想辦法把echo打印出來的序列中的空格替換成回車不就好了嘛,因而,咱們想到了tr命令。 1 2 3 4 5 6 7 8 9 10 11 [root@oldboylinux ~]# echo -e stu{01..10}|tr " " "\n" stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10 法二:利用seq命令,seq自己就是幹這活的呀,是否是,哈哈。 1 2 3 4 5 6 7 8 9 10 11 [root@oldboylinux ~]# seq 10 1 2 3 4 5 6 7 8 9 10 彷佛不是咱們想要的結果呀,咱們想要的是 01 02 ... 09 10 那怎麼辦啊,想一想老師的運維思路,你想要的結果,也許就是寫程序的人想要的結果,也就是說極可能有相似參數能夠用啊,結果一查幫助,果真,並且還有意外的收穫。 ①seq的"-w"參數,就是專門生成相似序列需求而生的。 ②seq的"-f"參數,能夠格式化輸出序列,我去這不正是咱們想要的效果嘛,趕忙試試看。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@oldboylinux ~]# seq -w 5 1 2 3 4 5 [root@oldboylinux ~]# seq -w 05 01 02 03 04 05 [root@oldboylinux ~]# seq -w 10 01 02 03 04 05 06 07 08 09 10 若是咱們單純只是用"-w"參數,那還須要配合其餘命令才能達到咱們想要的這樣的效果。 stu01 stu02 stu03 ...... 好比:用sed替換 1 2 3 4 5 6 7 8 9 10 11 seq -w 10|sed 's#.*#stu&#g' stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10 可是咱們"man seq"不是看到還有"-f"參數嘛,那還不趕忙試試看。 1 2 3 4 5 6 7 8 9 10 11 seq -f "stu%02g" 10 stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10 解釋一下,後面引號裏面的內容,這個是與C語言printf格式化輸出相似,%號前面指定字符串,後面的02g中的2表示輸出列寬爲2列,0表示用0填充不足的部分,默認是用空格填充不足的部分,g是表示整數輸出。 好了,序列咱們有了,下一個就是想辦法生成8位隨機密碼了。 <2> 8位隨機密碼的生成 Linux系統下生成隨機密碼的方法有不少,咱們最容易想到的就是$RANDOM,這是一個由系統自動維護的隨機數。咱們參考網絡資料,簡單介紹其中的四種方法供你們參考。 ①經過時間得到隨機數(date) 這個也是咱們常常用到的,能夠說時間是惟一的,也不會重複的,從這個裏面得到同一時間的惟一值。適應全部程序裏面了。 例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 [chengmo@centos5 shell]$ date +%s 1287764773 #得到時間戳,當前到:1970-01-01 00:00:00 相隔的秒數 #若是用它作隨機數,相同一秒的數據是同樣的。在作循環處理,多線程裏面基本不能知足要求了。 [chengmo@centos5 shell]$ date +%N 738710457 #得到當前時間的納秒數據,精確到億分之一秒。 #這個至關精確了,就算在多cpu,大量循環裏面,同一秒裏面,也很難出現相同結果,不過不一樣時間裏面還會有大量重複碰撞 [chengmo@centos5 shell]$ date +%s%N 1287764807051101270 #這個能夠說比較完美了,加入了時間戳,又加上了納秒 經過上面說明,用它來作隨機數的基數了,接下來咱們看怎麼樣得到一段數據內怎麼樣得到隨機數。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #!/bin/sh #寫個隨機函數,調用方法random min max #在min 與 max直接得到隨機整數 #copyright chengmo QQ:8292669 #得到隨機數返回值,shell函數裏算出隨機數後,更新該值 function random() { min=$1; max=$2-$1; num=$(date +%s+%N); ((retnum=num%max+min)); #進行求餘數運算便可 echo $retnum; #這裏經過echo 打印出來值,而後得到函數的,stdout就能夠得到值 #還有一種返回,定義全價變量,而後函數改下內容,外面讀取 } #獲得1-10的seq數據項 for i in {1..10}; do out=$(random 2 10000); echo $i,"2-10000",$out; done; ②經過內部系統變量($RANDOM) 其實,linux已經提供有個系統環境變量了,直接就是隨機數,哈哈,以爲剛學習方法,是否是白費了!! 1 2 3 4 5 6 [chengmo@centos5 shell]$ echo $RANDOM 10918 [chengmo@centos5 shell]$ echo $RANDOM 10001 #連續2次訪問,結果不同,這個數據是一個小於或等於5位的整數 可能有疑問了,若是超過5位的隨機數怎麼獲得呢? 呵呵,加個固定10位整數,而後進行求餘,跟例1 同樣了。接下來的例子又是咱們自立更生作了。 ③經過系統內部惟一數據生成隨機數(/dev/random,urandom) 咱們知道dev目錄下面,是linux一些默認設備,它給咱們感受就是放的是鍵盤,硬盤,光驅等設備的對應文件了。 其實linux有些設備很特殊,有特殊用途。前面咱們說到的:/dev/[udp|tcp]/host/port比較特殊吧。呵呵,有扯遠了。 /dev/random設備,存儲着系統當前運行的環境的實時數據。它能夠看做是系統某個時候,惟一值數據,所以能夠用做隨機數元數據。咱們能夠經過文件讀取方式,讀得裏面數據。/dev/urandom這個設備數據與random裏面同樣。只是,它是非阻塞的隨機數發生器,讀取操做不會產生阻塞。 獲得整型數據,而後,相似一的方法就能夠得到到隨機數了。 題外話:在程序裏面,咱們常常md5獲得惟一值,而後是字符串的,若是想表示成整型方式,能夠經過crc函數.crc是循環冗餘校驗,相同數據經過運算,都會獲得一串整型數據。如今這種驗證應用很廣。詳細要了解,能夠參考:crc. ④讀取linux 的uuid碼 在提到這個以前,有個概念,就是什麼是uuid呢? UUID碼全稱是通用惟一識別碼 (Universally Unique Identifier, UUID),它 是一個軟件建構的標準,亦爲自由軟件基金會 (Open Software Foundation, OSF) 的組織在分佈式計算環境 (Distributed Computing Environment, DCE) 領域的一部份。 UUID 的目的,是讓分佈式系統中的全部元素,都能有惟一的辨識信息,而不須要經過中央控制端來作辨識信息的指定。如此一來,每一個人均可以建立不與其它人衝突的 UUID。在這樣的狀況下,就不需考慮數據庫建立時的名稱重複問題。它會讓網絡任何一臺計算機所生成的uuid碼,都是互聯網整個服務器網絡中惟一的。它的原信息會加入硬件,時間,機器當前運行信息等等。 UUID格式是:包含32個16進位數字,以「-」鏈接號分爲五段,形式爲8-4-4-4-12的32個字符。範例;550e8400-e29b-41d4-a716-446655440000 ,因此:UUID理論上的總數爲216 x 8=2128,約等於3.4 x 1038。 也就是說若每奈秒產生1兆個UUID,要花100億年纔會將全部UUID用完。 其實,你們作數據庫設計時候,確定據說過,guid(全局惟一標識符)碼,它實際上是與uuid相似,由微軟支持。 這裏編碼,基本有操做系統內核產生。你們記得把,在windows裏面,不管數據庫,仍是其它軟件,很容易獲得這個uuid編碼。 linux 的uuid碼 linux的uuid碼也是有內核提供的,在/proc/sys/kernel/random/uuid這個文件內。其實,random目錄,裏面還有不少其它文件,都與生成uuid有關係的。 1 2 3 4 5 6 7 8 9 [chengmo@centos5 ~/shell]$ cat /proc/sys/kernel/random/uuid dff68213-b700-4947-87b1-d9e640334196 [chengmo@centos5 ~/shell]$ cat /proc/sys/kernel/random/uuid 7b57209a-d285-4fd0-88b4-9d3162d2e1bc #連續2次讀取,獲得的uuid是不一樣的 [chengmo@centos5 ~/shell]$ cat /proc/sys/kernel/random/uuid| cksum | cut -f1 -d" " 2141807556 #同上方法獲得隨機整數 咱們用的是方法是第二種,而後結合md5sum,最後取出8位做爲密碼,由於這樣獲取的密碼是字符加數字 1 2 3 4 5 6 7 8 [root@oldboylinux ~]# echo $RANDOM|md5sum|cut -c 1-8 d8c57fd6 [root@oldboylinux ~]# echo $RANDOM|md5sum|cut -c 1-8 b6e693b6 [root@oldboylinux ~]# echo $RANDOM|md5sum|cut -c 1-8 6dbb7cac [root@oldboylinux ~]# echo $RANDOM|md5sum|cut -c 1-8 663bda06 好了,到這裏爲止,咱們前兩步都有辦法解決了,那就是最後一步了,把他們拼湊成咱們想要的命令效果,而後交個bash執行就能夠了。 <3> 拼湊想要的語句效果提交給bash執行 #seq -f "stu%02g" 10|sed -nr 's#(.*)#useradd \1;random=$(echo $RANDOM|md5sum|cut -c 1-8);echo "$random"|passwd --stdin \1#gp'|bash -x &>useradd.txt 好了,咱們來分開解釋一下每一部分的做用。 ①seq -f "stu%02g" 10 這一部分就是用於批量生成用戶名; ②sed -nr 's#(.*)#useradd \1;random=$(echo $RANDOM|md5sum|cut -c 1-8);echo "$random"|passwd --stdin \1#gp' 這一段,就是用sed的替換功能來拼湊咱們想要的命令結果,拼湊的結果相似於以下結果, \1表示前面(.*)內匹配到的字符串; useadd stu01;random=$(echo $RANDOM|md5sum|cut -c 1-8);echo "$random"|passwd --stdin stu01 ③bash -x &>useradd.txt 這一段,按道理說,只要有"bash"就能夠了,結果確定會執行了,可是咱們想一下,是否是哪裏還有點小問題啊,那就是咱們本身建立的用戶,密碼是什麼呢?你不會告訴我,你也不知道吧,哈哈,一開始我就是乾的呀,後面想測試一下能不能用建立的用戶登錄系統時,發現完蛋,不知道登陸密碼,因此想再交個bash執行前,把內容輸出一份到文件,但是前面沒有執行啊,哪裏有密碼呢,一度覺得這條路是一定有瑕疵了,後來又轉念一想,bash不是有調試參數嘛,OK,那就試試,結果很不錯,但是又沒法追加到文件,奇怪呀,原來調試信息是當錯誤信息來處理的呀,那就來個絕的,管你是標準輸出仍是錯誤輸出都給我到指定文件去,這下就OK了, 完美。 你是否是覺得到這裏就結束了,哼,纔不會呢!繼續往下看哦,更多精彩還在後面呢。。。 拼湊方法大總結: ①sed替換大法,即sed 's#要替換的內容#替換後的內容#g',例子見上面和最後面的案例。 ②awk拼湊大法,例子以下: #echo -e "$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)"|awk '{print "echo "$1"|""passwd --stdin stu0"NR}'|awk '{print "useradd " $NF";"$0}'|tee useradd.txt|bash 一、echo -e "$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)\n$(echo $RANDOM|md5sum|cut -c 1-8)" 這一大段,看着好嚇人啊,其實就是一個目的重複10次,你分開看就是這樣的 【$(echo $RANDOM|md5sum|cut -c 1-8)\n】就是用來生成8位隨機密碼,重複10次,還記得最開始的echo -e參數換行大法嘛,沒錯,這裏就用上了。 二、awk '{print "echo "$1"|""passwd --stdin stu0"NR}'|awk '{print "useradd " $NF";"$0}' 這一行就是用來拼湊咱們想要實現的效果語句,具體相似以下: useradd stu01;echo 1b487225|passwd --stdin stu01 3、tee useradd.txt 這一行就是爲了保存生成密碼和用戶名到文件useradd.txt 4、bash 把上面拼湊的語句交給bash,執行。 其餘拼湊方法參考: 基本上都是相似上述思路,只是實現方法有所不一樣罷了,各位本身斟酌吧,這些都搞定,說明咱們的Linux基礎就真OK了,重點關注一下加紅的部分的實現思路。 ①#echo a2stu{01..02}|xargs -n1|awk '{print"useradd "$0" && mkpasswd -l 8 >>/tmp/mima.txt;tail -1 /tmp/mima.txt|passwd --stdin "$0}'|bash ②#echo stu{01..10} | sed "s# #\n#g" | awk '{print "useradd " $1 " -p " "echo $[RANDOM**3]|cut -c 1-8"}'|bash ③#echo stu{01..10} | sed "s# #\n#g" | awk '{cmd="echo $[RANDOM3]|cut -c 1-8";print "useradd " $1 " -p " "`echo $[RANDOM3]|cut -c 1-8`"}' |bash ④echo stu{1..10}|xargs -n 1|awk '{print "useradd", $1,"&& " "echo date +%N|cut -c 1-8 |" "passwd --stdin",$1 }'|bash ⑤# echo stu{01..10}|xargs -n 1|sed -n 's#.*#useradd & \&\& echo date +s%|cut -c 1-8|passwd --stdin & #gp'|bash ⑥#echo stu{1..10}|xargs -n 1|awk '{print "useradd", $1,"&& " "echo date +%N|cut -c 1-8 |" "passwd --stdin",$1 }'|bash ⑦#echo stu{01..10}|xargs -n1 useradd && echo stu{01..10}:date +%N|cut -c1-8|xargs -n1|tee -a pass.txt|chpasswd ⑧#echo user{01..10} | xargs -n1| sed -n 's/.*/useradd &\n echo &|md5sum|cut -c 1-8|passwd --stdin &/p'|bash ⑨#echo stu{01..10}|tr " " "\n"|sed -r 's#(.*)#useradd \1;pass=echo $((RANDOM+123456))|md5sum|cut -c 2-9;echo $pass|passwd --stdin \1;echo "\1 echo $pass" >>/tmp/b.log#g'|bash ⑩#echo stu{01..10}|xargs -n1|sed -nr 's#^(.*)$#useradd \1;echo $(date +%T)|md5sum|cut -c 1-8 >/root/\1.txt;cat /root/\1.txt|passwd --stdin \1#gp' >>/root/useradd.txt 2>&1 #echo stu{01..10}:$(date +%N)|sed 's# #\n#g' >/mnt/pass;awk -F ":" '{print $1}' /mnt/pass |xargs -n 1 useradd;pwunconv;chpasswd </mnt/pass;pwconv #echo stu{01..10}|tr " " "\n"|sed -r 's#(.*)#useradd \1;lc=$((RANDOM+10000000)); echo "$lc"|passwd --stdin \1#g'|bash #echo stu{01..10}:$(cut -c 1-8 <<< $(md5sum <<< $RANDOM))|xargs -n1|tee useradd.txt|awk -F ':' '{print "useradd "$1 " && echo " $2 "|passwd --stdin " $1}'|bash #echo stu{01..10} |tr ' ' '\n'|sed -rn 's@^(.*)$@useradd \1 ; echo $RANDOM|md5sum|cut -c 1-8 >/data/\1;cat /data/\1|passwd --stdin \1@gp'|bash #$echo stu{01..10}c$[$RANDOM**3] | sed 's# #\n#g' | cut -c 1-14 | awk -F'c' '{print"useradd " $1" && echo "$2" | passwd --stdin "$1}' | bash #echo stu{1..10}|xargs -n1 useradd ;echo stu{1..10}:cat /dev/urandom|tr -dc 0-9|fold -w8|head -1|xargs -n1|tee -a pass.txt|chpasswd
修改文件或目錄全部者和屬於的用戶組
-R 遞歸修改文件或者目錄的全部者和用戶組,危險的命令,沒有提示
chown pizza learnLinux.txt # 只修改文件的全部者 chown pizza.pizza learnLinux.txt # 修改了文件的全部者和所屬組
建立用戶組
-g 指定用戶組的gid數字
題目:添加一個虛擬用戶mysql,指定用戶的uid、gid都是999
[root@learn-Linux001 ~]# useradd -s /sbin/nologin -M -u 999 mysql [root@learn-Linux001 ~]# id mysql uid=999(mysql) gid=999(mysql) groups=999(mysql)
-u 指定了uid和gid
官方寫法
[root@learn-Linux001 ~]# groupadd -g 999 mysql
[root@learn-Linux001 ~]# useradd -s /sbin/nologin -M -u 999 -g mysql mysql
id # 查看用戶信息。查看用戶是否存在,查看用戶uid、gid,查看用戶屬於哪一個組 /etc/group # 某個用戶組下面有什麼用戶?(沒有命令,就在這個文件中查看) w # 顯示系統中已經遠程登陸的用戶 last # 哪一個用戶在何時 從哪裏 運城登錄你的系統 用戶登陸的信息 lastlog # 顯示linux中全部用戶最近一次遠程登陸的信息
#一、w [root@learn-Linux001 ~]# w 11:12:50 up 39 min, 1 user, load average: 0.25, 0.15, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.0.0.1 10:58 0.00s 0.26s 0.09s w #二、uptime [root@learn-Linux001 ~]# uptime 11:28:27 up 55 min, 1 user, load average: 0.00, 0.00, 0.00 #三、top,交互式,至關於uptime+free -h+ps -ef三個命令 [root@learn-Linux001 ~]# top top - 11:23:18 up 50 min, 1 user, load average: 0.00, 0.01, 0.00 #和w的第一行同樣 Tasks: 90 total, 1 running, 89 sleeping, 0 stopped, 0 zombie Cpu(s): 0.3%us, 0.3%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st Mem: 1894988k total, 256244k used, 1638744k free, 48392k buffers Swap: 786428k total, 0k used, 786428k free, 55980k cached # 默認按照CPU排序,按M就按照內存排序。按P回到以cpu排序 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2072 root 20 0 15036 1220 948 R 0.3 0.1 0:00.25 top 1 root 20 0 19356 1560 1236 S 0.0 0.1 0:01.76 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/0 ... 如下三個命令須要安裝 #四、htop 加強版的top命令 #五、iotop 顯示系統中每一個進程使用的磁盤IO #六、iftop 顯示系統網絡流量
/var/log/secure 和 /var/log/messages 這樣的文件,普通用戶是沒法查看的
[root@learn-Linux001 ~]# ll /var/log/secure -rw-------. 1 root root 0 Feb 3 11:11 /var/log/secure # 權限是600
當開發人員須要查看內容的時候,咱們也不能給文間修改權限,由於修改以後全部人都能看了~!還有一個辦法就是suid(運行某個命令的時候至關於命令的全部者),可是這個命令的權限太大了。
怎麼作纔是安全的呢?
- 是su的一個參數,表示切換用戶的時候更新環境變量
開發人員,其餘人員,想臨時使用 看系統日誌、刪除軟件日誌、認識添加用戶
普通用戶想臨時成爲皇帝
sudo -l 查看當前用戶的尚方寶劍
[pizza@learn-Linux001 ~]$ sudo -l We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility.
[sudo] password for pizza:
Sorry, user pizza may not run sudo on learn-Linux001.
visudo 給用戶授予尚方寶劍
pizza ALL(ALL) /bin/ls,/bin/touch 添加的格式
[pizza@learn-Linux001 ~]$ sudo -l [sudo] password for pizza: Matching Defaults entries for pizza on this host: !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User pizza may run the following commands on this host: (ALL) /bin/ls, (ALL) /bin/touch [pizza@learn-Linux001 ~]$
在使用命令的時候,加上sudo(帶上尚方寶劍)就能生效了
[pizza@learn-Linux001 ~]$ ls /root/ ls: cannot open directory /root/: Permission denied 沒有權限 [pizza@learn-Linux001 ~]$ sudo ls /root 有權限了 [sudo] password for pizza: learn.txt [pizza@learn-Linux001 ~]$
visudo ======至關於在編輯 vim /etc/sudoers 並且還有一個簡單的語法檢查功能 在visudo執行完了以後,至關於還執行visudo -c [root@learn-Linux001 ~]# visudo -c /etc/sudoers: parsed OK 若是你要手動編輯文件,完成以後要運行一下visudo -c crontab -e(root) ====== vi /var/log/spool/cron/root 語法檢查功能 ##受權某個目錄下的全部命令 pizza ALL=(ALL) /bin/* 可是這樣有一個坑,就是能夠執行sudo - root 而不須要密碼 [pizza@learn-Linux001 ~]$ su - root 執行切換,不行 Password: su: incorrect password 帶上sudo 就切過去了,由於/bin目錄下有su [pizza@learn-Linux001 ~]$ sudo su - [root@learn-Linux001 ~]# ##受權某個目錄下的全部命令 ,並排除su pizza ALL=(ALL) /bin/*,!/bin/su [pizza@learn-Linux001 ~]$ sudo su - Sorry, user pizza is not allowed to execute '/bin/su -' as root on learn-Linux001. ##可是還有rm vi可使用!!!!用vi後用戶本身就能夠修改爲ALL因此,咱們在受權時,必定要指定到具體的命令,須要什麼,給什麼 ## 不用輸入密碼 (只給本身用,不要給別人) pizza ALL=(ALL) NOPASSWD: ALL ###root用戶是禁止遠程登錄的,咱們可使用普通用戶,賦予權限,而後經過 sudo su - 直接變成root
pizza ALL=(ALL) NOPASSWD: ALL
用戶名(用戶組名) 能夠在哪一臺主機=(能夠以什麼身份)
用於管理多臺服務器,方便運維人員查看和管理,不用去每臺服務器單獨查看和管理
全部用戶的全部操做,都經過跳板機/堡壘機,執行到服務器
記錄用戶的操做 行爲/日誌審計
回放用戶操做
經常使用的幾種:
一、堡壘機:商業產品
二、gateone web 跳板機
三、python開發的開源的跳板機(Jumpserver、crazyEYE)
四、shell跳板機