鸟哥的Linux私房菜
  • 目录及概述
  • 第零章 计算机概论
    • 0.1 电脑-辅助人脑的好工具
    • 0.2 个人电脑架构与相关设备元件
    • 0.3 数据表示方式
    • 0.4 软件程序运行
    • 0.5 重点回顾
    • 0.6 本章习题
    • 0.7 参考资料与延伸阅读
  • 第一章 Linux是什么与如何学习
    • 1.1 Linux是什么
    • 1.2 Torvalds的Linux发展
    • 1.3 Linux当前应用的角色
    • 1.4 Linux该如何学习
    • 1.5 重点回顾
    • 1.6 本章习题
    • 1.7 参考资料与延伸阅读
  • 第二章 主机规划与磁盘分区
    • 2.1 Linux与硬件的搭配
    • 2.2 磁盘分区
    • 2.3 安装Linux前的规划
    • 2.4 重点回顾
    • 2.5 本章习题
    • 2.6 参考资料与延伸阅读
  • 第三章 安装CentOS7.X
    • 3.1 本练习机的规划-尤其是分区参数
    • 3.2 开始安装CentOS_7
    • 3.3 多重开机安装流程与管理
    • 3.4 重点回顾
    • 3.5 本章习题
    • 3.6 参考资料与延伸阅读
  • 第四章 首次登陆与线上求助
    • 4.1 首次登录系统
    • 4.2 文字模式下指令的下达
    • 4.3 Linux系统的线上求助man_page与info_page
    • 4.4 超简单文字编辑器-nano
    • 4.5 正确的关机方法
    • 4.6 重点回顾
    • 4.7 本章习题
    • 4.8 参考资料与延伸阅读
  • 第五章 Linux的文件权限与目录配置
    • 5.1 使用者与群组
    • 5.2 Linux文件权限概念
    • 5.3 Linux目录配置
    • 5.4 重点回顾
    • 5.5 本章习题
    • 5.6 参考资料与延伸阅读
  • 第六章 Linux文件与目录管理
    • 6.1 目录与路径
    • 6.2 文件与目录管理
    • 6.3 文件内容查阅
    • 6.4 文件与目录的默认权限与隐藏权限
    • 6.5 指令与文件的搜寻
    • 6.6 极重要的复习-权限与指令间的关系
    • 6.7 重点回顾
    • 6.8 本章习题
    • 6.9 参考资料与延伸阅读
  • 第七章 Linux磁盘与文件系统管理
    • 7.1 认识Linux文件系统
    • 7.2 文件系统的简单操作
    • 7.3 磁盘的分区-格式化-检验与挂载
    • 7.4 设置开机挂载
    • 7.5 内存交换空间swap创建
    • 7.6 文件系统的特殊观察与操作
    • 7.7 重点回顾
    • 7.8 本章习题
    • 7.9 参考资料与延伸阅读
  • 第八章 文件的压缩与打包
    • 8.1 压缩文件的用途与技术
    • 8.2 Linux系统常见的压缩指令
    • 8.3 打包指令-tar
    • 8.4 XFS文件系统的备份与还原
    • 8.5 光盘写入工具
    • 8.6 其他常见的压缩与备份工具
    • 8.7 重点回顾
    • 8.8 本章习题
    • 8.9 参考资料与延伸阅读
  • 第九章 vim程序编辑器
    • 9.1 vi与vim
    • 9.2 vi的使用
    • 9.3 vim的额外功能
    • 9.4 其他vim使用注意事项
    • 9.5 重点回顾
    • 9.6 本章习题
    • 9.7 参考资料与延伸阅读
  • 第十章 认识与学习BASH
    • 10.1 认识bash这个shell
    • 10.2 shell的变量功能
    • 10.3 命令别名与历史命令
    • 10.4 BashShell的操作环境
    • 10.5 数据流重导向
    • 10.6 管线命令-pipe
    • 10.7 重点回顾
    • 10.8 本章习题
    • 10.9 参考资料与延伸阅读
  • 第十一章 正则表达式与文件格式化处理
    • 11.1 开始之前-什么是正则表达式
    • 11.2 基础正则表达式
    • 11.3 延伸正则表达式
    • 11.4 文件的格式化与相关处理
    • 11.5 重点回顾
    • 11.6 本章习题
    • 11.7 参考资料与延伸阅读
  • 第十二章 学习shell scripts
    • 12.1 什么是ShellScripts
    • 12.2 简单的ShellScript练习
    • 12.3 善用判断式
    • 12.4 条件判断式
    • 12.5 循环loop
    • 12.6 ShellScript的追踪与debug
    • 12.7 重点回顾
    • 12.8 本章习题
  • 第十三章 Linux帐号管理与ACL权限控制
    • 13.1 Linux的账户与群组
    • 13.2 账号管理
    • 13.3 主机的细部权限规划-ACL的使用
    • 13.4 使用者身份切换
    • 13.5 使用者的特殊shell和PAM模块
    • 13.6 Linux主机上的使用者讯息传递
    • 13.7 CentOS7环境下大量创建账号的方法
    • 13.8 重点回顾
    • 13.9 本章习题
    • 13.10 参考资料与延伸阅读
  • 第十四章 磁盘配额(Quota)与进阶文件系统管理
    • 14.1 磁盘配额Quota的应用与实作
    • 14.2 软件磁盘阵列SoftwareRAID
    • 14.3 逻辑卷轴管理员LogicalVolumeManager
    • 14.4 重点回顾
    • 14.5 本章习题
    • 14.6 参考资料与延伸阅读
  • 第十五章 例行性工作调度(crontab)
    • 15.1 什么是例行性工作调度
    • 15.2 仅执行一次的工作调度
    • 15.3 循环执行的例行性工作调度
    • 15.4 可唤醒停机期间的工作任务
    • 15.5 重点回顾
    • 15.6 本章习题
  • 第十六章 程序管理与SELinux初探
    • 16.1 什么是程序process
    • 16.2 工作管理JobControl
    • 16.3 程序管理
    • 16.4 特殊文件与程序
    • 16.5 SELinux初探
    • 16.6 重点回顾
    • 16.7 本章习题
    • 16.8 参考资料与延伸阅读
  • 第十七章 认识系统服务(daemon)
    • 17.1 什么是daemon与服务service
    • 17.2 通过systemctl管理服务
    • 17.3 systemctl针对service类型的配置文件
    • 17.4 systemctl针对timer的配置文件
    • 17.5 CentOS7.x默认启动的服务简易说明
    • 17.6 重点回顾
    • 17.7 本章习题
    • 17.8 参考资料与延伸阅读
  • 第十八章 认识与分析登录文件
    • 18.1 什么是登录文件
    • 18.2 rsyslog.service-记录登录文件的服务
    • 18.3 登录文件的轮替logrotate
    • 18.4 systemd-journald.service简介
    • 18.5 分析登录文件
    • 18.6 重点回顾
    • 18.7 本章习题
    • 18.8 参考资料与延伸阅读
  • 第十九章 开机流程、模块管理与Loader
    • 19.1 Linux的开机流程分析
    • 19.2 核心与核心模块
    • 19.3 BootLoader-Grub2
    • 19.4 开机过程的问题解决
    • 19.5 重点回顾
    • 19.6 本章习题
    • 19.7 参考资料与延伸阅读
  • 第二十章 网络设置与备份策略
    • 20.1 系统基本设置
    • 20.2 服务器硬件数据的收集
    • 20.3 备份要点
    • 20.4 备份的种类和频率与工具的选择
    • 20.5 鸟哥的备份策略
    • 20.6 灾难复原的考虑
    • 20.7 重点回顾
    • 20.8 本章习题
    • 20.9 参考资料与延伸阅读
  • 第二十一章 软件安装:源代码与Tarball
    • 21.1 开源代码的软件安装与升级简介
    • 21.2 使用传统程序语言进行编译的简单范例
    • 21.3 用make进行宏编译
    • 21.4 Tarball的管理与建议
    • 21.5 函数库管理
    • 21.6 检验软件正确性
    • 21.7 重点回顾
    • 21.8 本章习题
    • 21.9 参考资料与延伸阅读
  • 第二十二章 软件安装:RPM,SRPM与YUM功能
    • 22.1 软件管理员简介
    • 22.2 RPM软件管理程序-rpm
    • 22.3 YUM线上升级机制
    • 22.4 SRPM的使用-rpmbuild
    • 22.5 重点回顾
    • 22.6 本章习题
    • 22.7 参考资料与延伸阅读
  • 第二十三章 X Window设置介绍
    • 23.1 什么是XWindowSystem
    • 23.2 XServer配置文件解析与设置
    • 23.3 显卡驱动程序安装范例
    • 23.4 重点回顾
    • 23.5 本章习题
    • 23.6 参考资料与延伸阅读
  • 第二十四章 核心编译
    • 24.1 编译前的任务-认识核心与取得核心源代码
    • 24.2 核心编译的前处理与核心功能选择
    • 24.3 核心的编译与安装
    • 24.4 额外-单一核心模块编译
    • 24.5 以最新核心版本编译CentOS7.x的核心
    • 24.6 重点回顾
    • 24.7 本章习题
    • 24.8 参考资料与延伸阅读
