Toplu Olarak ogrenci (Sınırlı Erişim) Kullanıcısını Silme Uygulaması
Pardus ETAP yüklü akıllı tahtalarda 30-40 tahtada tek tek işlem yapmak yerine ağ üzerinden yönetmek için Python ve PyQt6 kütüphanesini kullanarak modern, kullanıcı dostu bir arayüz hazırlayabiliriz. Bu uygulama hem ağdaki tahtaları tarayacak hem de seçtiğiniz tahtalarda kullanıcı silme işlemini gerçekleştirecektir.
1. Ön Hazırlıklar
İşleme başlamadan önce aşağıdaki şartların sağlandığından emin olun:
IP Listesi: Tüm tahtaların IP adreslerini içeren bir metin dosyanız olmalı (Örn:
tahtalar.txt).SSH Erişimi: Tahtalarda SSH servisinin açık ve yetkili bir kullanıcıya (genelde
etapadmin) erişiminizin olması gerekir.Yedekleme:
ogrencikullanıcısı silindiğinde masaüstündeki ve belgelerindeki tüm veriler silinecektir. Önemli veri varsa yedekleyiniz.
2. Pardus ETAP yüklü tahtaları 🛠 Gerekli Paketlerin Kurulumu
Uygulamayı çalıştırmadan önce sisteminize gerekli araçları kurmanız gerekir:
sudo apt update
sudo apt install python3-pyqt6 nmap sshpass -y
3. Pardus Toplu Yönetim Uygulaması (Python/PyQt6)
Bu kodu etap_yonetici.py adıyla kaydedin ve çalıştırın.
import sys
import subprocess
import threading
from PyQt6.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout,
QPushButton, QListWidget, QListWidgetItem,
QLineEdit, QLabel, QProgressBar, QMessageBox)
from PyQt6.QtCore import Qt, pyqtSignal, QObject
class WorkerSignals(QObject):
finished = pyqtSignal(list)
progress = pyqtSignal(str)
class EtapYonetici(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('Pardus ETAP - Toplu Kullanıcı Silme Aracı')
self.setGeometry(100, 100, 500, 600)
layout = QVBoxLayout()
# Ağ Aralığı Girişi
layout.addWidget(QLabel("Ağ Aralığı (Örn: 192.168.1.0/24):"))
self.network_input = QLineEdit("192.168.1.0/24")
layout.addWidget(self.network_input)
# Admin Bilgileri
h_layout = QHBoxLayout()
self.admin_user = QLineEdit("etapadmin")
self.admin_pass = QLineEdit()
self.admin_pass.setEchoMode(QLineEdit.EchoMode.Password)
self.admin_pass.setPlaceholderText("Admin Şifresi")
h_layout.addWidget(QLabel("Admin:"))
h_layout.addWidget(self.admin_user)
h_layout.addWidget(self.admin_pass)
layout.addLayout(h_layout)
# Tarama Butonu
self.scan_btn = QPushButton("Ağı Tara (Tahtaları Bul)")
self.scan_btn.clicked.connect(self.start_scan)
layout.addWidget(self.scan_btn)
# Liste
layout.addWidget(QLabel("Bulunan Tahtalar (Silmek istediklerinizi seçin):"))
self.ip_list = QListWidget()
layout.addWidget(self.ip_list)
# İlerleme Çubuğu ve Durum
self.pbar = QProgressBar()
layout.addWidget(self.pbar)
self.status_label = QLabel("Hazır")
layout.addWidget(self.status_label)
# Aksiyon Butonu
self.delete_btn = QPushButton("SEÇİLİ TAHTALARDAN 'ogrenci' KULLANICISINI SİL")
self.delete_btn.setStyleSheet("background-color: #e74c3c; color: white; font-weight: bold;")
self.delete_btn.clicked.connect(self.start_deletion)
layout.addWidget(self.delete_btn)
self.setLayout(layout)
def log(self, text):
self.status_label.setText(text)
# --- TARAMA İŞLEMLERİ ---
def start_scan(self):
self.ip_list.clear()
self.scan_btn.setEnabled(False)
self.log("Ağ taranıyor, lütfen bekleyin...")
threading.Thread(target=self.run_scan_thread).start()
def run_scan_thread(self):
network = self.network_input.text()
# Nmap ile port 22 açık cihazları bul
cmd = f"nmap -p 22 --open {network} | grep 'Nmap scan report for' | awk '{{print $NF}}' | tr -d '()'"
try:
output = subprocess.check_output(cmd, shell=True).decode().splitlines()
self.scan_finished(output)
except:
self.scan_finished([])
def scan_finished(self, ips):
self.scan_btn.setEnabled(True)
if not ips:
self.log("Cihaz bulunamadı!")
return
for ip in ips:
item = QListWidgetItem(ip)
item.setFlags(item.flags() | Qt.ItemFlag.ItemIsUserCheckable)
item.setCheckState(Qt.CheckState.Checked)
self.ip_list.addItem(item)
self.log(f"{len(ips)} cihaz bulundu.")
# --- SİLME İŞLEMLERİ ---
def start_deletion(self):
selected_ips = []
for i in range(self.ip_list.count()):
item = self.ip_list.item(i)
if item.checkState() == Qt.CheckState.Checked:
selected_ips.append(item.text())
if not selected_ips:
QMessageBox.warning(self, "Hata", "Lütfen en az bir tahta seçin.")
return
if not self.admin_pass.text():
QMessageBox.warning(self, "Hata", "Lütfen admin şifresini girin.")
return
confirm = QMessageBox.question(self, "Onay", f"{len(selected_ips)} tahtadan 'ogrenci' kullanıcısı silinecek. Emin misiniz?",
QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No)
if confirm == QMessageBox.StandardButton.Yes:
self.delete_btn.setEnabled(False)
threading.Thread(target=self.run_delete_thread, args=(selected_ips,)).start()
def run_delete_thread(self, ips):
password = self.admin_pass.text()
user = self.admin_user.text()
total = len(ips)
for index, ip in enumerate(ips):
self.log(f"İşleniyor: {ip} ({index+1}/{total})")
# SSH üzerinden kullanıcı silme komutu
del_cmd = f"sshpass -p '{password}' ssh -o StrictHostKeyChecking=no {user}@{ip} 'echo {password} | sudo -S deluser --remove-home ogrenci'"
subprocess.run(del_cmd, shell=True)
self.pbar.setValue(int(((index + 1) / total) * 100))
self.log("İşlem tamamlandı.")
self.delete_btn.setEnabled(True)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = EtapYonetici()
ex.show()
sys.exit(app.exec())
4. Uygulamayı Çalıştırma
Bu uygulama sistem dosyalarına (/etc/hosts) müdahale ettiği için normal bir kullanıcı olarak çalıştırılamaz. Pardus terminalini açın ve kaydettiğiniz dizine giderek şu komutu girin:
Bashsudo python3 etap_yonetici.py
Şifrenizi girdikten sonra uygulama açılacaktır.
Bu uygulama sistem dosyalarına (/etc/hosts) müdahale ettiği için normal bir kullanıcı olarak çalıştırılamaz. Pardus terminalini açın ve kaydettiğiniz dizine giderek şu komutu girin:
sudo python3 etap_yonetici.py
Şifrenizi girdikten sonra uygulama açılacaktır.
Uygulama Nasıl Kullanılır?
Ağ Aralığı: Kendi okul ağınızı girin (Genelde varsayılan
192.168.1.0/24doğrudur).Admin Bilgileri: Tahtalardaki yetkili kullanıcı adı (
etapadmin) ve şifresini yazın.Taramayı Başlat: "Ağı Tara" butonuna basın. Program, SSH portu açık olan tüm cihazları listeler.
Seçim Yapın: Listeden işlem yapmak istemediğiniz tahtaların tikini kaldırabilirsiniz.
Kullanıcıyı Sil: Kırmızı butona basın. Program sırayla her tahtaya bağlanıp
ogrencikullanıcısını ev diziniyle birlikte silecektir.
Geliştirme Notları
Hız: Program
threadingkullandığı için tarama ve silme sırasında donma yapmaz.Güvenlik: Şifre alanı yıldızlı (
Password Echo) şekilde ayarlanmıştır.Hata Ayıklama: Eğer bir tahtada şifre yanlışsa veya bağlantı koparsa, program o tahtayı atlayıp bir sonrakine geçer.
Yorumlar
Yorum Gönder