使用bash批量添加SFTP用户
2023/11/30 14:04 投稿

这个脚本的主要目的是通过读取位于/home/user_list.txt(第一列为用户名,第二列为密码)的用户列表文件,自动添加用户并对系统进行相关配置。其中包括追加SFTP配置规则到sshd_config文件,以及对用户主目录和子目录权限的精细调整。值得特别注意的是,脚本遵循SFTP对目录权限的规定,确保SFTP用户能够正常访问其主目录和子目录,同时禁止其他非管理员用户进行写入或执行操作。

在具体的权限设置上,用户主目录被限制为755,而用户的子目录($username-space)则被设置为770。这种配置确保了SFTP用户只能在自己的子目录下进行写入操作,从而提高了系统的安全性。

注:部分语法经过调整,以适应cgi-bin的web运行上的显示需求,但这些调整不会影响脚本的功能。

#!/bin/bash

USER_LIST="/home/user_list.txt"
SSHD_CONFIG="/etc/ssh/sshd_config"

function add_sftp_user() {
  echo "Content-type: text/plain"
    echo
    sudo dos2unix /home/user_list.txt
	while read -r line; do
        username=$(echo "$line" | awk '{print $1}')
        password=$(echo "$line" | awk '{print $2}')
        
        sudo mkdir -p "/home/$username/"
        sudo useradd -m -s /sbin/nologin "$username" -d "/home/$username/$username-space"
    # 尝试更改密码并捕获输出
    password_change_output=$(echo "$username:$password" | sudo -i /usr/sbin/chpasswd 2>&1)

    # 检查密码更改命令的输出
    if [ $? -eq 0 ]; then
      echo "Password change for $username successful."
    else
      echo "Error changing password for $username:"
      echo "$password_change_output"
    fi

    	sudo chown -R "$username":superman "/home/$username/$username-space"
    	sudo chmod 755 "/home/$username"
    	sudo chmod 770 "/home/$username/$username-space"
        echo -e "Match User $username\nChrootDirectory /home/$username\nForceCommand internal-sftp" >> "$SSHD_CONFIG"
        
sudo systemctl restart sshd
        echo "User $username added successfully."
    done < "$USER_LIST"
}

add_sftp_user