Windows Active Directory (AD) ortamından Organizational Unit (OU), Kullanıcı ve Grup nesnelerini dışa aktarma

1️⃣ Organizational Unit (OU) Dışa Aktarma

🔹 Yöntem 1: PowerShell ile OU Export (Önerilen)

Get-ADOrganizationalUnit -Filter * | Select-Object Name, DistinguishedName | Export-Csv C:\AD_Export\OU_List.csv -NoTypeInformation -Encoding UTF8

📌 Çıktı içeriği

  • OU Adı

  • DN yapısı (hiyerarşi korunur)

📁 Örnek:

OU=OGRENCILER,OU=TSOMTAL,DC=tsomtal,DC=com

🔹 Yöntem 2: LDIFDE ile OU Export

ldifde -f C:\AD_Export\ou.ldf -r "(objectClass=organizationalUnit)"

✔ Samba AD’ye birebir import için en uyumlu yöntemdir.


2️⃣ Kullanıcıları Dışa Aktarma (Users)

🔹 PowerShell ile Kullanıcı Export (En Temiz Yöntem)

Get-ADUser -Filter * -Properties DisplayName,Mail,Department | Select-Object SamAccountName,Name,DisplayName,Mail,Department | Export-Csv C:\AD_Export\Users.csv -NoTypeInformation -Encoding UTF8

📌 İdeal alanlar

  • SamAccountName → kullanıcı adı

  • DisplayName

  • Mail

  • Department

📁 Samba AD import için birebirdir.


🔹 Sadece Belirli OU’dan Kullanıcı Export

Get-ADUser -SearchBase "OU=OGRENCILER,DC=tsomtal,DC=com" -Filter * | Export-Csv C:\AD_Export\Ogrenciler.csv -NoTypeInformation -Encoding UTF8

🎯 Okul senaryosu için çok ideal


3️⃣ Grupları Dışa Aktarma (Groups)

🔹 PowerShell ile Grup Export

Get-ADGroup -Filter * | Select-Object Name,GroupScope,GroupCategory | Export-Csv C:\AD_Export\Groups.csv -NoTypeInformation -Encoding UTF8

📌 Grup Türleri:

  • Security

  • Distribution

  • Global / DomainLocal / Universal


🔹 Grup Üyeleriyle Birlikte Export

Get-ADGroup -Filter * | ForEach-Object { Get-ADGroupMember $_.Name | Select @{ Name="GroupName";Expression={$_.Name} }, Name, SamAccountName } | Export-Csv C:\AD_Export\GroupMembers.csv -NoTypeInformation -Encoding UTF8

En kritik dosya
✔ Kullanıcı–grup ilişkisi korunur


4️⃣ Hepsini Tek Seferde Export (Kurumsal Script)

New-Item -ItemType Directory C:\AD_Export Get-ADOrganizationalUnit -Filter * | Export-Csv C:\AD_Export\OU.csv -NoTypeInformation -Encoding UTF8 Get-ADUser -Filter * -Properties DisplayName | Export-Csv C:\AD_Export\Users.csv -NoTypeInformation -Encoding UTF8 Get-ADGroup -Filter * | Export-Csv C:\AD_Export\Groups.csv -NoTypeInformation -Encoding UTF8

📁 Yedek klasörünüz hazır


5️⃣ Samba AD / Pardus İçin En Doğru Format

AmaçÖnerilen
OU yapısıldifde
KullanıcılarCSV (PowerShell)
GruplarCSV
Grup üyelikleriCSV
Otomatik geçişPython / Bash Script

6️⃣ Görsel Akış (Mantık Şeması)


7️⃣ Sıradaki Adım (İstersen)

İstersen sana şunları hazır yapabilirim:

✔ Windows AD → Samba AD otomatik import scripti
✔ CSV → ldbadd / samba-tool dönüşümü
✔ Okula özel OU + Grup şeması
✔ “Windows DC tamamen kapatma” göç rehberi (PDF)

👉 Hangisiyle devam edelim?

