鸟哥的linux私房菜学习笔记《三十》手动新增用户

  1. 检查工具:pwck, pwconv, pwunconv, chpasswd
    pwck 这个指令在检查 /etc/passwd 这个帐号配置文件内的信息,与实际的主文件夹是否存在等信息, 还可以比对 /etc/passwd /etc/shadow 的信息是否一致,另外,如果 /etc/passwd 内的数据字段错误时,会提示使用者修订。 一般来说,我只是利用这个玩意儿来检查我的输入是否正确就是了。

    [root@CentOS ~]# pwck
    user 'adm': directory '/var/adm' does not exist
    user 'uucp': directory '/var/spool/uucp' does not exist
    user 'gopher': directory '/var/gopher' does not exist
    user 'oprofile': directory '/home/oprofile' does not exist
    user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist
    user 'saslauth': directory '/var/empty/saslauth' does not exist
    user 'pulse': directory '/var/run/pulse' does not exist
    pwck: no changes
    

    pwconv这个指令主要的目的是在“将 /etc/passwd 内的帐号与密码,移动到 /etc/shadow 当中!” 早期的 Unix 系统当中并没有 /etc/shadow 呢,所以,使用者的登陆密码早期是在 /etc/passwd 的第二栏,后来为了系统安全,才将密码数据移动到 /etc/shadow 内的。使用 pwconv 后,可
    以:
    (1)比对 /etc/passwd 及 /etc/shadow ,若 /etc/passwd 内存在的帐号并没有对应的/etc/shadow 密码时,则 pwconv 会去 /etc/login.defs 取用相关的密码数据,并创建该帐号的 /etc/shadow 数据;
    (2)若 /etc/passwd 内存在加密后的密码数据时,则 pwconv 会将该密码栏移动到/etc/shadow 内,并将原本的 /etc/passwd 内相对应的密码栏变成 x !
    一般来说,如果您正常使用 useradd 增加使用者时,使用 pwconv 并不会有任何的动作,因为 /etc/passwd 与 /etc/shadow 并不会有上述两点问题!不过,如果手动设置帐号,这个 pwconv 就很重要啰
    pwunconv
    相对于 pwconv , pwunconv 则是“将 /etc/shadow 内的密码栏数据写回 /etc/passwd 当中,并且删除 /etc/shadow 文件。”这个指令说实在的,最好不要使用啦! 因为他会将你的/etc/shadow 删除喔!如果你忘记备份,又不会使用 pwconv 的话,后果会很严重
    chpasswd
    chpasswd 是个挺有趣的指令,他可以“读入未加密前的密码,并且经过加密后, 将加密后的密码写入 /etc/shadow 当中。”这个指令很常被使用在大量创建帐号的情况中喔! 他可以由Standard input 读入数据,每笔数据的格式是“ username:password ”。 举例来说,我的系统当中有个使用者帐号为 vbird3 ,我想要更新他的密码 (update) , 假如他的密码是abcdefg 的话,那么我可以这样做:

    [root@CentOS ~]# echo "kevin:zbcdefg" | chpasswd -m
    
    # 使用MD5加密
    
    
    # 再将密码改回原来的
    
    [root@CentOS ~]# passwd kevin
    Changing password for user kevin.
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    
  2. 特殊账号的手工新建
    脚本下载地址链接

    
    #!/bin/bash
    
    
    # This shell script will create amount of linux login accounts for you.
    
    
    # 1. check the "accountadd.txt" file exist? you must create that file manually.
    
    
    #    one account name one line in the "accountadd.txt" file.
    
    
    # 2. use openssl to create users password.
    
    
    # 3. User must change his password in his first login.
    
    
    # 4. more options check the following url:
    
    
    # http://linux.vbird.org/linux_basic/0410accountmanager.php#manual_amount
    
    
    # 2015/07/22    VBird
    
    export PATH=/bin:/sbin:/usr/bin:/usr/sbin
    
    
    # 0. userinput
    
    usergroup=""                   # if your account need secondary group, add here.
    pwmech="openssl"               # "openssl" or "account" is needed.
    homeperm="no"                  # if "yes" then I will modify home dir permission to 711
    
    
    # 1. check the accountadd.txt file
    
    action="${1}"                  # "create" is useradd and "delete" is userdel.
    if [ ! -f accountadd.txt ]; then
        echo "There is no accountadd.txt file, stop here."
            exit 1
    fi
    
    [ "${usergroup}" != "" ] && groupadd -r ${usergroup}
    rm -f outputpw.txt
    usernames=$(cat accountadd.txt)
    
    for username in ${usernames}
    do
        case ${action} in
            "create")
                [ "${usergroup}" != "" ] && usegrp=" -G ${usergroup} " || usegrp=""
                useradd ${usegrp} ${username}               # 新增帳號
                [ "${pwmech}" == "openssl" ] && usepw=$(openssl rand -base64 6) || usepw=${username}
                echo ${usepw} | passwd --stdin ${username}  # 建立密碼
                chage -d 0 ${username}                      # 強制登入修改密碼
                [ "${homeperm}" == "yes" ] && chmod 711 /home/${username}
            echo "username=${username}, password=${usepw}" >> outputpw.txt
                ;;
            "delete")
                echo "deleting ${username}"
                userdel -r ${username}
                ;;
            *)
                echo "Usage: $0 [create|delete]"
                ;;
        esac
    done
    

    脚本输入文件:

    [root@study ~]# vim accountadd.txt
    std01
    std02
    std03
    std04
    std05
    [root@study ~]# sh accountadd.sh create
    Changing password for user std01.
    passwd: all authentication tokens updated successfully.
  3. 批量新建账号的范例(适用于数字学号)
    脚本下载地址链接

    
    #!/bin/bash
    
    #
    
    # 這支程式主要在幫您建立大量的帳號之用,更多的使用方法請參考:
    
    
    # http://linux.vbird.org/linux_basic/0410accountmanager.php#manual_amount
    
    #
    
    # 本程式為鳥哥自行開發,在 CentOS 5.x 上使用沒有問題,
    
    
    # 但不保證絕不會發生錯誤!使用時,請自行負擔風險~
    
    #
    
    # History:
    
    
    # 2005/09/05    VBird   剛剛才寫完,使用看看先~
    
    
    # 2009/03/04    VBird   加入一些語系的修改與說明,修改密碼產生方式 (用 openssl)
    
    export LANG=zh_TW.big5
    export PATH=/sbin:/usr/sbin:/bin:/usr/bin
    accountfile="user.passwd"
    
    
    # 1. 進行帳號相關的輸入先!
    
    echo ""
    echo "例如我們崑山四技的學號為: 4960c001 到 4960c060 ,那麼:"
    echo "帳號開頭代碼為         :4"
    echo "帳號層級或年級為       :960c"
    echo "號碼數字位數為(001~060):3"
    echo "帳號開始號碼為         :1"
    echo "帳號數量為             :60"
    echo ""
    read -p "帳號開頭代碼 ( Input title name, ex> std )======> " username_start
    read -p "帳號層級或年級 ( Input degree, ex> 1 or enter )=> " username_degree
    read -p "號碼部分的數字位數 ( Input \# of digital )======> " nu_nu
    read -p "起始號碼 ( Input start number, ex> 520 )========> " nu_start
    read -p "帳號數量 ( Input amount of users, ex> 100 )=====> " nu_amount
    read -p "密碼標準 1) 與帳號相同 2)亂數自訂 ==============> " pwm
    if [ "$username_start" == "" ]; then
            echo "沒有輸入開頭的代碼,不給你執行哩!" ; exit 1
    fi
    
    # 判断数字系统
    
    testing0=$(echo $nu_nu     | grep '[^0-9]' )
    testing1=$(echo $nu_amount | grep '[^0-9]' )
    testing2=$(echo $nu_start  | grep '[^0-9]' )
    if [ "$testing0" != "" -o "$testing1" != "" -o "$testing2" != "" ]; then
            echo "輸入的號碼不對啦!有非為數字的內容!" ; exit 1
    fi
    if [ "$pwm" != "1" ]; then
            pwm="2"
    fi
    
    
    # 2. 开始输入账号与面文件!
    
    [ -f "$accountfile" ] && mv $accountfile "$accountfile"$(date +%Y%m%d)
    nu_end=$(($nu_start+$nu_amount-1))
    for (( i=$nu_start; i<=$nu_end; i++ ))
    do
        nu_len=${#i}
        if [ $nu_nu -lt $nu_len ]; then
            echo "数值的位数($i->$nu_len)已經比你設定的位數($nu_nu)還大!"
            echo "程序无法继续"
            exit 1
        fi
        nu_diff=$(( $nu_nu - $nu_len ))
        if [ "$nu_diff" != "0" ]; then
            nu_nn=0000000000
            nu_nn=${nu_nn:1:$nu_diff}
        fi
            account=${username_start}${username_degree}${nu_nn}${i}
            if [ "$pwm" == "1" ]; then
                    password="$account"
            else
                    password=$(openssl rand -base64 6)
            fi
            echo "$account":"$password" | tee -a "$accountfile"
    done
    
    
    # 3. 开始建立账号与密码!
    
    echo "账号面建立中,请稍等!"
    cat "$accountfile" | cut -d':' -f1 | xargs -n 1 useradd -m
    chpasswd < "$accountfile"
    pwconv
    echo "OK!建立完成!"
    

    将上述建立的账号删除

    
    #!bin/bash
    
    username=$( cat user.passwd | cut -d ':' -f 1 )
    for username in $usernames
    do
        echo "userdel -r $username"
        userdel -r $username
    done
    
  4. 情景模拟
    情境仿真题一:想将本服务器的帐号分开管理,分为单纯邮件使用,与可登陆系统帐号两种。其中若为纯邮件帐号时, 将该帐号加入 mail 为初始群组,且此帐号不可使用bash 等 shell 登陆系统。若为可登陆帐号时, 将该帐号加入 youcan 这个次要群组。
    目标:了解 /sbin/nologin 的用途;
    前提:可自行观察使用者是否已经创建等问题;
    需求:需已了解 useradd, groupadd 等指令的用法; 解决方案如下:
    预先察看一下两个群组是否存在?

    [root@study ~]# grep mail /etc/group
    [root@study ~]# grep youcan /etc/group
    [root@study ~]# groupadd youcan

    可发现 youcan 尚未被创建,因此如上表所示,我们主动去创建这个群组啰。开始创建三个邮件帐号,此帐号名称为 pop1, pop2, pop3 ,且密码与帐号相同。可使用如下的程序来处理:

    [root@study ~]# vim popuser.sh
    
    #!/bin/bash
    
    for username in pop1 pop2 pop3
    do
    useradd -g mail -s /sbin/nologin -M $username
    echo $username &#124; passwd --stdin $username
    done
    [root@study ~]# sh popuser.sh

    开始创建一般帐号,只是这些一般帐号必须要能够登陆,并且需要使用次要群组的支持!所以:

    [root@study ~]# vim loginuser.sh
    
    #!/bin/bash
    
    for username in youlog1 youlog2 youlog3
    do
    useradd -G youcan -s /bin/bash -m $username
    echo $username &#124; passwd --stdin $username
    done
    [root@study ~]# sh loginuser.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值