1. 程式人生 > >rootpw密碼生成方法/c-exit

rootpw密碼生成方法/c-exit

內容 asdf atexit stack 否則 watch tex 正常 name

linux kickstart文件裏rootpw密碼可以使用明文,也可以使用加密過的值,這裏主要介紹下三種加密方法:md5、sha256、sha512

使用明文的方法

rootpw "password"

使用加密的方法

rootpw --iscrypted password_hash authconfig --enableshadow --enablemd5 (--passalgo=sha256 or --passalgo=sha512)

二、加密生成方法,這裏統一用password來加密

1、md5加密

使用openssl passwd命令:

# openssl passwd -1 "password"
$1$uMOl6YMI$7AAO8YG7l37ipRXCmmame.

使用grub-crypt命令,會提示輸出密碼:

# grub-crypt --md5 Password: Retype password: $1$Y9TR8PpY$qm1VzsjKzbXtYInyAQLG70

使用python,同樣也會提示輸出密碼:

# echo ‘import crypt,getpass; print crypt.crypt(getpass.getpass(), "$1$8_CHARACTER_SALT_HERE")‘ | python - Password: $1$8_CHARAC$GVWpvO3Hu009C37IYF41L0

2、sha256加密

使用grub-crypt命令,會提示輸出密碼:

# grub-crypt --sha-256 Password: Retype password: $5$NSEqzlxQFNE998rG$gDTEQsndo1pQ9/2.bj1knNNqQ0tQgzKH4bdzEjinHKC

使用python,提示輸入密碼:

# echo ‘import crypt,getpass; print crypt.crypt(getpass.getpass(), "$5$16_CHARACTER_SALT_HERE")‘ | python - $5$16_CHARACTER_SAL$sc08xCjatZRZPSxgCvHe2.RN7ocYGCrJZo6JzcOMtk5

3、sha512加密

使用grub-crypt命令,會提示輸出密碼:

# grub-crypt --sha-512 Password: Retype password: $6$twuCoL0kTI5ScTbr$GyUJymp1wU0ouFQFiWXoOfl2i.2G5E5wh3tqdprny4avv9kJWc3MdLR/GB9YbfKB1Kx9no9wpO8YcX4d28Mrz.

使用python,提示輸入密碼:

# echo ‘import crypt,getpass; print crypt.crypt(getpass.getpass(), "$6$16_CHARACTER_SALT_HERE")‘ | python - $6$16_CHARACTER_SAL$ykxE75iUZiphsLz40.oQAi7QIM4meq41EYYvQ66JkbODcvIrGIeRxF7dzpfvnk20ztzE3GY359DSSNQuPQdun.

  

rootpw密碼可以使用明文,也可以使用加密過的值(密碼為:IPPBXADMINROOT)

註意:在這裏要使用加密過的值,否則安全性就太低了

rootpw --iscrypted $1$IPPBXADM$qlbCgDSCK/a.1ZzfEk/mT.

linux系統的密碼shadow一樣,生成方法如下:

perl -e ‘print crypt("IPPBXADMINROOT",q($1$IPPBXADM)),"\n"‘

當使用特殊字符時,例如@$符時需要在前面加上\,例:\@\$,否則加密字符串會錯誤;

其中IPPBXADMINROOT為要給用戶設置的密碼,11IPPBXADM字符串是自定義字符串,shadow裏一般用11後面跟8個字符這種格式。

生成的密碼串樣式如下:

 $1$IPPBXADM$qlbCgDSCK/a.1ZzfEk/mT.

中間有個$,前面算salt,後面的加密值,合在一起叫hash

crypt 本身默認用des算法

如果salt以11開頭就使用md5算法

des算法命令如下:

perl -e ‘print crypt("IPPBXADMINROOT","/g"),"\n"‘

生成的密碼串樣式如下:

/g5fpEc81O2B2

exit(0):正常運行程序並退出程序;
exit(1):非正常運行導致退出程序;
return():返回函數,若在主函數中,則會退出函數並返回一值。
詳細說:
1. return返回函數值,是關鍵字; exit 是一個函數。
2. return是語言級別的,它表示了調用堆棧的返回;而exit是系統調用級別的,它表示了一個進程的結束。
3. return是函數的退出(返回);exit是進程的退出。
4. return是C語言提供的,exit是操作系統提供的(或者函數庫中給出的)。
5. return用於結束一個函數的執行,將函數的執行信息傳出個其他調用函數使用;exit函數是退出應用程序,刪除進程使用的內存空間,並將應用程序的一個狀態返回給OS,這個狀態標識了應用程序的一些運行信息,這個信息和機器和操作系統有關,一般是 0 為正常退出, 非0 為非正常退出。
6. 非主函數中調用return和exit效果很明顯,但是在main函數中調用return和exit的現象就很模糊,多數情況下現象都是一致的。
函數名: exit()
所在頭文件:stdlib.h(如果是”VC6.0“的話頭文件為:windows.h)
功 能: 關閉所有文件,終止正在執行的進程。
exit(1)表示異常退出.這個1是返回給操作系統的。
exit(x)(x不為0)都表示異常退出
exit(0)表示正常退出
exit()的參數會被傳遞給一些操作系統,包括UNIX,Linux,和MS DOS,以供其他程序使用。
stdlib.h: void exit(int status);

