企業實戰腳本案例2:批量創建用戶並設置初始密碼

批量創建用戶並設置初始密碼


目錄:

1.腳本功能介紹

2.腳本製作技術需求

  2.1 useradd命令

  2.2 id命令

  2.3 passwd命令

  2.4 隨機密碼

  2.5 while循環+case+select

3.腳本編寫案例


一、腳本功能介紹

    在企業中生產或運維中,經常會遇到***服務器、企業網盤、企業郵箱、雲桌面私有賬號等等一系列的服務器。當批量新員工入職時,經常需要批量賬號分配給新員工,若此類賬號存儲在數據庫時,管理員可根據公司賬號命名規範通過專有圖形化系統進行錄入賬號,若賬號存儲在系統本地,此時通過腳本實現更爲方便。

    如企業賬號規範:用戶名規範爲取員工名字中姓的全拼且首字母大寫,名字的首字母,如有重複自動加重複用戶名次數+1。密碼規範爲取字母數字中8位長度的任意字符。

二、腳本製作技術需求

  2.1 useradd命令

    useradd命令的功能作用就是修改/etc/passwd文件中預定義的7個字段的內容,語法結構:useradd [option] login,常用用法如下:

useradd user1                               #添加用戶user1

useradd -u 120 user1                   #修改用戶user1的UID爲120

useradd -g grouptest user1             #修改用戶的默認組爲grouptest

useradd -d /app/home/user1 user1      #修改指定user1的家目錄爲/app/home/user1

useradd -s /sbin/nologin  user1      #修改用戶的shell

  2.2 id命令

    id命令的功能作用就是查看當前用戶的id信息,包括UID、GID和默認組,如果不存在賬戶時,則提示不存在,$?返回值大於0

[root@centos7 ~]#id root  &>/dev/null      #判斷用戶root是否存儲

[root@centos7 ~]#echo $?

0                                          #返回值爲0,用戶存在

[root@centos7 ~]#id rootbad  &>/dev/null

[root@centos7 ~]#echo $?

1                                          #返回值大於0,用戶不存在

   2.3 passwd命令

      passwd命令的功能作爲就是修改/etc/shadow文件中預定義的9個字段的內容,其中/etc/shadow的語義格式爲:

  bin  :   *   :  16659  :   0   :  99999  :   7   :       :      : 

 字段1   字段2    字段3    字段4    字段5    字段6   字段7   字段8  字段9

字段1:表示用戶名,與/etc/passwd中的賬號相匹配

字段2:默認是加密後的字符,如果爲*或!!表示沒有祕密,如果爲!!(加密字符)表示此賬號加鎖

字段3:表示上一次修改密碼的時間

字段4:表示密碼最短存活時間,其含義就是多久內不能修改密碼

字段5:表示密碼最長存活時間,其含義就是密碼最長有效期

字段6:表示密碼提前多少天開始提醒用戶賬號快到期

字段7:表示密碼到期後多少天寬限期,哲學含義就是容忍度是有限的,不要碰觸底線

字段8:表示密碼徹底失效,哲學含義就是已經觸犯底線,將密碼禁止

字段9:表示保留字段,目前尚未使用

     最長用的就是修改鎖定密碼和修改賬號,具體用法如下:

passwd -l user1               #鎖定某個賬號,將shadow文件中第二個字段!!(加密字符)字樣;

passwd -u user1               #解鎖某個賬號,將shadow文件中第二個字段中的!!去掉

passwd --stdin user1         #設置密碼通過標準輸入進行設置

[root@centos7 ~]#echo "centos123"|passwd --stdin xiaoxue
Changing password for user xiaoxue.
passwd: all authentication tokens updated successfully.

[root@centos7 ~]#echo "centos123"|passwd --stdin xiaowang &>/dev/nul

   2.4 隨機密碼

  在系統中隨機密碼有多種方式,其中優先使用專有的密碼生成工具mkpasswd,mkpasswd工具來自expect的rpm包,因此使用mkpasswd時,必須先安裝expect包,具體使用如下:

mkpasswd [option]

-l 指定密碼生成的長度,默認是9

-d 指定密碼生成時至少包含幾個數字,默認是3個