Şunu dedin:
windows DC pardus göç etmek istiyoruz
ChatGPT:

Harika 👍
O zaman Windows Domain Controller → Pardus Server (Samba AD) göçünü okul ortamına uygun, risksiz ve kalıcı olacak şekilde uçtan uca anlatıyorum.
(Bu anlatım TSOMTAL gibi okul ağları için birebir uygulanabilir.)


🔁 Windows DC → Pardus Server (Samba AD) Göç Rehberi

🎯 Amaç

  • Windows Server tamamen devreden çıkarılacak

  • Pardus Server birincil Domain Controller olacak

  • OU, Kullanıcı, Grup yapısı korunacak

  • İstemciler yeniden kurulum gerekmeden etki alanına alınacak


🧭 GENEL YOL HARİTASI

Windows DC (Eski) │ ├─ OU + Kullanıcı + Grup EXPORT │ ├─ DNS yapısı kontrol │ ├─ İstemciler DC’den çıkarılmaz │ Pardus Server (Yeni) │ ├─ Samba AD Kurulumu ├─ OU + Kullanıcı + Grup IMPORT ├─ DNS + Time + SYSVOL │ └─ Windows DC KAPATILIR

1️⃣ Windows DC Üzerinde HAZIRLIK (EN KRİTİK AŞAMA)

🔹 A) Domain Bilgilerini Netleştir

Örnek:

Domain (FQDN): tsomtal.com NetBIOS : TSOMTAL DC IP : 192.168.16.254

⚠️ Yeni Pardus DC aynı domain adıyla kurulacak


🔹 B) OU – Kullanıcı – Grup EXPORT

✔ OU

ldifde -f C:\export\ou.ldf -r "(objectClass=organizationalUnit)"

✔ Kullanıcı

Get-ADUser -Filter * | Select SamAccountName,Name,UserPrincipalName | Export-Csv C:\export\users.csv -NoTypeInformation -Encoding UTF8

✔ Gruplar

Get-ADGroup -Filter * | Export-Csv C:\export\groups.csv -NoTypeInformation -Encoding UTF8

✔ Grup Üyeleri

Get-ADGroup -Filter * | ForEach-Object { Get-ADGroupMember $_ | Select @{n="Group";e={$_.Name}},SamAccountName } | Export-Csv C:\export\group_members.csv -NoTypeInformation

📁 Bu klasörü harici disk ile yedekle.


2️⃣ Pardus Server ÜZERİNDE SAMBA AD KURULUMU

🔹 A) Hostname & DNS

hostnamectl set-hostname dc.tsomtal.com

/etc/hosts

192.168.16.253 dc.tsomtal.com dc

/etc/resolv.conf

search tsomtal.com nameserver 127.0.0.1

🔹 B) Samba AD Kurulumu

apt install samba krb5-user winbind dnsutils -y
samba-tool domain provision \ --use-rfc2307 \ --realm=TSOMTAL.COM \ --domain=TSOMTAL \ --server-role=dc \ --dns-backend=SAMBA_INTERNAL

✔ Admin şifresini Windows DC ile aynı yap


🔹 C) Servis Kontrol

systemctl enable samba-ad-dc systemctl start samba-ad-dc
samba-tool domain level show

3️⃣ OU – KULLANICI – GRUP IMPORT

🔹 OU Import

ldbadd -H /var/lib/samba/private/sam.ldb ou.ldf

🔹 Kullanıcı Import (Örnek Script)

while IFS=, read -r user name upn do samba-tool user create "$user" "Temp123!" done < users.csv

⚠️ İlk importta geçici şifre verilir.


🔹 Grup Import

while read group do samba-tool group add "$group" done < groups.csv

🔹 Grup Üyelikleri

samba-tool group addmembers GrupAdi KullaniciAdi

(İstersen bunu otomatik script yaparım)


4️⃣ DNS & ZAMAN SENKRONİZASYONU

🔹 Time Sync

timedatectl set-ntp true
samba-tool ntacl sysvolreset

