Windows Active Directory (AD) ortamından Organizational Unit (OU), Kullanıcı ve Grup nesnelerini dışa aktarma
- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
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ılar | CSV (PowerShell) |
| Gruplar | CSV |
| Grup üyelikleri | CSV |
| 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:
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
-
realmdveyawinbindile bağlanır -
LiderAhenk sorunsuz çalışır
6️⃣ WINDOWS DC KAPATMA (SON ADIM)
-
FSMO rolleri Pardus’ta mı?
samba-tool fsmo show
-
Windows DC:
dcpromo /forceremoval
-
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
-
Windows DC’de C:\AD_MIG klasörü oluştur.
-
Aşağıdaki scripti
C:\AD_MIG\export-ad.ps1olarak 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%TempPasskullanı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:
-
Windows DC export (OU + kullanıcı + grup + üyelik)
-
Pardus DC import + TSOMTAL OU/Grup şeması
-
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