-c 指定密碼生成時至少包含幾個小寫字母,默認爲2個

-C 指定密碼生成時至少包含幾個大寫字母,默認2個

-s 指定密碼生成時至少包含幾個字符,默認1個

[root@centos7 ~]#mkpasswd -l 10
X4ep9[mCyr
[root@centos7 ~]#mkpasswd -l 10 -C 2
70w(OAggno

    其次當系統中不方便安裝mkpasswd工具時,使用系統隨機字母字符生成器設備/dev/urandom,利用他生成隨機數後進行過濾字母、數字,注意特殊字符過多,不一定連續,因此使用/dev/urandom時取特殊字符不好控制,建議使用mkpasswd,urandom具體使用如下:

[root@centos7 ~]#a=`cat /dev/urandom |tr -dc "a-zA-Z0-9"|head -c8`
[root@centos7 ~]#echo $a

mFPAW5Tn

[root@centos7 ~]#a=`cat /dev/urandom |tr -dc "a-zA-Z0-9"|head -c8`
[root@centos7 ~]#echo $a
WKChaCS

  2.5 while+case+break+select

    while循環執行某些指令動作,case實現選擇性執行某些指令,break實現遇到某些指令後執行跳出循環,seletc是自動生成菜單,因此在腳本的結構中while+case+break+select實現

三、腳本案例

    腳本實現兩種方式安裝,菜單中選擇1表示手工安裝,手工安裝適合批量較少時,無需自動化安裝,菜單中選擇2時表示自動化安裝,適合批量增加用戶,如新進大批員工,從人力資源獲取相關信息後,根據人力資源提供的姓名創建大批用戶,具體腳本如下:

#!/bin/bash

addlog=/var/log/useradd.log

execlog=/var/log/userexec.log
Dtime=`date +%F-%T`        #在定義日誌時,可以加如時間
########################Define function to see whether a parameter is valid
Valid_Parameter (){
    local i=0
    until [[ $name =~ ^[a-zA-Z]+$ ]];do
        let i++
        if [ i -gt 3 ];then
            echo "you need to input correct parameter(eg:Wangyj)"
        fi
    done
}
########################Define function to add user############
Add_User (){
    local setpasswd j num Name

    setpasswd=`mkpasswd -l 10`

     #判斷開頭是否包含變量name所含的字段,從而判斷是否有名字縮寫的重複

    let num=`awk -F: "/^"$name"[0-9]?+/{i++}END{print i}" /etc/passwd`+1
    Name01="$name"01   
    if [ $num -gt 1 ];then
            ####if $name is exist,than num >=1
            useradd "$Name" &>/null
                if [ $? == 0 ];then
                        echo $setpasswd |passwd --stdin "$Name" &>/null
                        echo "User $Name and password set successful"
                        echo "USER:$Name PASSWORD:$setpasswd" >> $addlog
                else
                        echo "$Name add failed!"
                fi
    else
            #if $name is not exist,then num=1,exec this statement
            useradd $Name01 &>/null
                if [ $? == 0 ];then
                        echo $setpasswd |passwd --stdin "$Name01" &>/null
                        echo "User "$Name01" and password set successful"
                            #if add success
                        echo "USER:"$Name01" PASSWORD:$setpasswd" >> $addlog
                else
                        echo ""$Name01"  add failed!"
                fi
    fi
}
########################Define function to manul user#########
Manul (){
    echo -e "\033[1;31mnote:if you input exit,then exit manal adding\033[0m"
    while true;do
        read -p "please input username: " name
            [ $name == exit ]&& break
            touch $addlog
            Valid_Parameter
            Add_User
    done
}
########################Define function to auto config########
auto_config (){
    echo -e "\033[1;31mAuto adding user begin\033[0m"
    while read name;do
    Add_User
    done < /etc/autoadd.config
    echo "adding finished"
}

######################Define main function
main (){
PS3="`echo please input the num you want: `"
select var in "manaul" "auto-config" "exit"
do
    case "$REPLY" in
        1)
            Manul
            ;;
        2)
            auto_config
            ;;
        3)
            echo exit successful
            exit 0
            ;;
        *)
            echo "intput error"
    esac
done
}
main



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章