5️⃣ İSTEMCİLER (EN GÜZEL KISIM 😎)

✔ Windows Bilgisayarlar

  • Domain’den çıkarmaya gerek yok

  • DNS’i Pardus DC IP yap

  • Oturum aç → çalışır

✔ Pardus İstemciler

  • realmd veya winbind ile bağlanır

  • LiderAhenk sorunsuz çalışır


6️⃣ WINDOWS DC KAPATMA (SON ADIM)

  1. FSMO rolleri Pardus’ta mı?

samba-tool fsmo show
  1. Windows DC:

dcpromo /forceremoval
  1. Makine kapatılır.


7️⃣ OKUL ORTAMI İÇİN ÖNERİLER

✔ Öğrenci / Öğretmen OU ayrı
✔ Grup tabanlı paylaşım
✔ LiderAhenk entegrasyonu
✔ SYSVOL yedeği
✔ Haftalık samba-tool backup


🔚 SONUÇ

🎉 Artık:

  • Lisans yok

  • Windows bağımlılığı yok

  • Pardus + Samba AD tam yetkili DC


➡️ Sonraki Aşama (Önerim)

  • Windows DC → Pardus birebir otomatik göç scripti

  • TSOMTAL için örnek OU + Grup şeması

  • PDF eğitim dokümanı

  • İstemci tarafı (ETAP 23) domain entegrasyonu


1) Windows DC → Pardus “Otomatik Göç” Script Seti

A) Windows DC’de Export (PowerShell) — export-ad.ps1

  1. Windows DC’de C:\AD_MIG klasörü oluştur.

  2. Aşağıdaki scripti C:\AD_MIG\export-ad.ps1 olarak kaydet ve PowerShell’i Yönetici açıp çalıştır:

# C:\AD_MIG\export-ad.ps1 Import-Module ActiveDirectory $Out="C:\AD_MIG" New-Item -ItemType Directory -Force $Out | Out-Null # 1) OU export (DN ile hiyerarşi korunur) Get-ADOrganizationalUnit -Filter * | Select-Object Name,DistinguishedName | Export-Csv "$Out\ou.csv" -NoTypeInformation -Encoding UTF8 # 2) Users export (minimum + okul için faydalı alanlar) Get-ADUser -Filter * -Properties DisplayName,Mail,Department,Title,Description,MemberOf,Enabled | Select-Object SamAccountName,UserPrincipalName,Name,DisplayName,Mail,Department,Title,Description,Enabled | Export-Csv "$Out\users.csv" -NoTypeInformation -Encoding UTF8 # 3) Groups export Get-ADGroup -Filter * -Properties GroupScope,GroupCategory,Description | Select-Object Name,SamAccountName,GroupScope,GroupCategory,Description,DistinguishedName | Export-Csv "$Out\groups.csv" -NoTypeInformation -Encoding UTF8 # 4) Group members export (kritik) $rows = @() Get-ADGroup -Filter * | ForEach-Object { $g=$_ Get-ADGroupMember -Identity $g.DistinguishedName -Recursive | ForEach-Object { $rows += [PSCustomObject]@{ GroupSam = $g.SamAccountName MemberSam = $_.SamAccountName ObjectClass = $_.objectClass } } } $rows | Export-Csv "$Out\group_members.csv" -NoTypeInformation -Encoding UTF8 Write-Host "Export tamam: $Out"

✅ Çıktılar:

  • ou.csv

  • users.csv

  • groups.csv

  • group_members.csv

Bunları USB ile Pardus DC’ye kopyalayın: ör. /root/ad_mig/


B) Pardus Server’da Import (Bash) — “tek seferde kur ve içe al”

Aşağıdaki dosyayı /root/ad_mig/import-all.sh yap:

