Skip to content

Commit c8826c6

Browse files
committed
harden cron installer for location-independent, explicit-root execution
1 parent 18866a0 commit c8826c6

1 file changed

Lines changed: 39 additions & 42 deletions

File tree

cron/install-cron.sh

Lines changed: 39 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,56 @@
11
#!/bin/bash
22
# cron/install-cron.sh — Install reliable cron jobs for NWE services
3-
# A Noble Mear — before Noble Ministries — a hare to include
4-
#
53
# Usage: sudo bash cron/install-cron.sh
64

7-
set -e
5+
set -euo pipefail
86

9-
CRON_DIR="$(cd "$(dirname "$0")" && pwd)"
10-
PROJECT_ROOT="$(dirname "$CRON_DIR")"
11-
CRON_USER="${USER:-root}"
7+
CRON_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8+
PROJECT_ROOT="$(cd "$CRON_DIR/.." && pwd)"
9+
CRON_USER="${CRON_USER:-${SUDO_USER:-$(id -un)}}"
1210
CRON_FILE="/etc/cron.d/nwe-mearvk"
11+
LOG_DIR="/var/log/nwe"
1312

14-
echo "-- : [cron] Installing NWE cron schedule for ${CRON_USER}"
15-
echo "-- : [cron] Project root: ${PROJECT_ROOT}"
13+
if [[ ! -d "$PROJECT_ROOT" || ! -d "$PROJECT_ROOT/scripts" ]]; then
14+
echo "[FAIL] Invalid project root: $PROJECT_ROOT" >&2
15+
exit 1
16+
fi
1617

17-
sudo tee "$CRON_FILE" > /dev/null <<EOF
18-
# NWE — NitroWebExpress™ Cron Schedule
19-
# A Noble Mear — Reliable Services before Noble Ministries
18+
if ! id "$CRON_USER" >/dev/null 2>&1; then
19+
echo "[FAIL] Cron user does not exist: $CRON_USER" >&2
20+
exit 1
21+
fi
22+
23+
if [[ "$(id -u)" -ne 0 ]]; then
24+
echo "[FAIL] Run as root (for example: sudo bash cron/install-cron.sh)." >&2
25+
exit 1
26+
fi
27+
28+
echo "[cron] Installing NWE schedule for ${CRON_USER}"
29+
echo "[cron] Project root: ${PROJECT_ROOT}"
30+
31+
mkdir -p "$LOG_DIR"
32+
chown "$CRON_USER:$CRON_USER" "$LOG_DIR"
33+
34+
cat > "$CRON_FILE" <<EOF
35+
# NWE — NitroWebExpress cron schedule
2036
# Installed: $(date -Iseconds)
2137
SHELL=/bin/bash
2238
PATH=/usr/local/bin:/usr/bin:/bin
2339
PROJECT=${PROJECT_ROOT}
2440
25-
# AE6E66 — HOL/HOC crawl (monthly, 1st of month, 03:00)
26-
0 3 1 * * ${CRON_USER} cd \${PROJECT} && java -cp modules/AE6E66/source source.AE6E66Main >> /var/log/nwe/ae6e66.log 2>&1
27-
28-
# Pull newer files from GitHub (daily, 04:00)
29-
0 4 * * * ${CRON_USER} cd \${PROJECT} && bash scripts/github/pull-newer-only.sh >> /var/log/nwe/pull-newer.log 2>&1
30-
31-
# Signal Servers health check (every 15 min)
32-
*/15 * * * * ${CRON_USER} cd \${PROJECT} && bash cron/signal-health.sh >> /var/log/nwe/signal-health.log 2>&1
33-
34-
# Postfix queue flush (every 30 min)
41+
0 3 1 * * ${CRON_USER} cd "\${PROJECT}" && java -cp modules/AE6E66/source source.AE6E66Main >> /var/log/nwe/ae6e66.log 2>&1
42+
0 4 * * * ${CRON_USER} cd "\${PROJECT}" && bash scripts/github/pull-newer-only.sh >> /var/log/nwe/pull-newer.log 2>&1
43+
*/15 * * * * ${CRON_USER} cd "\${PROJECT}" && bash cron/signal-health.sh >> /var/log/nwe/signal-health.log 2>&1
3544
*/30 * * * * ${CRON_USER} /usr/sbin/postqueue -f >> /var/log/nwe/postfix-flush.log 2>&1
36-
37-
# MySQL backup (daily, 02:00)
38-
0 2 * * * ${CRON_USER} cd \${PROJECT} && bash cron/mysql-backup.sh >> /var/log/nwe/mysql-backup.log 2>&1
39-
40-
# Strernary™ liveness (every 5 min)
41-
*/5 * * * * ${CRON_USER} cd \${PROJECT} && bash cron/strernary-liveness.sh >> /var/log/nwe/strernary.log 2>&1
42-
43-
# Gray Port Registry lease expiry check (hourly)
44-
0 * * * * ${CRON_USER} cd \${PROJECT} && bash cron/gray-lease-check.sh >> /var/log/nwe/gray-lease.log 2>&1
45-
46-
# Crypto binary integrity verification (every 48 hours — noble 2rways)
47-
0 */48 * * * ${CRON_USER} cd \${PROJECT} && bash cron/crypto-verify.sh >> /var/log/nwe/crypto-verify.log 2>&1
48-
49-
# File integrity check against trusted GitHub commits (every 48 hours — Gifted Install Tech ID)
50-
0 6 */2 * * ${CRON_USER} cd \${PROJECT} && bash cron/integrity-check.sh >> /var/log/nwe/integrity.log 2>&1
45+
0 2 * * * ${CRON_USER} cd "\${PROJECT}" && bash cron/mysql-backup.sh >> /var/log/nwe/mysql-backup.log 2>&1
46+
*/5 * * * * ${CRON_USER} cd "\${PROJECT}" && bash cron/strernary-liveness.sh >> /var/log/nwe/strernary.log 2>&1
47+
0 * * * * ${CRON_USER} cd "\${PROJECT}" && bash cron/gray-lease-check.sh >> /var/log/nwe/gray-lease.log 2>&1
48+
0 */48 * * * ${CRON_USER} cd "\${PROJECT}" && bash cron/crypto-verify.sh >> /var/log/nwe/crypto-verify.log 2>&1
49+
0 6 */2 * * ${CRON_USER} cd "\${PROJECT}" && bash cron/integrity-check.sh >> /var/log/nwe/integrity.log 2>&1
5150
EOF
5251

53-
# Create log directory
54-
sudo mkdir -p /var/log/nwe
55-
sudo chown "${CRON_USER}:${CRON_USER}" /var/log/nwe
52+
chmod 0644 "$CRON_FILE"
5653

57-
echo "-- : [cron] Installed to ${CRON_FILE}"
58-
echo "-- : [cron] Logs: /var/log/nwe/"
59-
echo "-- : [cron] Verify: crontab -l or cat ${CRON_FILE}"
54+
echo "[cron] Installed to ${CRON_FILE}"
55+
echo "[cron] Logs: ${LOG_DIR}/"
56+
echo "[cron] Verify: cat ${CRON_FILE}"

0 commit comments

Comments
 (0)