exit():

在調用時,會做大部分清理工作,但是決不會銷毀局部對象,因為沒有stack unwinding。

會進行的清理工作包括:銷毀所有static和global對象,清空所有緩沖區,關閉所有I/O通道。終止前會調用經由atexit()登錄的函數,atexit如果拋出異常,則調用terminate()。

abort():

調用時,不進行任何清理工作。直接終止程序。

retrun:

調用時,進行stack unwinding,調用局部對象析構函數,清理局部對象。如果在main中,則之後再交由系統調用exit()。

return返回,可析構
main或函數中的局部變量,尤其要註意局部對象,如不析構可能造成
內存泄露。exit返回不析構main或函數中的局部變量,但執行收工函數,
故可析構全局變量(對象)。abort不析構main或函數中的局部變量,也不
執行收工函數,故全局和局部對象都不析構。
所以,用return更能避免內存泄露,在C++中用abort和exit都不是好習慣.

Linux下產生隨機密碼10方法

有特殊符號的:

cat /dev/urandom | tr -dc "a-zA-Z0-9_+\~\!\@\#\$\%\^\&\*"| fold -w 16 |head -n 16

無特殊符號的:

#1

date +%s | sha256sum | base64 | head -c 32 ; echo

上述命令使用SHA來哈希日期,輸出頭32個字節。

#2

< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;

上述命令使用內嵌的/dev/urandom,只輸出字符,結果取頭32個。

#3

openssl rand -base64 32

上述命令使用系統自帶的openssl的隨機特點來產生隨機密碼

#4

tr -cd ‘[:alnum:]‘ < /dev/urandom | fold -w30 | head -n1

#5

strings /dev/urandom | grep -o ‘[[:alnum:]]’ | head -n 30 | tr -d ‘\n’; echo

通過過濾字符命令,輸出隨機密碼

#6

< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6

這個命令比起來比較簡單了

#7

dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev

上述命令使用命令dd的強大功能

#8

 </dev/urandom  tr -dc ’12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB’ | head -c8; echo “”

上述命令輸出很簡潔

#9

randpw(){ < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;}

使用randpw隨時產生隨機密碼,可以把它放到~/.bashrc文件裏面。

(我這裏沒有什麽密碼產生,可留言討論)

#10

date | md5sum

如果只用這一個,足夠了,因為它太簡潔了,:-)

用戶、權力下放、非登錄狀態root用戶密碼修改

1.用戶理解
用戶就是系統使用者的身份,用戶以數據身份存在。在系統中用戶存儲為若幹竄字符+若幹個系統配置文件。
用戶信息涉及到的系統配置文件:
(1)/etc/passwd ###用戶信息
用戶:密碼:uid:gid:說明:家目錄:用戶使用的shell
,在shell窗口輸入 cat /etc/passwd即可查出用戶的信息

(2)/etc/shadow ###用戶認證信息
用戶:密碼:最後一次密碼修改該時間:最短有效期:最長有效期:警告期:非活躍期:帳號到期日
,輸入cat /etc/shadow即可查出用戶認證信息。

(3)/etc/group ###組信息
組名稱:組密碼:組id:附加組成員
輸入cat /etc/group即可查出組信息。

(4)/etc/gshadow ###組認證信息
如下圖所示,輸入cat /etc/gshadow即可查出組認證信息。
(5)/home/username ###用戶家目錄
(6)/etc/skel/.* ###用戶骨架文件
如下圖所示,輸入cat /etc/skel/.*即可查出用戶骨架文件。
註意:/etc/skel/這個目錄中的所有文件或目錄

2.用戶管理
(1)用戶建立

useradd   參數     用戶名字
          -u      ##指定用戶uid

如下圖所示,建立一個用戶,並指定uid為888。

    -g  ##指定用戶初始組信息,這個組必須已經存在

,建立一個用戶,並指定初始組為linux。

    -G  ##指定附加組,這個組必須存在

如下圖所示,建立一個用戶,並指定附加組的id為21。

-c ##用戶說明
新建用戶,用戶說明為westos user。

-d ##用戶家目錄
建立一個用戶,並指定家目錄為/mnt/westos

