你知道創建用戶的過程嗎?

 

shell腳本示例(二)
 
在這個腳本中我將會一步一步的完全手動添加用戶,並不使用useraddpasswd兩個命令,而是直接通過在/etc/passwd/etc/shadow/etc/group,幾個文件中添加數據而創建用戶。
通過本示例,你可以完全瞭解linux創建用戶,創建密碼的完整詳細過程,以及各個字段的意義,幫助你理解linux對用戶的管理。腳本有點長,如果你能專心的讀完比理解肯定會有一點收穫的!
首先我先說一下腳本的流程:
1.       輸入一個用戶名,判斷是否存在
2.       輸入密碼通過openssl生成密碼
3.       判斷其他是否採取默認,如果非默認,則執行一下步驟
4.       輸入UID,並判斷
5.       同理GID
6.       讓用戶輸入想要創建的家目錄,如果存在,告訴用戶,是否創建新的目錄。
7.       通過查詢/etc/shells讓用戶輸入希望選取的shell
8.       輸入備註
9.       創建用戶,
10.   修改用戶的家目錄權限,及屬主屬組
#!/bin/bash
#option this script will enable you to add a user!
 
#USERNAME
 
CONDITION=y
while [ $CONDITION == 'y' ];do
#實現添加多個用戶
read -p "Input username: " TUSERNAME
#確定用戶名時,必須確定名字唯一,注意這裏並沒有判斷名字的格式
grep "^$TUSERNAME:" /etc/passwd > /dev/null
RESULT1=`echo $?`
while [ $RESULT1 -eq 0 ];do
 read -p "The user is exist!,Please input is again: " TUSERNAME
 grep "^$TUSERNAME:" /etc/passwd > /dev/null
 RESULT1=`echo $?`
done
echo "$TUSERNAME is your username! "
 
#END OF USERNAME
 
#CREATE PASSWD
 
read -p "Passwd: " TPASSWD
while [ $TPASSWD -lt 100 ];do
 read -p "Passwd must longer than three character! " TPASSWD
done
 
SALT=`head -1 /dev/urandom | md5sum | cut -d' ' -f1 | sed 's@\(.\{8\}\).*@\1@g'`
#此爲選取八位隨機數,作爲生成密碼的雜質
FPASSWD=`openssl passwd -1 -salt $SALT $TPASSWD`
#這是生成密碼的過程,注意密碼的格式
CURR=`date '+%s'`
CURRENTTIME=`expr $CURR / 86400`
echo "$TUSERNAME:$FPASSWD:$CURRENTTIME:0:99999:7:::" >> /etc/shadow
#注意/etc/shadow中每一行的格式
#END OF CREATE PASSWD
 
read -p "Would like to set others as default(y/n)? " RESULT6
if [ $RESULT6 == 'y' ];then
 UGID=500
 cut -d: -f3 /etc/passwd | grep "^$UGID$" > /dev/null
 RESULT5=`echo $?`
 while [ $RESULT5 -eq 0 ];do
    let UGID+=1
    cut -d: -f3 /etc/passwd | grep "^$UGID$" > /dev/null
    RESULT5=`echo $?`
 done
 
 
 echo "$TUSERNAME:x:$UGID:$UGID::/home/$TUSERNAME:/bin/bash" >> /etc/passwd
#這裏我採取了讓UIDGID相同的方法,也是默認用passwd的結果
 TDIR="/home/$TUSERNAME"
 mkdir "$TDIR" > /dev/null
 rsync /etc/skel/.* $TDIR > /dev/null
 #創建一個新用戶家目錄中的文件來源於/etc/skel/
 cut -d: -f3 /etc/passwd | grep "^$TGID$" > /dev/null
 RESULT7=`echo $?`
 if [ $RESULT7 -eq 1 ];then
    echo "$TUSERNAME:x:$UGID:" >> /etc/group
    TGROUPNAME=$TUSERNAME
 else
    TGROUPNAME=`cut -d: -f1,3 /etc/group | grep "^$TGID$" | cut -d: -f1 `
 fi
 