#!/usr/bin/env bash set -euo pipefail BASE="/root/ad_mig" OUCSV="$BASE/ou.csv" USCSV="$BASE/users.csv" GRCSV="$BASE/groups.csv" MEMCSV="$BASE/group_members.csv" # Samba admin kullanıcı adı (genelde Administrator) SAMBA_ADMIN="Administrator" # Domain realm ve dns (kurulumunuza göre) REALM_UPPER="TSOMTAL.COM" # Import sırasında verilecek geçici şifre TEMP_PASS="Temp123!Temp123!" echo "==[0] Ön kontroller==" command -v samba-tool >/dev/null test -f "$OUCSV" && test -f "$USCSV" && test -f "$GRCSV" && test -f "$MEMCSV" echo "==[1] OU oluşturma==" # Not: Windows DN formatındaki OU hiyerarşisini korumak için # DN'den OU=... parçalarını okuyup sıralı oluşturuyoruz. python3 - <<'PY' import csv, re, sys path = "/root/ad_mig/ou.csv" ous=set() with open(path, newline='', encoding='utf-8') as f: r=csv.DictReader(f) for row in r: dn=row["DistinguishedName"] # DC parçalarını at, OU zincirini al parts=[p for p in dn.split(",") if p.upper().startswith("OU=")] # en üstten alta doğru tüm kademeleri ekle for i in range(len(parts)): ous.add(",".join(parts[i:]+[p for p in dn.split(",") if p.upper().startswith("DC=")])) # üstten alta: OU sayısı az olan önce def depth(dn): return dn.upper().count("OU=") for dn in sorted(ous, key=depth): print(dn) PY | while read -r ou_dn; do # samba-tool ou create DN if samba-tool ou list | grep -qi "$(echo "$ou_dn" | sed 's/OU=//g' | tr ',' '/')"; then true fi samba-tool ou create "$ou_dn" -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true done echo "==[2] Grup oluşturma==" python3 - <<'PY' import csv path="/root/ad_mig/groups.csv" with open(path, newline='', encoding='utf-8') as f: r=csv.DictReader(f) for row in r: name=row.get("SamAccountName") or row.get("Name") if not name: continue # bazı Windows grupları boş/özel olabilir, yine de deneriz print(name) PY | while read -r g; do samba-tool group add "$g" -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true done echo "==[3] Kullanıcı oluşturma==" python3 - <<'PY' import csv path="/root/ad_mig/users.csv" with open(path, newline='', encoding='utf-8') as f: r=csv.DictReader(f) for row in r: sam=row["SamAccountName"].strip() if not sam or sam.lower() in ("administrator","krbtgt","guest"): continue upn=row.get("UserPrincipalName","").strip() display=row.get("DisplayName","").strip() or row.get("Name","").strip() or sam mail=row.get("Mail","").strip() dept=row.get("Department","").strip() title=row.get("Title","").strip() desc=row.get("Description","").strip() enabled=(row.get("Enabled","True").strip().lower() in ("true","1","yes")) # CSV güvenli çıktı (tab ayracı) print("\t".join([sam, upn, display, mail, dept, title, desc, "1" if enabled else "0"])) PY | while IFS=$'\t' read -r sam upn display mail dept title desc enabled; do samba-tool user create "$sam" "$TEMP_PASS" \ --given-name "${display%% *}" \ --surname "${display#* }" \ -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true # opsiyonel alanlar [ -n "$mail" ] && samba-tool user setemail "$sam" "$mail" -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true [ -n "$desc" ] && samba-tool user setcomment "$sam" "$desc" -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true # disabled ise kapat if [ "$enabled" = "0" ]; then samba-tool user disable "$sam" -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true fi done echo "==[4] Grup üyelikleri==" python3 - <<'PY' import csv path="/root/ad_mig/group_members.csv" with open(path, newline='', encoding='utf-8') as f: r=csv.DictReader(f) for row in r: g=row["GroupSam"].strip() m=row["MemberSam"].strip() oc=row.get("ObjectClass","") if not g or not m: continue # only users (isterseniz computer'ları da ayrıca ekleriz) if oc and oc.lower() not in ("user","person","inetorgperson"): continue print(f"{g}\t{m}") PY | while IFS=$'\t' read -r g m; do samba-tool group addmembers "$g" "$m" -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true done echo "==[5] İlk girişte şifre değiştirme önerisi==" echo "Kullanıcılar TEMP_PASS ile oluşturuldu. İlk girişte şifre değiştirtmek için GPO/Samba policy uygulanabilir." echo "Import bitti."

