手动增长使用者 pwck

手动增长使用者

通常来讲,咱们不很建议你们使用手动的方式来新增使用者,为何呢? 由于使用者的创建涉及到 GID/UID 等权限的关系,并且,与档案/目录的权限也有关系, 使用 useradd 能够帮咱们自动设定好 UID/GID 家目录以及家目录相关的权限设定, 可是,手动来增长的时候,有可能会忘东忘西,结果致使一些困扰的发生。

不过,要瞭解整个系统,最好仍是手动来修改过比较好,至少咱们的账号问题能够彻底依照本身的意思去修订, 而没必要迁就于系统的预设值啊!可是,仍是要告诫一下朋友们,要手动设定账号时, 您必需要真的很瞭解本身在做什么,尤为是与权限有关的设定方面喔! 好吧!底下就让咱们来玩一玩啰~ ^_^

一些检查工具

既然要手动修改账号的相关设定档,那么一些检查群组、账号相关的指令就不可不知道啊~ 尤为是那个密码转换的 pwconv 及 pwuconv 这两个玩意~可重要的很呢! 底下咱们稍微介绍一下这些指令吧!

# pwck
pwck 这个指令在检查 /etc/passwd 这个账号设定档内的资讯,与实际的家目录是否存在等资讯, 还能够比对 /etc/passwd /etc/shadow 的资讯是否一致,另外, 若是 /etc/passwd 内的资料栏位错误时,会提示使用者修订。 通常来讲,我只是利用这个玩意儿来检查个人输入是否正确就是了。

[root@linux ~]# pwck
user adm: directory /var/adm does not exist
user news: directory /etc/news does not exist
user uucp: directory /var/spool/uucp does not exist

瞧!上面仅是告知我,这些账号并无家目录,因为那些账号绝大部分都是系统账号, 确实也不须要家目录的,因此,那是‘正常的错误!’呵呵!不理他。 ^_^。 相对应的群组检查可使用 grpck 这个指令的啦!

# pwconv
这个指令主要的目的是在‘将 /etc/passwd 内的账号与密码,移动到 /etc/shadow 当中!’ 早期的 Unix 系统当中并无 /etc/shadow 呢,因此,使用者的登入密码早期是在 /etc/passwd 的第二栏,后来为了系统安全,才将密码资料移动到 /etc/shadow 内的。 使用 pwconv 后,能够:

    * 比对 /etc/passwd 及 /etc/shadow ,若 /etc/passwd 内存在的账号并无对应的 /etc/shadow 密码时,则 pwconv 会去 /etc/login.defs 取用相关的密码资料,并创建该账号的 /etc/shadow 资料;
    * 若 /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 ’。 举例来讲,个人系统当中有个使用者账号为 dmtsai ,我想要更新他的密码 (update) , 假如他的密码是 abcdefg 的话,那么我能够这样作:

[root@linux ~]# echo "dmtsai:abcdefg" | chpasswd

神奇吧!这样就能够更新了呢!在预设的状况中, chpasswd 使用的是 DES 加密方法来加密, 咱们可使用 chpasswd -m 来使用 FC4 预设的 MD5 加密方法,不过, FC4 彷佛怪怪的,我总是没法使用 -m 来达成这个指令。不管如何, 仍是能够直接使用 chpasswd 来应用 DES 加密喔! 使用 DES 方法加密后,在 /etc/shadow 的密码栏内,他的密码位数为 13 位, 瞭乎??
小标题的图示特殊账号,如纯数字账号的创建
在咱们瞭解了 UID/GID 与账号的关系以后,基本上,您应该瞭解了,为啥咱们不建议使用纯数字的账号了! 由于不少时候,系统会搞不清楚那组数字是‘账号’仍是‘UID’,这不是很好啦~ 也所以,在早期某些版本底下,是没有办法使用数字来创建账号的。例如在 Red Hat 9 的环境中, 使用‘ useradd 1234 ’他会显示‘ useradd: invalid user name '1234' ’呼呼!瞭解了吗?! (不过,这个问题在 FC4 却不存在!由于 FC4 能够创建纯数字的账号说~)