else 
 
 
#UID
 
 read -p "Input uid(between 500 and 65535): " TUID
    #輸入的UID必須在50065535之間,但必須不能存在
 cut -d: -f3 /etc/passwd | grep "^$TUID$" > /dev/null
 RESULT2=`echo $?`
    if [ $TUID -lt 500 ];then
        RESULT2=0
    fi
    if [ $TUID -gt 65535 ];then
        RESULT2=0
    fi
 
 while [ $RESULT2 -eq 0 ]
 do
    read -p "The uid is exist in the /etc/passwd(or notin 500~65535),please input another uid: " TUID
    cut -d: -f3 /etc/passwd | grep "^$TUID$" > /dev/null
    RESULT2=`echo $?`
    if [ $TUID -lt 500 ];then
      RESULT2=0
    fi
    if [ $TUID -gt 65535 ];then
      RESULT2=0
    fi
 done
 echo $TUID
 
#END OF UID
 
#create group
#用戶輸入的GID必須在500~65535之間,如果GID存在則告訴用戶組的名字,否則直接創建
 read -p "and the gid: " TGID
 
 while [ $TGID -lt 500 ] || [ $TGID -gt 65535 ]
 do
      read -p "Please input another gid(between 500 and 65535): " TGID
 done
 
 
 cut -d: -f3 /etc/passwd | grep "^$TGID$" > /dev/null
 RESULT3=`echo $?`
 if [ $RESULT3 -eq 1 ];then
    echo "$TGID is a new group ID! and groupname is : $TUSERNAME"
    echo "$TUSERNAME:x:$TGID:" >> /etc/group
    TGROUPNAME=$TUSERNAME
 else
    TGROUPNAME=`cut -d: -f1,3 /etc/group | grep "^$TGID$" | cut -d: -f1 `
    echo "$TGID is exist in group,and group name is $TGROUPNAME . "
 fi
 
 
#END OF GROUP
#輸入家目錄,存在的話告訴用戶,並確認是否重新創建,同時並同步默認的幾個文件
# the follow is the home of user's DIR
 
 read -p "Which dir you want to as a home dir: " TDIR
 if [ -e $TDIR ];then
    read -p "the $TDIT is exist,would like to make a new dir?(y/n) " RESULT4
    if [ $RESULT4 == 'Y' ] || [ $RESULT4 == 'y' ];then
      read -p "Input the new dir: " TDIR
      mkdir "$TDIR" >> /dev/null
    fi
 else
 mkdir "$TDIR"
 fi
rsync /etc/skel/.* $TDIR > /dev/null
#同步文件
#EDN OF CREATE DIR
 
#CREATE SHELL
 
 read -p "The shell?`cat /etc/shells` " TSHELL
 
#END OF SHELL
#用戶輸入的shell必須可用,這裏我沒有判斷,你可以添加幾行代碼,判斷輸入的shell是否可用
#creat user
 read -p "you can write any commentary: " $TCOM
 echo $TUSERNAME $TUID $TGID $TDIR $TSHELL $TPASSWD
 echo "$TUSERNAME:x:$TUID:$TGID:$TCOM:$TDIR:$TSHELL" >> /etc/passwd
#手動添加用戶的最重要的步驟!
 echo
# useradd -u "558" -g "503" -d "$TDIR" -s "$TSHELL" $TUSERNAME 
#
#end of creat user
fi
#更改用戶的屬主屬組
chown $TUSERNAME:$TGROUPNAME $TDIR
chmod 700 $TDIR
echo "add user successfuly! "
read -p "if you like to continue input y others to quit: " CONDITION
done
 
腳本源代碼在附件中,對應本腳的名字是useraddfial1,同時還有幾個很簡單的腳本供大家參考!謝謝支持!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章