Çalıştır:

chmod +x /root/ad_mig/import-all.sh /root/ad_mig/import-all.sh

🔐 Not: Scriptte -U Administrator%TempPass kullanımı var. Güvenlik için import sonrası Administrator şifresini değiştirin.


2) TSOMTAL için Örnek OU + Grup Şeması

Okul için “sade ama ölçeklenebilir” bir standart:

OU Yapısı

DC=tsomtal,DC=com └── OU=TSOMTAL ├── OU=KULLANICILAR │ ├── OU=OGRETMENLER │ ├── OU=OGRENCILER │ │ ├── OU=9 │ │ ├── OU=10 │ │ ├── OU=11 │ │ └── OU=12 │ └── OU=PERSONEL ├── OU=BILGISAYARLAR │ ├── OU=LAB │ ├── OU=OFIS │ └── OU=ETAP23_TAHTA ├── OU=GRUPLAR │ ├── OU=ROL │ ├── OU=SINIF │ └── OU=KULUP_PROJE └── OU=SERVIS_HESAPLARI

Grup Standardı (isimlendirme)

  • Rol grupları

    • GG_OGRETMEN

    • GG_OGRENCI

    • GG_IDARE

    • GG_BTOgretmen

  • Sınıf grupları

    • GG_SINIF_9A, GG_SINIF_10B

  • Lab / cihaz grupları

    • GG_LAB_BILISIM1_PC

    • GG_ETAP23_TAHTA

  • Paylaşım izin grupları

    • FS_OGRETMEN_OKUMA

    • FS_OGRETMEN_YAZMA

    • FS_OGRENCI_HOME

    • FS_SINIF_9A_PAYLASIM

Bu sayede:

  • Paylaşım izinlerini kullanıcıya değil gruba verirsiniz

  • ETAP 23 tahtalara “policy / kısıt” uygulamak kolaylaşır


3) İstemci Tarafı: ETAP 23 Domain Entegrasyonu (Pardus)

ETAP 23 çoğunlukla Debian tabanlı olduğundan en stabil yöntem: realmd + sssd.

A) Ön koşullar (DC tarafı)

  • DC DNS çalışıyor olmalı (Pardus DC IP’si istemcide DNS olacak)

  • Saat farkı max birkaç dakika (NTP şart)

B) ETAP 23 (İstemci) Join Adımları

1) DNS’i DC’ye ver

/etc/resolv.conf (NetworkManager varsa bağlantı ayarından da verilebilir):

search tsomtal.com nameserver 192.168.16.253

2) Paketler

sudo apt update sudo apt install realmd sssd sssd-tools libnss-sss libpam-sss adcli oddjob oddjob-mkhomedir krb5-user samba-common-bin packagekit -y

3) Domain keşfi

realm discover tsomtal.com

4) Domain’e katıl

sudo realm join -U Administrator tsomtal.com

5) Kontrol

realm list id "TSOMTAL\\kullaniciadi" getent passwd "kullaniciadi@tsomtal.com"

6) İlk girişte home dizini otomatik oluşsun

sudo pam-auth-update --enable mkhomedir

(veya)

sudo systemctl enable --now oddjobd sudo authselect enable-feature with-mkhomedir 2>/dev/null || true

C) ETAP 23 Tahta Kullanımı için Pratik Ayarlar

“Sadece belirli grup login olsun”

/etc/sssd/sssd.conf içine (domain bölümüne):

access_provider = simple simple_allow_groups = GG_OGRETMEN,GG_IDARE,GG_ETAP23_TAHTA

Sonra:

sudo chmod 600 /etc/sssd/sssd.conf sudo systemctl restart sssd

Paylaşım mount (öğretmen ortak / sınıf paylaşımı)

Örnek: //dc/paylasim/ogretmen