不过,有的时候,长官的命令难为啊~有时仍是得要创建这方面的账号的,那该如何是好? 呵呵!固然能够手动来创建这样的账号啦!不过,为了系统安全起见,鸟哥仍是不建议使用纯数字的账号的啦! 所以,底下的范例当中,咱们使用手动的方式来创建一个名为 normaluser 的账号, 并且这个账号属于 normalgroup 这个群组。OK!那么整个步骤该如何是好呢? 由前面的说明来看,您应该瞭解了账号与群组是与 /etc/group, /etc/shadow, /etc/passwd, /etc/gshadow 有关,所以,整个动做是这样的:

   1. 先创建所须要的群组 ( vi /etc/group );
   2. 将 /etc/group 与 /etc/gshadow 同步化 ( grpconv );
   3. 创建账号的各个属性 ( vi /etc/passwd );
   4. 将 /etc/passwd 与 /etc/shadow 同步化 ( pwconv );
   5. 创建该账号的密码 ( passwd accountname );
   6. 创建使用者家目录 ( cp -a /etc/skel /home/accountname );
   7. 更改使用者家目录的属性 ( chown -R accountname.group /home/accountname )。

够简单的咯吧!让咱们来玩一玩啰~

1. 创建群组 normalgroup ,假设 520 这个 GID 没有被使用!而且同步化 gshadow
[root@linux ~]# vi /etc/group
# 在最后一行加入底下这一行!
normalgroup:x:520:
[root@linux ~]# grpconv
[root@linux ~]# grep 'normalgroup' /etc/group /etc/gshadow
/etc/group:normalgroup:x:520:
/etc/gshadow:normalgroup:x::
# 简单!搞定群组啰! ^_^

2. 创建 normaluser 这个账号,假设 UID 700 没被使用掉!
[root@linux ~]# vi /etc/passwd
# 在最后一行加入底下这一行!
normaluser:x:700:520::/home/normaluser:/bin/bash

3. 同步化密码,而且创建该使用者的密码
[root@linux ~]# pwconv
[root@linux ~]# grep 'normaluser' /etc/passwd /etc/shadow
/etc/passwd:normaluser:x:700:520::/home/normaluser:/bin/bash
/etc/shadow:normaluser:x:13030:0:99999:7:::
# 呵呵!没错没错!已经创建稳当啰~可是密码还不对~
[root@linux ~]# passwd normaluser
Changing password for user normaluser.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

4. 创建使用者家目录,而且修订权限!
[root@linux ~]# cp -a /etc/skel /home/normaluser
[root@linux ~]# chown -R normaluser:normalgroup /home/normaluser

别怀疑!这样就搞定了一个账号的设定了! 今后之后,你能够创建任何名称的账号啰~不过,仍是不建议您设定一些很怪很怪的账号名称啦!

小标题的图示不开放终端机登入的账号 (ex>mail acccount)
刚刚咱们上面创建的这个账号是‘能够登入系统的账号’,若是想要创建一个不能登入系统的账号, 例如单纯使用邮件收发信件而已的账号,那么又该如何设定呢?很简单啦~ 你能够这样想:

    * 由于不须要登入系统,因此建议 shell 栏位给予 /sbin/nologin ;
    * 由于不须要登入,因此家目录也能够先不创建。

也就是说,其实全部的步骤与刚刚上头提到的动做都同样,不过,少掉了不少与家目录有关的设定行为就是了。 底下我假设个人系统里面有个叫作 mail 的群组 (/etc/group) ,他的 GID 是 12 (以 FC4 为例), 另外,这个使用者的账号为 popuser ,假设 UID 为 720 ,那么该如何创建呢?

1. 修改账号属性
[root@linux ~]# vi /etc/passwd
popuser:x:720:12::/home/popuser:/sbin/nologin

2. 密码同步,而且给予密码!
[root@linux ~]# pwconv
[root@linux ~]# passwd popuser