Powered by GitBook
On this page
  • 13.7.1 一些帐号相关的检查工具
  • 13.7.2 大量创建帐号范本(适用 passwd --stdin 选项)
  1. 第十三章 Linux帐号管理与ACL权限控制

13.7 CentOS7环境下大量创建账号的方法

系统上面如果有一堆帐号存在,你怎么判断某些帐号是否存在一些问题?这时需要哪些软件的协助处理比较好? 另外,如果你跟鸟哥一样,在开学之初或期末之后,经常有需要大量创建帐号、删除帐号的需求时,那么是否要使用 useradd 一行一行指令去创建? 此外,如果还有需要使用到下一章会介绍到的 quota (磁盘配额) 时,那是否还要额外使用其他机制来创建这些限制值?既然已经学过 shell script 了, 当然写支脚本让它将所有的动作做完最轻松吧!所以啰,下面我们就来聊一聊,如何检查帐号以及创建这个脚本要怎么进行比较好?

13.7.1 一些帐号相关的检查工具

先来检查看看使用者的主文件夹、密码等数据有没有问题?这时会使用到的主要有 pwck 以及 pwconv / pwuconv 等,让我们来了解一下先!

  • pwck

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

[root@study ~]# pwck
user 'ftp': directory '/var/ftp' does not exist
user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist
user 'pulse': directory '/var/run/pulse' does not exist
pwck: no changes

