標籤:des style blog http java 使用
前言:
添加linux使用者帳號,這個相對簡單, 在面對叢集, 許多機器的時候, 我們該如何去做和實現? 這篇短文, 簡單講解一些思路, 儘可能地涉及周邊的一些知識點. 不光是營運人員會面臨這個問題, 對一個基於linux平台的叢集服務或軟體(比如hadoop叢集), 有時也會涉及到這塊.
應用情境:
是以centos 6.4作為示範的系統, 其他的系統有類同, 也有差異, 且以實戰演練, 一步步的講述下流程.
*) 實戰演練
查閱useradd的使用和參數選項
useradd --help
-d, --home-dir HOME_DIR home directory of the new account-m, --create-home create the user‘s home directory-p, --password PASSWORD encrypted password of the new account-s, --shell SHELL login shell of the new account
選項-p 能指定密碼, -d指定使用者主目錄, -s指定使用者登入shell
嘗試添加使用者名稱: thinkpad, 密碼: lenovo
useradd thinkpad -p lenovo -s /bin/bash
su thinkpad
輸入密碼: lenovo
第一次su thinkpad成功, 是因為當前的帳號是root, su thinkpad不要求輸入密碼驗證
第二次su thinkpad則失敗, 說明密碼並不是lenovo
為什麼呢? 究其原因, 如參數說明, 該參數指定的password為加密後密碼字串, 那具體採用了那種密碼編譯演算法?
我們可以進一步的通過命令手冊來查閱
man useradd
-p, --passwordPASSWORD加密了的密碼,就像 crypt(3) 的傳回值。預設為禁用密碼。
crypt是個系統函數, 我們繼續查閱
man 3 crypt
NAME crypt, crypt_r - password and data encryptionSYNOPSIS #define _XOPEN_SOURCE /* See feature_test_macros(7) */ #include <unistd.h> char *crypt(const char *key, const char *salt); #define _GNU_SOURCE /* See feature_test_macros(7) */ #include <crypt.h> char *crypt_r(const char *key, const char *salt, struct crypt_data *data);DESCRIPTION key is a user‘s typed password. salt is a two-character string chosen from the set [a–zA–Z0–9./].
key和salt(兩位元組)的設定很重要, 於是我們繼續編寫自己的密碼產生器
編寫檔案crypt_passwd.cpp
#define _XOPEN_SOURCE #include <unistd.h>#include <stdio.h>int main(){ const char *key = "lenovo"; // key 為想要設定的密碼 const char *salt = "xx";// salt為兩位元組, 可隨意取 char *result = crypt(key, salt); printf("password: %s\n", result); return 0;}
編譯crypt_passwd.cpp
g++ crypt_passwd.cpp -lcrypt -o crypt_passwd
輸入的xx8FwQtT5iVRQ, 即是lenovo對應加密字串
讓我們嘗試下, 此前的猜測是否正確
useradd thinkpad -p xx8FwQtT5iVRQ -m -d /home/thinkpad -s /bin/bash
su thinkpad
輸入密碼: lenovo
現在成功了, oh yeah, 是不是很簡單
那如何為叢集添自動添加帳號呢? 可藉助上篇免密碼登入的方式來實現.
另一種方式:
除了在useradd指定-p參數, 也可以借用here document來實現
編寫如下指令碼
#! /bin/bash# 添加鎖定使用者useradd thinkpad -m -d /home/thinkpad -s /bin/bash# 藉助here document來進行互動, 並設定密碼, (兩次輸入密碼是因為passwd需要重複驗證)passwd thinkpad <<-EOF lenovo lenovoEOF
使用不指定的密碼的useradd, 其建立的帳號是被鎖定的, 需要管理員藉助passwd對其賦予新密碼, 而這邊藉助here document的方式, 就免去手動輸入密碼的過程了.