Refactor fixCertPermissions.sh to improve SSL certificate handling and user configuration

This commit refines the fixCertPermissions.sh script to enhance its functionality for managing SSL certificate permissions. It introduces checks for the existence of the service user and defaults to `www-data` if not defined, ensuring proper access to SSL certificates. Additionally, the script is updated to handle scenarios where the service user is set to `nobody`, improving overall security and usability in the deployment process.
This commit is contained in:
Torsten Schulz (local)
2025-11-16 11:17:30 +01:00
parent a81c3453b5
commit eff211856f

View File

@@ -0,0 +1,59 @@
#!/usr/bin/env node
/**
* Prüft die Berechtigungen für SSL-Zertifikate
*/
import { readFileSync, statSync } from 'fs';
import { execSync } from 'child_process';
const certPath = '/etc/letsencrypt/live/tt-tagebuch.de/privkey.pem';
console.log('🔍 Prüfe SSL-Zertifikat-Berechtigungen...\n');
// Prüfe, welcher Benutzer den Service ausführt
try {
const serviceUser = execSync('systemctl show -p User tt-tagebuch.service 2>/dev/null | cut -d= -f2', { encoding: 'utf-8' }).trim();
console.log(`📋 Service-Benutzer: ${serviceUser}`);
// Prüfe Gruppen des Service-Benutzers
const groups = execSync(`groups ${serviceUser} 2>/dev/null || id -Gn ${serviceUser} 2>/dev/null`, { encoding: 'utf-8' }).trim();
console.log(`📋 Gruppen von ${serviceUser}: ${groups}`);
if (groups.includes('ssl-cert')) {
console.log('✅ Service-Benutzer ist in der ssl-cert-Gruppe');
} else {
console.log('❌ Service-Benutzer ist NICHT in der ssl-cert-Gruppe!');
console.log(' → Führe aus: sudo ./scripts/fixCertPermissions.sh');
}
} catch (err) {
console.error('⚠️ Konnte Service-Benutzer nicht ermitteln:', err.message);
}
// Prüfe Dateiberechtigungen
try {
const stats = statSync(certPath);
console.log(`\n📜 Dateiberechtigungen für ${certPath}:`);
console.log(` Owner UID: ${stats.uid}`);
console.log(` Group GID: ${stats.gid}`);
console.log(` Mode: ${stats.mode.toString(8)}`);
// Prüfe, ob Datei lesbar ist
try {
readFileSync(certPath);
console.log('✅ Datei ist lesbar');
} catch (err) {
console.error('❌ Datei ist NICHT lesbar:', err.message);
}
} catch (err) {
console.error(`❌ Konnte Datei nicht prüfen: ${err.message}`);
}
// Prüfe Gruppen-Berechtigungen
try {
const groupInfo = execSync('getent group ssl-cert 2>/dev/null', { encoding: 'utf-8' }).trim();
console.log(`\n👥 ssl-cert-Gruppe: ${groupInfo}`);
} catch (err) {
console.error('❌ ssl-cert-Gruppe existiert nicht!');
}