Official Document

Information Security Policy

How OurNurseryGrid protects the data entrusted to us by nurseries, parents and children.

Owner: Tim Jollie Version 1.0 — 12 May 2026 Next review: May 2027 Reviewed by: BSc Cyber Security (Level 5)

1 Purpose & Scope

This policy defines the information security controls in place for all systems operated by OurGrid, trading as OurNurseryGrid, OurFamilyGrid, OurKitchenGrid, OurHealthGrid, OurTeamGrid, OurEventsGrid, OurTicketGrid, OurFinanceGrid and OurProjectGrid.

In scope: All services hosted on the OurGrid production VPS running Ubuntu 24.04 LTS. This includes all web applications, databases, mail services, and associated Node.js processes.
Out of scope: End-user devices (staff computers, phones). Third-party SaaS services — none currently in use; all services are self-hosted.

This policy is aligned with the NCSC Cyber Essentials framework (Montpellier v3.1) and UK GDPR requirements for processing children's personal data.

2 Roles & Responsibilities

RolePersonResponsibilities
Security OwnerTim JolliePolicy ownership, patch oversight, incident response, CE certification
System AdministratorTim JollieServer access, firewall rules, user accounts, backups
Data ControllerEach nursery customerGDPR obligations for their nursery's data
Data ProcessorOurGridProcessing children's data on behalf of nursery customers

3 Asset Inventory

AssetDescriptionCriticality
Production VPSUbuntu 24.04 LTSCritical
MySQL DatabaseAll application data (localhost:3306)Critical
PostgreSQL DatabaseTicketGrid, EventsGrid, ProjectGrid (localhost:5432)Critical
Apache Web ServerReverse proxy, SSL termination (443)Critical
SSL CertificatesLet's Encrypt, auto-renewingCritical
Mail ServerPostfix/Dovecot for OurGrid appsHigh
Monarx AgentReal-time malware scanningHigh
Cloudflare R2 BackupDaily encrypted offsite backupHigh

4 Firewall Policy

All internet-facing traffic is controlled by UFW (Uncomplicated Firewall) with a default-deny incoming policy. Only the following ports are permitted:

PortServiceAccessJustification
22/tcpSSHAll IPsRemote server administration (key auth only)
80/tcpHTTPAll IPsRedirected to HTTPS
443/tcpHTTPSAll IPsAll web applications
25/465/587SMTP/SAll IPsMail server for OurGrid apps
110/143/993/995IMAP/POP3All IPsEmail retrieval for OurGrid apps
2222/tcpSFTPAll IPsSecure file transfer
53DNSAll IPsDNS resolution
10000/tcpWebminAdmin subnet onlyServer admin panel — IP-restricted
20000/tcpUserminAdmin subnet onlyServer admin panel — IP-restricted
Disabled 12 May 2026: ProFTPD (plain FTP port 21) — stopped, disabled and removed from firewall. Replaced by SFTP over SSH.

5 Secure Configuration

5.1 SSH Hardening

PermitRootLogin no
PasswordAuthentication no
AuthenticationMethods publickey

Root SSH login is disabled. Password authentication is disabled. The only accepted authentication method is a passphrase-protected RSA public key — providing two-factor access (something you have + something you know).

5.2 HTTP Security Headers

All HTTPS responses include the following security headers:

HeaderValue
Strict-Transport-Securitymax-age=31536000; includeSubDomains; preload
Content-Security-Policydefault-src 'self'; frame-ancestors 'none'; form-action 'self'
X-Frame-OptionsDENY
X-Content-Type-Optionsnosniff
Referrer-Policystrict-origin-when-cross-origin
Permissions-Policygeolocation=(), microphone=(), camera=(), payment=()

5.3 Application Security

  • SQL injection: All database queries use parameterised prepared statements — user input is never interpolated into SQL strings
  • XSS: EJS templating auto-escapes all output by default; Content Security Policy provides defence-in-depth
  • CSRF: Session-bound tokens validated on all state-changing requests; SameSite=Lax cookies provide additional protection
  • File uploads: MIME type and file extension whitelist (JPEG/PNG/GIF/WebP only); maximum 5MB
  • Rate limiting: 10 login attempts per 15 minutes per IP address; 120 requests/minute global cap
  • Session cookies: HttpOnly, Secure, SameSite=Lax — never accessible via JavaScript
  • Multi-tenant isolation: Every database query is scoped by nursery ID — architecturally impossible for one nursery to access another's data

6 Access Control

6.1 Server Access

  • One named administrator account — no shared server logins
  • Authentication: RSA 2048 private key with passphrase (two factors)
  • Root direct login disabled; privilege escalation via sudo only