-s ##用戶所使用的shell,/etc/shells記錄了用戶能使用shell的名字
如下圖所示,建立一個用戶,並指定用戶能使用的shell名字為/bin/tcsh。

##用戶和組的id須一致,否則提示組不存在。
## 用戶名不要為數字。數字的id與bin相同,用戶名為數字時用戶id的顯示為bin。

useradd -s  /sbin/nologin    westos  ##新建用戶westos,並禁止該用戶交互登陸

如圖所式,新建用戶westos,然後切換到用戶westos,系統提示該用戶不可用

shell類型查詢:cat /etc/shells

(2)用戶刪除

userdel  -r 用戶名稱   ##-r表示刪除用戶信息及用戶的系統配置

如下圖所示刪除用戶必須加上參數-r,否則會留下用戶的系統配置。

(3)組的建立

groupadd    -g    ##建立組
groupdel    組名字 ##刪除組
組的存在意義是共享權限,組分為初始組(1個)和附加組(多個)。
  • 作以上實驗的監控命令:

watch -n 1 ‘tail -n 3 /etc/passwd /etc/group;echo ====;ls -l /home;echo ===;ls -l /mnt’

(4)用戶id信息查看

id  參數  用戶
    -u   ##用戶uid
    -g   ##用戶初始組id
    -G   ##用戶所有所在組id
    -n   ##顯示名稱而不是id數字
    -a   ##顯示所有信息
  • 如下圖所示,id -a westos即可顯示該用戶的所有信息;加上參數-u、-g、 -G分別可查詢用戶的uid、初始組id、所有所在組id

(5)用戶信息更改

usermod 參數  用戶
    -l  ##更改用戶名稱
    -u  ##更改uid
    -g  ##更改gid
    -G  ##更改附加組
    -aG ##添加附加組
    -c  ##更改說明
    -d  ##更改家目錄指定
    -md ##更改家目錄指定及家目錄名稱
    -s  ##更改shell
    -L  ##凍結帳號
    -U  ##解鎖
  • 註意:(1)passwd -l 用戶 ##凍結帳號,使用usermod -u 用戶解鎖需要使用該命令兩次。而passwd -u 用戶執行一次就可以解鎖。如下圖所示


(2) passwd -u 用戶 ##解鎖
usermod命令及參數使勇如下圖所示。

3.用戶權力下放
(1)在系統中超級用戶可以下放普通用戶不能執行的操作給普通用戶
下放權力配置文件:/etc/sudoers

(2)下放權力的方法
*)超級用戶執行visudo進入編輯/etc/sudoers模式
*)格式:

獲得權限用戶  主機名稱=(獲得到的用戶身份) 命令
test    desktop0.example.com=(root) /usr/sbin/useradd
test用戶能在desktop0.example.com以超級用戶身份執行/usr/sbin/useradd
  • root用戶執行visudo進入到/etc/sudoers文件,開始進行下放權力操作,添加內容如下圖中的第100及101行。

(3)執行下放權限命令
sudo 命令 ##如果第一次執行sudo需要輸入當前用戶密碼
在/etc/sudoers中如果設置如下:

test  desktop0.example.com=(root)  NOPASSWD: /usr/sbin/useradd

表示用戶調用sudo命令的時候不需要自己密碼

當我們編輯結束保存文件後,即可使用下放的權力,如下圖所示。

4.用戶認證信息的控制

chage   參數  用戶
    -d  ##用戶密碼組後一次修改的時間,如果設定成0,用戶登陸系統後必須修改自己的密碼 
    -m  ##最短有效期
    -M  ##最長有效期
    -W  ##警告期
    -I  ##用戶非活躍天數
    -E  ##帳號到期日格式 -E "YYYY-MM-DD"
  • chage命令及參數的使用如下圖所示。


當使用-m參數將最短有效期修改為1(表示需要在一天之後才能修改密碼),立即修改密碼就會得到如下提示,表示需要等一段時間才能改密碼。

5.root密碼忘記
操作程序如下:
1.重新啟動系統
2.在系統啟動階段按上下健停止系統系統引導
3.選擇啟動引導標題,按“E”進行編輯

按E進入如下圖所示界面。

4.找到linux16引導條目這一行,從這行最後刪除到ro選項,並把ro改為rw,然後添加rd.break選項

修改後的結果如下圖所示。

5.ctrl+x啟動設定過後的系統引導條目
6.進入系統後執行chroot /sysroot切換到真實的系統環境
7.passwd root修改超級用戶密碼
8.建立文件/.autorelabel讓系統從新掃描所有文件(touch /.autorelabel)
9.exit兩次使系統自動重新啟動
第6-9步的操作如下圖所示。

rootpw密碼生成方法/c-exit