手动创建用户的过程分析
手动添加pig(5005),基本组hive(5005)
1.添加/etc/passwd
2.修改/etc/group
3.修改/etc/shadow
4.复制/etc/skel为/home/pig
5.修改/home/pig属主属组为pig
6.修改/home/pig属组和其它用户为无权限
通过shell程序实现创建用户
#!/bin/bash
#创建pig用户UID(5005),GID(5005)
USERNAME='pig'
PASSFILE='/etc/passwd'
GRPFILE='/etc/group'
SHADOWFILE='/etc/shadow'
# 生成用户密码,密码为123456
USERPASS=`echo '123456' | openssl passwd -1 -salt '12345678' -stdin`
#将用户基本信息分别写入/etc/passwd,group,shadow
echo "$USERNAME:x:5005:5005::/home/$USERNAME:/bin/bash" >> $PASSFILE
echo "$USERNAME:x:5005:" >> $GRPFILE
echo "$USERNAME:$USERPASS:18631:0:99999:7:::" >> $SHADOWFILE
#拷贝/etc/skel目录,生成用户家目录
cp -r /etc/skel /home/$USERNAME
#修改用户家目录的权限,属主,属组
#修改属组和其他人没有权限为了不让其他人随便进入用户家目录
chmod -R go= /home/$USERNAME
chown -R $USERNAME:$USERNAME /home/$USERNAME
echo 'USER:$USERNAME create successfully'
基于python实现linux系统创建用户并设定一个随机密码
# ----------------------------------------randpass生成随机密码文件-----------------------------
import random
from string import ascii_letters, digits
def rand_string(num=8):
"""
:param num:随机生成密码的长度
:return: 返回生成的随机密码
"""
# ascii_letters26个大小写字母,digits0-9数字集合
all_str = ascii_letters + digits
rand_all = ""
for i in range(num):
rand_str = random.choice(all_str)
rand_all += rand_str
return rand_all
# ----------------------------------------randpass生成随机密码文件-----------------------------
# ----------------------------------------创建用户并生成密码-----------------------------------
from randpass import rand_string
import subprocess
def createUser(user):
"""
:param user:传入要创建的用户名
:return: 返回创建成功后的用户名和密码,创建失败,密码返回0
"""
# 判断用户是否已经存在
flag = subprocess.run(f"id {user} &>/dev/null",shell=True)
if flag != 0:
subprocess.run(f"useradd {user} ", shell=True)
# 生成8位随机密码
pass_str = rand_string(8)
# 为创建的用户设定随机密码
subprocess.run(f"echo {pass_str} | passwd --stdin {user} &>/dev/null", shell=True)
return user, pass_str
else:
return user,0
def write_file(path, user, pass_str):
"""
:param user: 用户名
:param pass_str: 密码
:return: 返回文件是否写入成功
将用户名和密码写入到指定文件中
"""
flag = 0
with open(path, mode="a") as fr:
fr.write(f"{user},{pass_str}")
flag = 1
return flag
while True:
user = input("请输入要创建的用户[输入0退出]:")
if user == '0':
break
username, password = createUser(user)
# 如果用户不存在则写入用户文件
if password !=0:
path = "/tmp/ps.txt"
flag = write_file(path,username, password)
if flag==1:
print("用户创建成功")
# ----------------------------------------创建用户并生成密码-----------------------------------