rootpw密碼生成方法/c-exit
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"使用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$GVWpvO3Hu009C37IYF41L02、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.RN7ocYGCrJZo6JzcOMtk53、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