为学生批量创建用户并初始化密码。

1. 创建组

这里有两个班级,创建两个组,便于日后管理。使用命令groupadd创建两个组,用选项-g指定组id。

sudo addgroup -gid 201112 class12
sudo addgroup -gid 201314 class34

新的组信息会添加到/etc/group/etc/gshadow文件中。

ubuntu@ubuntu ~:$ tail -2 /etc/group  
class12:x:201112:
class34:x:201314:

ubuntu@ubuntu ~:$ sudo tail -2 /etc/gshadow
class12:!::
class34:!::

2. 批量创建用户

2.1 准备批量用户的信息

(1)记录格式

使用命令newusers批量创建用户。先准备一个批量用户的文件,每一条记录按/etc/passwd密码文件填写(密码项为空,用x表示,也可以留空白):

# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash

# 各项含义如下
Username:Password:User ID:Group ID:User Info:Home Directory:Default Shell

(2)准备用户信息

Username用户名为学生的学号,因Linux用户名不能以数字开头,给学号加上前缀u。,User Info用户信息格式为班级-学号-姓名。准备好学生名单,写一个Python脚本,每个学生生成一条上述格式的记录,并保存在txt文件users-info.txt

打开/etc/passwd文件查看User ID使用情况,我在的例子中,用户ID最大值为1001。那么给学生创建用户,从2001开始。

$ tail -1 /etc/passwd
lighthouse:x:1001:1001::/home/lighthouse:/bin/bash

打开/etc/group文件查看刚才创建组的ID,

ubuntu@ubuntu ~:$ tail -2 /etc/group  
class12:x:201112:
class34:x:201314:

(3)准备用户密码

准备批量用户的初始密码文件,每一条记录的格式为

username:password

学生初始密码设为学号,写一个脚本,将批量用户的初始密码信息保存在users-passwd.txt

(4)将文件上传到服务器

如果批量用户信息和初始密码文件是在本地生成,需要上传到服务器,使用命令scp

$ scp users-info.txt ubuntu@os.suqiankun.com:~/
ubuntu@os.suqiankun.com's password:
users-info.txt                                100%   11KB 324.7KB/s   00:00

$ scp users-passwd.txt ubuntu@os.suqiankun.com:~/
ubuntu@os.suqiankun.com's password:
users-passwd.txt                              100% 3386    92.1KB/s   00:00

2.2 批量添加用户

(1)批量添加用户

SSH远程登录服务器,使用命令newusers批量创建用户名。

sudo newusers < users-info.txt

打开文件/etc/passwd检查用户名是否创建。

(2)批量设置初始密码

使用命令chpasswd批量设置用户的初始密码。

sudo chpasswd < users-passwd.txt

注:新版本Ubuntu不需要先关闭,设置密码,再关闭影子密码。直接运行命令chpasswd进行设置。

使用命令sudo pwunconv,关闭用户影子密码(shadow password)。其他相关命令如下:

  • The pwunconv command creates passwd from passwd and shadow and then removes shadow.
  • The pwconv command creates shadow from passwd and an optionally existing shadow.
  • The grpunconv command creates group from group and gshadow and then removes gshadow.
  • The grpconv command creates gshadow from group and an optionally existing gshadow.

运行命令sudo pwconv开启用户的影子密码。

(3)遇到问题及解决

批量创建好用户名和初始化密码后,拿一个用户名测试登录,一直提示密码错误。

$ ssh u201821121027@os.suqiankun.com
u201821121027@os.suqiankun.com's password:
Permission denied, please try again.

查看日志文件/var/log/auth.log,提示用户无效。

Failed password for invalid user u201821121027 from 43.138.137.190 port 42670 ssh2

打开/etc/passwd文件,发现新创建的用户末尾多了一个^M,如下:

lighthouse:x:1001:1001::/home/lighthouse:/bin/bash
u201821121027:x:2001:201112:*-201821121027-*:/home/u201821121027:/bin/bash^M

原因是users-info.txt是在Windows生成,Windows用CRLF,即\r\n,表示行结束。而在Unix,行结束符(end-of-line)是\n

解决方法:将passwd格式转适合Unix的格式,具体步骤如下

  • 用命令sudo vim /etc/passwd打开文件passwd
  • :e ++ff=dos,将passwd文件转为dos文件格式
  • :set ff=unix,将passwd文件转为unix文件格式

还有一种解决方法,在生成文件users-info.txtusers-passwd.txt时,就生成Unix格式,在open函数传入参数newline='\n'

with open(filename, 'w', newline='\n') as f:

3. 其他操作

学生可能会忘记密码,在课程进行过程中,可能需要添加新的学生。

(1)新增用户

上述给的是批量创建用户,如果只是添加一个,使用命令adduser,举例如下:

# 创建用户,指定组id
$ sudo adduser --gid 201314 wangfeng 
Adding user `wangfeng' ...
Adding new user `wangfeng' (1002) with group `class34' ...
Creating home directory `/home/wangfeng' ...
Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for wangfeng
Enter the new value, or press ENTER for the default
        Full Name []: 
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] Y

(2)删除用户和组

使用命令deluser删除用户,

$ sudo deluser wangfeng
Removing user `wangfeng' ...
Warning: group `wangfeng' has no more members.
Done.

(3)用户登录后修改密码

学生登录后,使用命令passwd修改密码:

$ passwd
Changing password for user suqiankun.
Changing password for suqiankun.
(current) UNIX password: 
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

学生如果忘记密码,用命令sudo passwd username重置密码。

$ sudo passwd lighthouse
New password: 
Retype new password:

(4)用户查看自己组信息

用命令id查看指定用户或者当前用户(如果没有指定用户)的用户和组信息。

$ id u201821121027
uid=2001(u201821121027) gid=201112(class12) groups=201112(class12)

ubuntu@VM-8-13-ubuntu:~$ id root
uid=0(root) gid=0(root) groups=0(root)

ubuntu@VM-8-13-ubuntu:~$ id ubuntu
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lxd)

(5)为用户添加sudo,root权限

为用户添加sudo权限,将用户添加到sudo组里,命令如下:

$ sudo usermod -aG sudo wangfeng
ubuntu@VM-8-13-ubuntu:/home$ id wangfeng
uid=1002(wangfeng) gid=201314(class34) groups=201314(class34),27(sudo)

$ usermod -aG wheel suqiankun     # In CentOS, Members of the wheel group are automatically granted sudo privileges.

注:下面这个是不是不需要???

为用户添加root权限,方法多种。这里使用命令usermod,举例如下:

$ usermod -G root suqiankun

$ id suqiankun
uid=19000(suqiankun) gid=191112(class12) groups=191112(class12),0(root)

更加精细的权限控制,直接修改文件/etc/sudoers中的内容。

(6)改变用户的组

使用命令usermod,举例如下:

$ usermod -g new_group user_name

# 举例如下:
$ id chenyao
uid=19006(chenyao) gid=191314(class34) groups=191314(class34)

$ usermod -g class12 chenyao

$ id chenyao
uid=19006(chenyao) gid=191112(class12) groups=191112(class12)
本文系Spark & Shine原创,转载需注明出处本文最近一次修改时间 2023-04-11 22:02

results matching ""

    No results matching ""