1. 程式人生 > >linux中cat、more、less命令區別詳解

linux中cat、more、less命令區別詳解

more|less

本文轉自:http://blog.csdn.net/xyw_blog/article/details/16861681


在《Python絕技》這本書的第一個小程序首先展示了針對與unix系統中shadow文件密碼的暴力破解的能力,因為之前只是對shadow文件停留在保存了用戶密碼的階段,但並沒有詳細研究,所以周末兩天特地花時間好好研究了一下。
1.passwd文件和shadow文件
在unix早些時候是沒有/etc/shadow這個文件的。一個用戶的所有信息都只是保存在/etc/passwd文件中,加密後的用戶密碼保存在了passwd文件的第二個字段中。那麽為什麽要產生shadow文件呢?
首先我們通過ls查看一下passwd文件的詳細權限:

-rw-r--r-- 1 root root 1505 Mar 6 22:34 /etc/passwd
可以看出每個用戶都是可讀的,那麽這不就把用戶密碼暴露給任何人了麽?雖然是加過密的,但是這樣也存在安全性問題。
現在的文件權限是這樣的:(註意/usr/bin/passwd除了rwx權限外還有一個SetUID的s標識位)
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
---------- 1 root root 964 Mar 6 22:34 /etc/shadow
首先通過對shadow文件取消所有權限,保證了只有root才能對shadow文件進行讀寫(root是天神,沒有特殊說明任何文件都在root的管轄之下)。那麽普通用戶修改密碼時肯定要對shadow文件進行更改的啊?通過/usr/bin/passwd的s位實現。
普通用戶的修改密碼流程是這樣的:
test用戶調用/usr/bin/passwd命令修改自己的密碼,因為passwd對任何用戶都是可執行的,而且s位規定所有可執行的用戶在執行這個命令時變身為root,所以此時test用戶拿著root的權限去讀寫shadow文件,當命令執行完成後變身結束,test變失去root權限。可以看出經過對shadow文件的分離,既保證了普通用戶對自己密碼的修改,也保證了普通用戶看不到加密後的密碼串提升了安全性。
2.shadow文件的組成
root:$1$abcdefg$Qp6zr7K0tHxV79N9cCLSc1:16866:0:99999:7:::
帳號名稱 :root
加密後的密碼:$1$abcdefg$Qp6zr7K0tHxV79N9cCLSc1

上次修改密碼的日期:16866
密碼不可被變更的天數:0
密碼需要被重新變更的天數:99999(99999表示不需要變更)
密碼變更前提前幾天警告 :7
帳號失效日期 :無
帳號取消日期 :無
保留條目,目前沒用
3.shadow文件的密碼部分
shadow文件的密碼部分由三個部分組成,由‘$‘分割。
以上面root用戶的密碼為例,按照‘$‘分割後分別是加密方式(1),salt值(abcdefg),加密後的密碼串(Qp6zr7K0tHxV79N9cCLSc1)。
首先看第一個加密方式,目前加密方式有6種,最常見的只有3種:
1:MD5加密,密文長度22
5:SHA-256加密,密文長度43
6:SHA-512加密,密文長度86
4.手動生成password字串(測試於centos6.5)
方法一:dovecot包中提供dovecotadm命令。
比如:doveadm pw -s SHA512-CRYPT,其中s參數可選多種加密方式,比如SHA512-CRYPT,SHA256-CRYPT,MD5-CRYPT。
方法二:openssl包中提供passwd子命令。
比如openssl passwd -1,但是我發現只支持md5。
方法三:默認的python中自帶crypt庫。

__import__("crypt").crypt("password","$1$abcdefg$") 1

如果你不想自己設置指定的salt值,可以使用crypt庫的mksalt函數自動生成,且提供md5,sha256,sha512全方位的支持。


linux中cat、more、less命令區別詳解