这样就又 OK 了~哇!真是太简单了杰克~....

那么又该如何删除这些账号呢?啊!仍是建议利用 userdel 啦~简单~乾脆又俐落~ 若是想要暂时移除而已的话,那么利用 passwd -l 及 passwd -u 吧! ^_^。 若是真的那么想要手动来移除这个账号的话,就这样作:

   1. 先以 find / -user account 找出全部的账号档案,并将他删除;
   2. 将 /etc/passwd 与 /etc/shadow 的相关资料删除;
   3. 将 /etc/group 及 /etc/gshadow 相关资料删除;
   4. 将 /home 底下关于该账号的目录删除;
   5. 到 /var/spool/mail 以及 /var/spool/cron 里面将相关的使用者档案删除。

这样就手动删除啦~

一个大量建置账号的范例

不要怀疑,不少时候,咱们均可能须要大量的建置账号的, 举例来讲,学校要帮同窗创建他们的账号,那就极可能须要啦~ 通常来讲,创建账号要进行的前制工做不少,包括要创建账号名称与该账号的密码对应表~ 这个是最讨厌的啦~并且还要决定须要使用哪个群组~呼呼~好讨厌的感受那~

目前不少网站都有提供大量创建账号的工具,例如台南县网中心的卧龙大师:

      http://linux.tnc.edu.tw/techdoc/howto/howtouse_cmpwd.htm

提供的好用的 cmpwd 程式, 不过,其实咱们也能够利用简单的 script 来帮咱们达成喔!例如底下这支程式, 他的执行结果与卧龙大师提供的程式差很少啦~ 可是由于我是直接以 useradd 来新增的, 因此,即便不瞭解 UID ,也是能够适用的啦~

整支程式的特点是:

    * 预设不容许使用纯数字方式创建账号;
    * 可加入年级来区分账号;
    * 可设定账号的起始号码与账号数量;
    * 有两种密码创建方式,能够与账号相同或程式自行以乱数创建密码档。

执行方法也简单的要命~请自行参考的啦!再也不多说~ 使用时请注意,不要在公家使用的主机上面进行测试,由于..... 这支程式会大量创建账号嘛!^_^

#!/bin/bash
#
# 这支程式主要在帮您创建大量的账号之用,
# 更多的使用方法请参考:
# http://linux.vbird.org/linux_bas ... r.php#manual_amount
#
# 本程式为鸟哥自行开发,在 FC4 上使用没有问题,
# 但不保证毫不会发生错误!使用时,请自行负担风险~
#
# History:
# 2005/09/05    VBird   刚刚才写完,使用看看先~
PATH=/sbin:/usr/sbin:/bin:/usr/bin; export PATH
accountfile="user.passwd"

# 1. 进行账号相关的输入先!
read -p "账号开头代码 ( Input title name, ex> std )======> " username_start
read -p "账号层级或年级 ( Input degree, ex> 1 or enter )=> " username_degree
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
testing1=`echo $nu_amount | grep '[^0-9]' `
testing2=`echo $nu_start  | grep '[^0-9]' `
if [ "$testing1" != "" ] || [ "$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
        account=$username_start$username_degree$i
        if [ "$pwm" == "1" ]; then
                password="$account"
        else
                password=""
                test_nu=0
                until [ "$test_nu" == "8" ]
                do
                        temp_nu=$(($RANDOM*50/32767+30))
                        until [ "$temp_nu" != "60" ]
                        do
                                temp_nu=$(($RANDOM*50/32767+30))
                        done
                        test_nu=$(($test_nu+1))
                        temp_ch=`printf "\x$temp_nu"`
                        password=$password$temp_ch
                done
        fi
        echo "$account":"$password" | tee -a "$accountfile"
done

# 3. 开始创建账号与密码!
        cat "$accountfile" | cut -d':' -f1 | xargs -n 1 useradd -m
        chpasswd < "$accountfile"
        pwconv
    echo "OK!创建完成!"

这支程式能够在底下连结下载

      http://linux.vbird.org/download/index.php?action=download&amp;fileid=70