sudo apt install cifs-utils -y sudo mkdir -p /mnt/ogretmen

/etc/fstab örneği:

//dc.tsomtal.com/ogretmen /mnt/ogretmen cifs vers=3.0,sec=krb5,cruid=0,uid=0,gid=0,iocharset=utf8,nofail 0 0

ETAP 23’te “oturum kapanınca kopma” sorunlarını önlemek için systemd automount da kurabiliriz (tahta senaryolarında daha stabil).


Sıradaki en doğru adım

Tamamdır: Domain = tsomtal.com, Pardus DC IP = 192.168.16.253, ETAP 23 giriş = öğretmen hesabı.

Aşağıya “tek seferde çalıştır” mantığında 3 parçayı hazır veriyorum:

  1. Windows DC export (OU + kullanıcı + grup + üyelik)

  2. Pardus DC import + TSOMTAL OU/Grup şeması

  3. ETAP 23 istemci join + sadece öğretmen girişi + home + (opsiyonel) paylaşım

⚠️ Not (çok önemli): Windows’taki mevcut şifreler birebir taşınmaz. Import’ta herkese geçici şifre veriyoruz; öğretmenler ilk girişte değiştirir.


1) Windows DC’de Export (PowerShell) — C:\AD_MIG\export-ad.ps1

PowerShell (Admin) aç → çalıştır:

Import-Module ActiveDirectory $Out="C:\AD_MIG" New-Item -ItemType Directory -Force $Out | Out-Null # OU Get-ADOrganizationalUnit -Filter * | Select Name,DistinguishedName | Export-Csv "$Out\ou.csv" -NoTypeInformation -Encoding UTF8 # Users Get-ADUser -Filter * -Properties DisplayName,Mail,Department,Title,Description,Enabled | Select SamAccountName,UserPrincipalName,Name,DisplayName,Mail,Department,Title,Description,Enabled | Export-Csv "$Out\users.csv" -NoTypeInformation -Encoding UTF8 # Groups Get-ADGroup -Filter * -Properties GroupScope,GroupCategory,Description | Select Name,SamAccountName,GroupScope,GroupCategory,Description,DistinguishedName | Export-Csv "$Out\groups.csv" -NoTypeInformation -Encoding UTF8 # Group Members (recursive) $rows=@() Get-ADGroup -Filter * | ForEach-Object { $g=$_ Get-ADGroupMember -Identity $g.DistinguishedName -Recursive | ForEach-Object { if($_.objectClass -eq "user"){ $rows += [PSCustomObject]@{ GroupSam=$g.SamAccountName; MemberSam=$_.SamAccountName } } } } $rows | Export-Csv "$Out\group_members.csv" -NoTypeInformation -Encoding UTF8 Write-Host "Bitti: $Out"

Çıkan C:\AD_MIG klasörünü USB ile Pardus DC’ye kopyalayın: /root/ad_mig/


2) Pardus DC’de TSOMTAL OU+Grup Şeması + Import (Tek Script)

/root/ad_mig/migrate.sh oluşturun:

