Linux学习-shell和python双脚本创建Linux用户

手动创建用户的过程分析

手动添加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("用户创建成功")

# ----------------------------------------创建用户并生成密码-----------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值