shell 管理samba用户

2017年2月16日 0 条评论 1.63k 次阅读 0 人点赞

管理思路:

将用户名以及随机生成的密码存在以用户组为名称的文本文件中,通过shell添加(系统用户添加、smb用户添加、文本文件添加)或者删除(同添加)用户,
经过实践发现不用本地文件存账号密码的话会简单很多,所以代码里面是第二个版本,

添加:

1、历遍所有文本文件,与smbpasswd(已添加用户名称)对比,添加未添加用户
2、提供选项,手动添加输入用户名,并选择当前已存在用户组添加
3、用户组添加

删除:

1、查询被删除用户所处用户组文件位置,删除,删除smb用户,删除系统用户
2、从指定被删除文件中读取(每行一个用户)按照1、的方式删除
3、用户组删除

查询:

1、查询用户是否存在,3个位置查询,并显示查询结果
2、用户组查询

密码重置:

1、将指定用户密码修改为新的随机字符串,并更新用户组文本文件中对应位置

用到的相关命令如下:

文本处理:

cat -n smbpasswd | awk -F ':' '{print $1}' | awk '{print $1 $2}'
#cat -n 显示行数,awk -F ':' 以':'为分隔符,显示第一个字段,以空格为分隔符显示第一、二个字段

文件内操作:

sed -i "2d" $file1
# 删除文件$file1 的第二行

系统命令:

# 一键添加系统用户及密码:
  useradd -g $group1 -M $user1 -s /sbin/nologin && echo "$passwd1" | passwd --stdin $user1
# 将$user1添加到$group1组,不创建用户文件夹,并且禁止shell登录 && 为$user1添加密码 $passwd1
  echo -e "$passwd1\n$passwd1" | smbpasswd -a -s $user1
# 添加密码为$passwd1的$user1为smb账号

随机密码:

  < /dev/urandom tr -dc a-z0-9 | head -c6; echo ""
# 生成a-z0-9的6位随机字符

shell如下:

经过实践发现不用本地文件存账号密码的话会简单很多

#!/bin/bash
#20170309 11:51 sevenfal.com
#是否开启发送邮件功能(1开启/0关闭)
mail_=1
#/etc/mail.rc最后添加如下内容
#set from=邮箱地址 smtp=smtp服务器地址
#set smtp-auth-user=邮箱账号 smtp-auth-password=邮箱密码 smtp-auth=login

rapass() {
#生成6位数的随机密码
< /dev/urandom tr -dc a-z0-9 | head -c6 } listgroup() { #列出手动添加的用户组 awk -F ':' '{if ($3>=500) {print $1}}' /etc/group
}

groupmem() {
#查询组中的所有成员
grep `grep -w $1 /etc/group |awk -F: '{print $3}'` /etc/passwd | awk -F: '{print $1}'
}

deluser() {
#删除用户
local val
for val in $1
do
smbpasswd -x $val
userdel $val
done
}

setgroupuser() {
    
	read -p "输入将要添加到的用户组:" group2
    usermod -G $group2 $1
}
resetuser() {
local pass=`rapass`
echo "$pass" | passwd --stdin $1
local error_level=$?
if [ $error_level == 1 ]
then
    echo "用户密码设置失败!"
    echo "error_res $1 $pass" >> /etc/samba/smbmanage.log
    echo "已记录密码设置失败账号,重新运行此脚本可恢复设置"
elif [ $error_level == 0 ]; then
    echo -e "${2}123\n${2}123" | smbpasswd -a -s $1
    if [ $mail_ == 1 ]; then echo "你的共享文件服务器账号为:$1,密码为$2,登录 http://192.168.253.11:2000/changepassword.cgi 修改密码后使用,点击查看使用说明 http://192.168.253.11:2000/fileserver/ " | mail -s "你的文件共享服务器账号密码如下" [email protected] ; fi
fi
}
adduser() {
#"$user" "$pass" "$group" "user"
case "$4" in
    "user")
        useradd -g $3 -M -s /sbin/nologin $1
        echo "$2" | passwd --stdin $1
        if [ $? == 1 ]; 
        then
            echo "用户密码设置失败!"
            echo "error_add $1 $2 $3" >> /etc/samba/smbmanage.log
            echo "已记录密码设置失败账号,重新运行此脚本可恢复设置"
            more /etc/samba/smbmanage.log
        elif [ $? == 0 ]; then
            echo -e "${2}123\n${2}123" | smbpasswd -a -s $1
            if [ $mail_ == 1 ]; then echo "你的共享文件服务器账号为:$1,密码为$2,登录 http://192.168.253.11:2000/changepassword.cgi 修改密码后使用,点击查看使用说明 http://192.168.253.11:2000/fileserver/ " | mail -s "你的文件共享服务器账号密码如下" [email protected] ; fi
        fi
    ;;
    "group")
    
    ;;
    *)
    
    ;;
esac
}
menu_main()
{
local user
	clear
menu_main=`cat << EOF Samba 用户管理 v1.0 ******************************* 主菜单 1.添加用户 2.删除用户 3.查找用户 4.重设用户密码 5.修改用户所属组 ******************************* EOF ` echo "$menu_main" read -p "(1/2/3/4/5):" m_cho case "$m_cho" in "1") menu_add ;; "2") read -p "输入需要删除的用户名:" deluser2 deluser $deluser2 ;; "3") read -p "输入需要查找的用户名:" finduser2 groups finduser2 ;; "4") read -p "输入需要重设密码的用户名:" resetuser2 resetuser $resetuser2 ;; "5") read -p "输入需要修改组的用户名:" setgroupuser2 setgroupuser $setgroupuser2 ;; *) echo "输入错误!" menu_main ;; esac } menu_add() { local user local pass local group local val clear listgroup | cat -n read -p "输入将要添加到的用户组数字:" group echo "选择了:"`listgroup | cat -n | grep -w $group | awk -F ' ' '{print $2}'` group=`listgroup | cat -n | grep -w $group | awk -F ' ' '{print $2}'` read -p "输入需添加用户名,同组多个用空格分开:" user for val in $user; do pass=`rapass` adduser "$user" "$pass" "$group" "user" done } menu_main

Sevenfal

这个人太懒什么东西都没留下

文章评论(0)