#!/usr/bin/env bash set -euo pipefail BASE="/root/ad_mig" OUCSV="$BASE/ou.csv" USCSV="$BASE/users.csv" GRCSV="$BASE/groups.csv" MEMCSV="$BASE/group_members.csv" # Domain sabitleriniz: DOMAIN_FQDN="tsomtal.com" REALM_UPPER="TSOMTAL.COM" NETBIOS="TSOMTAL" DC_IP="192.168.16.253" SAMBA_ADMIN="Administrator" # Import geçici şifre TEMP_PASS="Temp123!Temp123!" echo "==[0] Kontrol==" command -v samba-tool >/dev/null test -f "$OUCSV" && test -f "$USCSV" && test -f "$GRCSV" && test -f "$MEMCSV" echo "==[1] TSOMTAL OU şeması oluşturuluyor==" # OU hiyerarşisi declare -a OUS=( "OU=TSOMTAL,DC=tsomtal,DC=com" "OU=KULLANICILAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=OGRETMENLER,OU=KULLANICILAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=OGRENCILER,OU=KULLANICILAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=9,OU=OGRENCILER,OU=KULLANICILAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=10,OU=OGRENCILER,OU=KULLANICILAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=11,OU=OGRENCILER,OU=KULLANICILAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=12,OU=OGRENCILER,OU=KULLANICILAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=PERSONEL,OU=KULLANICILAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=BILGISAYARLAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=LAB,OU=BILGISAYARLAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=OFIS,OU=BILGISAYARLAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=ETAP23_TAHTA,OU=BILGISAYARLAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=GRUPLAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=ROL,OU=GRUPLAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=SINIF,OU=GRUPLAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=KULUP_PROJE,OU=GRUPLAR,OU=TSOMTAL,DC=tsomtal,DC=com" "OU=SERVIS_HESAPLARI,OU=TSOMTAL,DC=tsomtal,DC=com" ) for dn in "${OUS[@]}"; do samba-tool ou create "$dn" -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true done echo "==[2] TSOMTAL rol grupları (önerilen standart)==" declare -a CORE_GROUPS=( "GG_OGRETMEN" "GG_OGRENCI" "GG_IDARE" "GG_BTOGRET" "GG_ETAP23_TAHTA" "FS_OGRETMEN_OKUMA" "FS_OGRETMEN_YAZMA" "FS_OGRENCI_HOME" ) for g in "${CORE_GROUPS[@]}"; do samba-tool group add "$g" -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true done echo "==[3] Windows’tan gelen OU import (varsa ek OU’lar)==" python3 - <<'PY' import csv path="/root/ad_mig/ou.csv" ous=set() with open(path, newline='', encoding='utf-8') as f: r=csv.DictReader(f) for row in r: dn=row["DistinguishedName"] if "OU=" in dn: ous.add(dn.strip()) for dn in sorted(ous, key=lambda x: x.upper().count("OU=")): print(dn) PY | while read -r ou_dn; do samba-tool ou create "$ou_dn" -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true done echo "==[4] Windows’tan gelen gruplar==" python3 - <<'PY' import csv path="/root/ad_mig/groups.csv" with open(path, newline='', encoding='utf-8') as f: r=csv.DictReader(f) for row in r: sam=(row.get("SamAccountName") or "").strip() name=(row.get("Name") or "").strip() g=sam or name if g: print(g) PY | while read -r g; do samba-tool group add "$g" -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true done echo "==[5] Kullanıcılar (geçici şifre ile)==" python3 - <<'PY' import csv path="/root/ad_mig/users.csv" skip={"administrator","krbtgt","guest"} with open(path, newline='', encoding='utf-8') as f: r=csv.DictReader(f) for row in r: sam=(row.get("SamAccountName") or "").strip() if not sam or sam.lower() in skip: continue display=(row.get("DisplayName") or row.get("Name") or sam).strip() mail=(row.get("Mail") or "").strip() enabled=(row.get("Enabled") or "True").strip().lower() in ("true","1","yes") print(f"{sam}\t{display}\t{mail}\t{1 if enabled else 0}") PY | while IFS=$'\t' read -r sam display mail enabled; do samba-tool user create "$sam" "$TEMP_PASS" -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true [ -n "$mail" ] && samba-tool user setemail "$sam" "$mail" -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true if [ "$enabled" = "0" ]; then samba-tool user disable "$sam" -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true fi done echo "==[6] Grup üyelikleri==" python3 - <<'PY' import csv path="/root/ad_mig/group_members.csv" with open(path, newline='', encoding='utf-8') as f: r=csv.DictReader(f) for row in r: g=(row.get("GroupSam") or "").strip() m=(row.get("MemberSam") or "").strip() if g and m: print(f"{g}\t{m}") PY | while IFS=$'\t' read -r g m; do samba-tool group addmembers "$g" "$m" -U"${SAMBA_ADMIN}%${TEMP_PASS}" 2>/dev/null || true done echo "==[7] Öğretmen hesabı ile ETAP kullanımına hazır politika grubu==" # Tüm öğretmenleri GG_OGRETMEN grubuna toplamak için: # (İsterseniz departman veya OU’ya göre filtreleyip ekleriz. Şimdilik manuel/CSV bazlı bıraktım.) echo "Tamamlandı." echo "Not: Kullanıcılar geçici şifre ile oluşturuldu: $TEMP_PASS"