6.2 Application — Staff

  • Individual accounts per staff member — no shared logins
  • 14 defined roles with least-privilege access enforced server-side
  • Admin-only functions (settings, staff management) are restricted in code, not just hidden in the UI
  • Account lockout: 5 failed login attempts triggers a 15-minute lockout
  • Password policy: Minimum 10 characters, hashed with bcrypt (cost factor 12)
  • When staff leave: account deactivated immediately — deactivated accounts cannot log in

6.3 Application — Parents

  • Individual parent accounts with explicit portal access flag
  • Same lockout policy as staff (5 attempts, 15 minutes)
  • Parent access strictly limited to their own children's data

7 Malware Protection

Monarx Agent v4.3.22 — Real-time webshell and malware scanning, enabled on boot, auto-updating.
Monarx Protect v5.2.24 — PHP runtime extension for active file protection.
  • Scan scope: all application directories and web roots — covers all web application code
  • Real-time detection: files are scanned on write, not just on schedule
  • Detections are flagged immediately for manual review and deletion
  • Monarx definitions updated automatically

8 Patch Management

8.1 Operating System

  • Automatic: unattended-upgrades applies security patches daily from ubuntu-security
  • Target: Security patches applied within 14 days of release (typically same-day via automation)
  • Last full manual patch: 12 May 2026 — all packages current
  • OS: Ubuntu 24.04 LTS — supported until April 2029

8.2 Application Dependencies

TaskFrequency
npm audit — check for known CVEsMonthly
npm update — apply non-breaking updatesMonthly
Major version upgrades assessedQuarterly
Planned: Upgrade from Node.js 20 (maintenance) to Node.js 22 LTS by Q4 2026.

9 Data Protection & UK GDPR

9.1 Data categories processed

  • Children's personal data (name, DOB, medical conditions, allergies, SEND needs)
  • Parent/guardian personal data (name, email, phone)
  • Staff personal data (name, email, DBS numbers, qualifications)
  • Attendance, diary, incident and billing records

9.2 Lawful basis

  • Processing under UK GDPR Article 6(1)(b) — contract performance and Article 6(1)(c) — legal obligation (Ofsted/EYFS requirements)
  • Special category data (health/medical) under Article 9(2)(a) — explicit parental consent
  • OurGrid acts as data processor; each nursery is the data controller

9.3 Technical measures

  • At rest: AES-256 server disk encryption
  • In transit: TLS 1.3, enforced via HSTS (1-year max-age with preload)
  • Location: UK-hosted server — no transfers outside UK or EEA
  • Sessions: Server-side only — no sensitive data stored in client cookies

9.4 Data retention & deletion

  • Active child records retained for the duration of the nursery's subscription
  • On account closure: data retained for 30 days then permanently deleted
  • Earlier deletion available on request

9.5 Data Processing Agreement

A DPA is available on request and provided as standard to all Nursery, Professional and Enterprise plan customers. Contact hello@ournurserygrid.com to request a copy.

10 Incident Response

A security incident is defined as: unauthorised access, malware detection, data breach (actual or suspected), credential compromise, or denial of service.

StepActionTimeframe
1. DetectMonarx alert, log review, or user reportImmediate
2. ContainBlock IP, disable affected account, take snapshotWithin 1 hour
3. AssessDetermine scope — what data, how, how longWithin 4 hours
4. Notify ICOPersonal data breach: notify ICO (UK GDPR Article 33)Within 72 hours
5. Notify customersInform affected nurseries if their data involvedWithin 72 hours
6. EradicateRemove malware, patch vulnerability, rotate credentialsWithin 24 hours of containment
7. RecoverRestore from backup if needed, verify integrityAs required
8. ReviewPost-incident report, update policy if neededWithin 7 days
Report security incidents to security@ournurserygrid.com
ICO breach reporting: ico.org.uk/report-a-breach

11 Backup Policy

Automated daily backup runs at 02:00 BST to Cloudflare R2 (geographically separate from VPS host).

ItemFrequencyRetentionLocation
All MySQL databasesDaily 02:007 daysCloudflare R2
All PostgreSQL databasesDaily 02:007 daysCloudflare R2
All application filesDaily 02:007 daysCloudflare R2
Server config (Apache, cron, PM2)Daily 02:007 daysCloudflare R2
Local backup copyDaily 02:007 daysLocal backup directory on VPS
SSL certificatesAuto-renewed by certbotContinuousServer certificate store
Last successful backup: 12 May 2026 02:00 — 303MB — Cloudflare R2

12 Review & Audit Schedule

ActivityFrequency
Full policy reviewAnnually (next: May 2027)
Firewall rule reviewAnnually or on change
User account auditMonthly
npm dependency auditMonthly
Penetration testAnnually (first: Q3 2026)
Cyber Essentials renewalAnnually