推荐使用Ubuntu和Debian系统
执行安装脚本自动安装指定版本Nessus
安装前可使用以下命令清除旧版本
sudo systemctl stop nessusd.service
sudo rm -rf /opt/nessus1、下载程序,并为脚本修改可执行权限
2、访问网站https://www.tenable.com/downloads/nessus 下载最新版本,并将程序放在nessus目录下(也可修改安装脚本中的地址为最新版本URL)

3、执行nessus_auto_install.sh进行安装
4、部署完后等待2分钟,访问https://localhost:8834/ 即可使用Nessus
安装脚本
#!/bin/bash
# 检查脚本是否以root权限运行
if [[ $(id -u) -ne 0 ]] ; then echo "请以root权限运行此脚本" ; exit 1 ; fi
echo //==============================================================
echo Nessus 自动下载与安装脚本
echo //==============================================================
echo " o [额外步骤] 移除所有 chattr 属性 "
chattr -i -R /opt/nessus
echo " o 确保已安装所需依赖..."
apt update &>/dev/null
apt -y install curl dpkg expect &>/dev/null
echo " o 如果旧的 nessusd 服务正在运行,则停止它!"
/bin/systemctl stop nessusd.service &>/dev/null
echo " o 正在下载 Nessus..."
# 使用 curl 下载 Nessus 安装包,前往https://www.tenable.com/downloads/nessus?loginAttempted=true 获取最新链接
curl -A Mozilla --request GET \
--url 'https://www.tenable.com/downloads/api/v2/pages/nessus/files/Nessus-10.10.1-ubuntu1604_amd64.deb' \
--output 'Nessus-latest-ubuntu1404_amd64.deb' &>/dev/null
{ if [ ! -f Nessus-latest-ubuntu1404_amd64.deb ]; then
# 如果下载失败则退出
echo " o Nessus 下载失败 :/ 脚本正在退出。"
exit 0
fi }
echo " o 正在安装 Nessus..."
dpkg -i Nessus-latest-ubuntu1404_amd64.deb &>/dev/null
# 我试过只修改配置然后运行,但没有成功。如果你能优化
# 我这里的操作,请告诉我。但对我来说,这是必须运行一次的初始化步骤 :/
echo " o 首次初始化,需要先启动一次服务 (这是必须的步骤)"
/bin/systemctl start nessusd.service &>/dev/null
echo " o 等待 Nessus 初始化 - 我们给它大约20秒钟..."
sleep 20
echo " o 正在停止 Nessus 服务..."
/bin/systemctl stop nessusd.service &>/dev/null
echo " o 更改 Nessus 设置为 Zen 偏好 (自由模式)"
echo " 监听端口 (listen port): 8834"
/opt/nessus/sbin/nessuscli fix --set xmlrpc_listen_port=8834 &>/dev/null
echo " 主题 (theme): dark (暗黑模式)"
/opt/nessus/sbin/nessuscli fix --set ui_theme=dark &>/dev/null
echo " 安全检查 (safe checks): off (关闭)"
/opt/nessus/sbin/nessuscli fix --set safe_checks=false &>/dev/null
echo " 日志级别 (logs): performance (性能)"
/opt/nessus/sbin/nessuscli fix --set backend_log_level=performance &>/dev/null
echo " 自动更新 (updates): off (关闭)"
/opt/nessus/sbin/nessuscli fix --set auto_update=false &>/dev/null
/opt/nessus/sbin/nessuscli fix --set auto_update_ui=false &>/dev/null
/opt/nessus/sbin/nessuscli fix --set disable_core_updates=true &>/dev/null
echo " 遥测数据 (telemetry): off (关闭)"
/opt/nessus/sbin/nessuscli fix --set report_crashes=false &>/dev/null
/opt/nessus/sbin/nessuscli fix --set send_telemetry=false &>/dev/null
echo " o 添加一个用户,你稍后可以修改 (用户名:admin, 密码:admin)"
# 使用 expect 自动完成添加用户的交互式过程
cat > expect.tmp<<'EOF'
spawn /opt/nessus/sbin/nessuscli adduser admin
expect "Login password:"
send "admin\r"
expect "Login password (again):"
send "admin\r"
expect "*(can upload plugins, etc.)? (y/n)*"
send "y\r"
expect "*(the user can have an empty rules set)"
send "\r"
expect "Is that ok*"
send "y\r"
expect eof
EOF
expect -f expect.tmp &>/dev/null
rm -rf expect.tmp &>/dev/null
echo " o 正在下载新插件..."
curl -A Mozilla -o all-2.0.tar.gz \
--url 'https://plugins.nessus.org/v2/nessus.php?f=all-2.0.tar.gz&u=56b33ade57c60a01058b1506999a2431&p=1ee9c89d5379a119a56498f2d5dff674' &>/dev/null
{ if [ ! -f all-2.0.tar.gz ]; then
# 如果插件下载失败则退出
echo " o 插件 all-2.0.tar.gz 下载失败 :/ 脚本正在退出。"
exit 0
fi }
echo " o 正在安装插件..."
/opt/nessus/sbin/nessuscli update all-2.0.tar.gz &>/dev/null
echo " o 正在获取版本号..."
# 我发现这里获取的版本号可能与下载的不一致,嗯...但是对我来说是可行的。
vernum=$(curl https://plugins.nessus.org/v2/plugins.php 2> /dev/null)
echo " o 正在构建插件源信息..."
cat > /opt/nessus/var/nessus/plugin_feed_info.inc <<EOF
PLUGIN_SET = "${vernum}";
PLUGIN_FEED = "ProfessionalFeed (Direct)";
PLUGIN_FEED_TRANSPORT = "Tenable Network Security Lightning";
EOF
echo " o 正在保护文件..."
chattr -i /opt/nessus/lib/nessus/plugins/plugin_feed_info.inc &>/dev/null
cp /opt/nessus/var/nessus/plugin_feed_info.inc /opt/nessus/lib/nessus/plugins/plugin_feed_info.inc &>/dev/null
echo " o 设置所有文件不可写属性..."
chattr +i /opt/nessus/var/nessus/plugin_feed_info.inc &>/dev/null
chattr +i -R /opt/nessus/lib/nessus/plugins &>/dev/null
echo " o 取消关键文件的不可写属性..."
chattr -i /opt/nessus/lib/nessus/plugins/plugin_feed_info.inc &>/dev/null
chattr -i /opt/nessus/lib/nessus/plugins &>/dev/null
echo " o 正在启动服务..."
/bin/systemctl start nessusd.service &>/dev/null
echo " o 再等待20秒,让服务器有足够的时间启动!"
sleep 20
echo " o 监控 Nessus 进度。下面这行会每10秒更新一次,直到100%"
zen=0
while [ $zen -ne 100 ]
do
# 获取服务器状态
statline=`curl -sL -k https://localhost:8834/server/status|awk -F"," -v k="engine_status" '{ gsub(/{|}/,""); for(i=1;i<=NF;i++) { if ( $i ~ k ){printf $i} } }'`
if [[ $statline != *"engine_status"* ]]; then echo -ne "\n 问题:Nessus 服务器无法访问?正在重试...\n"; fi
# 打印状态行
echo -ne "\r $statline"
# 如果状态为100%,则退出循环
if [[ $statline == *"100"* ]]; then zen=100; else sleep 10; fi
done
echo -ne '\n o 完成!\n'
echo
echo " 访问你的 Nessus: https://localhost:8834/ (或你服务器的IP地址)"
echo " 用户名: admin"
echo " 密码: admin"
echo " 请登录后尽快更改密码!"
echo
read -p "按回车键继续"