Çalıştır:

chmod +x /root/ad_mig/migrate.sh /root/ad_mig/migrate.sh

✅ Bu script: TSOMTAL OU şemasını kurar, sonra Windows’tan gelen OU/grup/kullanıcı/üyelikleri içe alır.


3) ETAP 23 Domain Entegrasyonu (Öğretmen Hesabı ile) — “tek komut”

ETAP 23’te sudo ile:

A) Join Script — /root/etap-join.sh

#!/usr/bin/env bash set -euo pipefail DOMAIN="tsomtal.com" DC_IP="192.168.16.253" ALLOW_GROUPS="GG_OGRETMEN,GG_IDARE,GG_BTOGRET" # sadece öğretmen+idare+BT echo "== DNS ayarla ==" # NetworkManager varsa kalıcı ayar için bağlantı profiline DNS verin. # Şimdilik hızlı çözüm: sudo bash -c "cat > /etc/resolv.conf" <<EOF search ${DOMAIN} nameserver ${DC_IP} EOF echo "== Paketler ==" sudo apt update sudo apt install -y realmd sssd sssd-tools libnss-sss libpam-sss adcli oddjob oddjob-mkhomedir krb5-user samba-common-bin packagekit echo "== Domain keşfi ==" realm discover "${DOMAIN}" echo "== Domain join (Administrator soracak) ==" sudo realm join -U Administrator "${DOMAIN}" echo "== mkhomedir aktif ==" sudo pam-auth-update --enable mkhomedir || true sudo systemctl enable --now oddjobd || true echo "== SSSD erişim kısıtı: sadece öğretmen grupları login olsun ==" SSSD="/etc/sssd/sssd.conf" sudo sed -i 's/^use_fully_qualified_names.*/use_fully_qualified_names = False/g' "$SSSD" 2>/dev/null || true # domain bölümüne ekle (yoksa oluştur) if ! grep -q "^access_provider" "$SSSD"; then sudo bash -c "cat >> $SSSD" <<EOF access_provider = simple simple_allow_groups = ${ALLOW_GROUPS} EOF else sudo sed -i 's/^access_provider.*/access_provider = simple/g' "$SSSD" if grep -q "^simple_allow_groups" "$SSSD"; then sudo sed -i "s/^simple_allow_groups.*/simple_allow_groups = ${ALLOW_GROUPS}/g" "$SSSD" else sudo bash -c "echo 'simple_allow_groups = ${ALLOW_GROUPS}' >> $SSSD" fi fi sudo chmod 600 /etc/sssd/sssd.conf sudo systemctl restart sssd echo "== Test komutları ==" echo "realm list" echo "id TSOMTAL\\\\ogretmenkullanici" echo "Bitti."

Çalıştır:

chmod +x /root/etap-join.sh /root/etap-join.sh

✅ Sonuç:

  • ETAP 23 domain’e girer

  • Sadece öğretmen/idare/BT grupları oturum açabilir

  • Öğretmen ilk girişte home dizini otomatik oluşur


Bonus: Öğretmen Paylaşımı Örnek paylaşım: \\dc.tsomtal.com\ogretmen

Buna “oturum açınca otomatik bağlansın” için systemd automount ile en stabil yöntemi kurarız (tahtalarda kopma daha az olur).

Yorumlar

Bu blogdaki popüler yayınlar

Android Telefon/Tablet Ekranını Pardus ETAP 23 Yüklü Akıllı Tahtaya Yansıtma

Pardus Etap 23’de Unutulmuş Etap Yetkili Parolasını Sıfırlama

Pardus Başlangıç Onarma