Linux之用戶管理

如何讓一個腳本開機自啓動

一、放在/etc/rc.local中

二、經過chkconfig管理

#0、建立腳本
#一、腳本必須放在/etc/init.d/目錄下面
#二、腳本要有 執行權限 chmod +x
#三、腳本的開頭要有# chkconfig: 2345 99 99    (注意空格)
2345表示運行級別,99表示腳本是開機啓動順序,99表明關閉順序
注意開啓或者關係順序不要重複了
#四、加入到chkconfig中,讓chkconfig管理 chkconfig --add 腳本名字

 

 以上使用文檔,能夠查看chkconfig幫助: man chkconfightml

能夠嘗試翻譯出來python

 

chkconfig背後的故事

以前咱們修改配置,老是會有臨時生效和永久生效,這兩類修改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號,至關於戶口本編號

root用戶

UID:0    皇帝

虛擬用戶

UID:1-499  傀儡,爲了知足每一個進程、軟件須要一個用戶和用戶組,自己沒法使用

3大特色

一、每一個進程、軟件須要一個用戶和用戶組

二、傀儡用戶不須要,也沒法登錄系統

三、用戶的命令解釋器/sbin/nologin

非虛擬用戶的命令解釋器是/bin/bash

普通用戶

UID:500+

用戶相關的配置文件

/etc/passwd 用戶的信息

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

注意:不要隨便切換用戶的命令解釋器

 

 

 

/etc/shadpw 用戶密碼信息

/etc/group 用戶的 用戶組信息

/etc/gshadow 用戶組密碼信息

/etc/default/useradd 添加用戶的時候默認的信息

與用戶相關的目錄

/etc/skel

新用戶的家目錄的模板

[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   將摧毀一切,請慎重

 

用戶管理的命令

用戶相關命令

useradd

添加用戶

-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]# 
View Code

 

userdel

刪除用戶

#通常的刪除用戶的操做是:把這個用戶在/etc/passwd中註釋

userdel默認不會刪除用戶的家目錄和郵箱
-r 連窩端  #刪除與用戶相關的全部信息(家目錄)

usermod

修改用戶信息,他的參數和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]# 

 

passwd

修改密碼

[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 至關於在別人那裏租了一個保險櫃,是一個在線軟件

keepass使用詳解

一、運維的軟件必定要從官網下載,將兩個文件都下好以後,開始安裝使用

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用戶

禁止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
View Code

 

chown命令

修改文件或目錄全部者和屬於的用戶組

-R 遞歸修改文件或者目錄的全部者和用戶組,危險的命令,沒有提示

chown  pizza  learnLinux.txt   # 只修改文件的全部者

chown  pizza.pizza learnLinux.txt  # 修改了文件的全部者和所屬組

 

用戶組相關命令

groupadd

建立用戶組

-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詳細介紹

查看系統性能的命令

#一、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 顯示系統網絡流量

 

Linux尚方寶劍

 /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(運行某個命令的時候至關於命令的全部者),可是這個命令的權限太大了。

怎麼作纔是安全的呢?

SUDO 臨時讓用戶得到root權限

su 和su - 的區別:

- 是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跳板機

 

總結:

相關文章
相關標籤/搜索