\x89PNG\r\n\x1a\n\x00\x00\x00\x0DIHDR\x00\x00\x00\x01\x00 \x00\x00\x01\x08\x06\x00\x00\x00\x1F\x15\xC4\x89\x00\x00\x00 \x0AIDATx\x9Ccb\x00\x00\x00\x06\x00\x03\x1A\x05\x9D\x00\x00 \x00\x00IEND\xAE\x42\x60\x82
| Path : /var/www/html/yedekledb24/DatabaseBackupMaster/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : /var/www/html/yedekledb24/DatabaseBackupMaster/test_gpg_dir.py |
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
YedekleDB24 için GPG dizini test scripti.
"""
import os
import sys
import tempfile
import gnupg
import logging
from pathlib import Path
from dotenv import load_dotenv
# .env dosyasını yükle
load_dotenv()
# Logging yapılandırması
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def test_gpg_dir():
"""
GPG dizinini test eder ve anahtarların doğru yerde oluşturulup oluşturulmadığını kontrol eder.
"""
# GPG_HOME_DIR değişkenini kontrol et
gpg_home_dir = os.environ.get('GPG_HOME_DIR')
if not gpg_home_dir:
logger.warning("GPG_HOME_DIR çevre değişkeni ayarlanmamış, varsayılan konum kullanılacak.")
gpg_home_dir = os.path.dirname(os.path.abspath(__file__))
# GPG anahtarları için dizin oluştur
gpg_keys_dir = os.path.join(gpg_home_dir, 'gpg_keys')
os.makedirs(gpg_keys_dir, exist_ok=True)
logger.info(f"Kullanılan GPG dizini: {gpg_keys_dir}")
# GnuPG nesnesi oluştur
gpg = gnupg.GPG(homedir=gpg_keys_dir)
# İzin uyarılarını görmezden gel
try:
gpg.ignore_homedir_permissions = True
except:
pass # Eski sürümlerde bu özellik olmayabilir
# Geçici bir anahtar oluştur
key_params = {
'key_type': 'RSA',
'key_length': 1024,
'name_real': 'Test User',
'name_email': 'test@example.com',
'passphrase': 'testpass'
}
try:
# Anahtar üret
input_data = gpg.gen_key_input(**key_params)
key = gpg.gen_key(input_data)
if key:
logger.info(f"Test anahtarı başarıyla oluşturuldu: {key.fingerprint}")
# Dizindeki dosyaları listele
logger.info(f"GPG dizini içeriği:")
for item in Path(gpg_keys_dir).glob('*'):
logger.info(f" {item.name}")
# Test dosyası oluştur
test_file = os.path.join(tempfile.gettempdir(), "test_gpg_file.txt")
with open(test_file, "w") as f:
f.write("Bu bir test dosyasıdır. GPG şifreleme testi.")
# Dosyayı şifrele
encrypted_file = os.path.join(tempfile.gettempdir(), "test_gpg_file.txt.gpg")
with open(test_file, 'rb') as f:
content = f.read()
# Simetrik şifreleme kullan (anahtar belirtme olmadan sadece şifre ile)
status = gpg.encrypt(content, None, symmetric=True, passphrase=key_params['passphrase'])
if status.ok:
with open(encrypted_file, 'wb') as f:
f.write(status.data)
if status.ok:
logger.info(f"Dosya başarıyla şifrelendi: {encrypted_file}")
# Dosyayı çöz
decrypted_file = os.path.join(tempfile.gettempdir(), "test_gpg_file_decrypted.txt")
with open(encrypted_file, 'rb') as f:
encrypted_data = f.read()
status = gpg.decrypt(encrypted_data, passphrase=key_params['passphrase'])
if status.ok:
with open(decrypted_file, 'wb') as f:
f.write(status.data)
if status.ok:
logger.info(f"Dosya şifresi başarıyla çözüldü: {decrypted_file}")
logger.info("GPG şifreleme testi BAŞARILI!")
return True
else:
logger.error(f"Dosya şifre çözme hatası: {status.status}")
logger.error(f"Hata detayı: {status.stderr if hasattr(status, 'stderr') else 'Bilinmiyor'}")
else:
logger.error(f"Dosya şifreleme hatası: {status.status}")
logger.error(f"Hata detayı: {status.stderr if hasattr(status, 'stderr') else 'Bilinmiyor'}")
else:
logger.error("Test anahtarı oluşturulamadı.")
return False
except Exception as e:
logger.error(f"GPG testi sırasında hata: {str(e)}")
return False
finally:
# Temizlik
for temp_file in [f"{tempfile.gettempdir()}/test_gpg_file.txt",
f"{tempfile.gettempdir()}/test_gpg_file.txt.gpg",
f"{tempfile.gettempdir()}/test_gpg_file_decrypted.txt"]:
if os.path.exists(temp_file):
os.remove(temp_file)
def main():
"""Ana fonksiyon"""
logger.info("GPG dizini testi başlatılıyor...")
if test_gpg_dir():
logger.info("Test BAŞARILI!")
sys.exit(0)
else:
logger.error("Test BAŞARISIZ!")
sys.exit(1)
if __name__ == "__main__":
main()