瞧!上面仅是告知我,这些帐号并没有主文件夹,由于那些帐号绝大部分都是系统帐号,确实也不需要主文件夹的,所以,那是“正常的错误!”呵呵!不理他。 ^_^。 相对应的群组检查可以使用 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 ”。 举例来说,我的系统当中有个使用者帐号为 vbird3 ,我想要更新他的密码 (update) , 假如他的密码是 abcdefg 的话,那么我可以这样做:

[root@study ~]# echo "vbird3:abcdefg" | chpasswd

神奇吧!这样就可以更新了呢!在默认的情况中, chpasswd 会去读取 /etc/login.defs 文件内的加密机制,我们 CentOS 7.x 用的是 SHA512, 因此 chpasswd 就默认会使用 SHA512 来加密!如果你想要使用不同的加密机制,那就得要使用 -c 以及 -e 等方式来处理了! 不过从 CentOS 5.x 开始之后,passwd 已经默认加入了 --stdin 的选项,因此这个 chpasswd 就变得英雄无用武之地了! 不过,在其他非 Red Hat 衍生的 Linux 版本中,或许还是可以参考这个指令功能来大量创建帐号喔!

13.7.2 大量创建帐号范本(适用 passwd --stdin 选项)

由于 CentOS 7.x 的 passwd 已经提供了 --stdin 的功能,因此如果我们可以提供帐号密码的话, 那么就能够很简单的创建起我们的帐号密码了。下面鸟哥制作一个简单的 script 来执行新增用户的功能喔!

[root@study ~]# vim accountadd.sh
#!/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:
# 0410accountmanager.html#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

接下来只要创建 accountadd.txt 这个文件即可!鸟哥创建这个文件里面共有 5 行,你可以自行创建该文件!内容每一行一个帐号。 而是否需要修改密码?是否与帐号相同的信息等等,你可以自由选择!若使用 openssl 自动猜密码时,使用者的密码请由 outputpw.txt 去捞~鸟哥最常作的方法,就是将该文件打印出来,用裁纸机一个帐号一条,交给同学即可!

[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.
....(后面省略)....

这支简单的脚本你可以在按如下的链接下载:

Previous13.6 Linux主机上的使用者讯息传递Next13.8 重点回顾

Last updated 2 years ago

http://linux.vbird.org/linux_basic/0410accountmanager/accountadd.sh