使用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