07 Juni 2009

Generate otomatis Logon script di Samba

Sebenernya idenya udah dari tahun lalu pengen bikinnya. Tapi karena melihat keadaan user sini yang nggak terlalu komplek waktu itu, cukup bikin 1 departemen 1 macem logon script saja. Dan MIS udah terbiasa dengan hal ini. Maklum, mereka baru kenal Linux. Banyak nggak taunya kalo sebenernya server Linux bisa di customize untuk kebutuhan macem-macem. Dan kali ini loe akan liat hasilnya ;-)

Setelah baca artikel Vavai (link), baru inget lagi. Dan tepat juga dengan keluhan beberapa bos sini. Mereka pengen akses di banyak departemen folder. Maunya semuanya langsung muncul seperti Linux user. Well ... Ubuntu (Gnome) client di sini menikmati logon script juga loh :-D Sekali login ke Gnome, semua folder di server NFS langsung terbookmark otomatis. Baca deh artikel gue tentang ini (link).

Karena mulai banyak user yang maunya akses beberapa folder departemen laen, mau nggak mau harus cari solusi. Setelah baca-baca "samba-doc" muncul ide juga. Sayangnya contoh logon script yang di generate pake Python dan Perl. Dan gue nggak ngerti tuh ke 2 bahasa itu. OK, no problem deh. Pake scripting yang laen juga bisa di Linux. Karena dikit-dikit tahu tentang Bash, akhirnya gue pilih Bash script saja. Dan berhasil :-D

Kondisi sharing di server (Samba)

Setiap user disini, akan langsung menikmati folder-foldernya di server:
  1. Personal (masing-masing username dapat folder sendiri)
    Default Samba pake nama [home], tapi sengaja gue ganti nama sharenya.
  2. Department (semua user di departemen yang bisa akses)
  3. Public (Semua user bisa baca, hanya perdepartemen yang bisa baca/tulis)
  4. Software (software for Linux/Windows untuk kebutuhan MIS support ke client)
  5. Temp (Temporary folder)
Untuk No.1,3,4,5 setiap user akan menikmati mapping folder ini. Kendala munculnya di no.2 di atas. Ada user yang maunya akses folder ke 3 departemen. Padahal logon scriptnya udah kita set ke default department. Mau nggak mau, MIS akan mount manual di Windows. Dan ini akan jadi masalah, saat user pake komputer laen departemen selain default nggak muncul lagi.

Pake logika yang sama seperti bikin script untuk Gnome, disini ada perbedaan cara kerja. Windows client memiliki fasilitas logon script saat udah join ke Windows/Samba server. Jadi tanpa perlu nambah apa-apa di client. Murni generate script dan deteksi group semuanya dilakukan di server Linux/Samba. Sama skali tanpa perlu nambah software di client.

Bandingkan dengan Ubuntu/Gnome client di artkel sebelumnya (link). Script emang ada di NFS server. Tapi setiap user login via GDM, script di server tersebut harus di load. Jadi autostart programnya akan bermanfaat disini. Cukup buat 1 shortcut yang sangat simple dan copy ke semua client Ubuntu. Siapapun yang login ke Ubuntu client, shortcut itu akan meload script di NFS server dan langsung folder di NFS akan terbookmarks di File Browser (Nautilus). Solusi beres. Baca artikel di link atas selengkapnya.

Konfigurasi Samba

Ini konfigurasi di Samba server. Terutama bagian yang berkaitan dengan netlogon saja yah:

[global]
logon script = %U.bat

[netlogon]
path = /samba/netlogon
writeable = no
guest ok = no
root preexec = /usr/local/bin/genlogonscript.sh %U
root postexec = rm -f /samba/netlogon/%U.bat


Dan ini adalah script bash untuk mengenerate logon scriptnya. Yang harus di simpan ke /usr/local/bin/genlogonscript.sh dan buat jadi executable. Kalo ragu copy paste, bisa ambil salinan script ini di dropbox gue (link).

#!/bin/bash
# Logon script generator using Bash
# created by Lutfi <lutfi.arab@gmail.com> @2009
#
# Requirement software:
# - tofrodos
#
# Limitation:
# - ldap group have to same with department folder
# - mapping drive from drive L until drive Y
#
# define your server here

servername=SAMBASVR
logonscriptdir=/samba/netlogon
logonscript=$logonscriptdir/$1.bat
user=$1

# starting to generate logon script
# set time on client
echo "NET TIME \\\\$servername /SET /YES" > $logonscript

# delete old mapping
drive=( J K L M N O P Q R S T U V W X Y )
for (( i=0; i<${#drive[@]}; i++ )); do
echo "NET USE /DEL ${drive[$i]}:" >> $logonscript
done

# map personal folder
# default samba using \\<samba-server>\<username>
echo "NET USE J: \\\\$servername\\PERSONAL" >> $logonscript

# map public folder
echo "NET USE K: \\\\$servername\\PUBLIC" >> $logonscript

# map department folder
drive=( L M N O P Q R S T U V W )
let driveno=-1

for i in `/usr/bin/groups $user` ;
do
for j in `/bin/ls /samba/department/` ;
do
if [ $i == $j ] ; then
let driveno++ ;
echo "NET USE ${drive[$driveno]}: \\\\$servername\\$i" >> $logonscript ;
fi ;
done ;
done

# map software folder
echo "NET USE X: \\\\$servername\\SOFTWARE" >> $logonscript

# map temp folder
echo "NET USE Y: \\\\$servername\\TEMP" >> $logonscript

# add space here
echo >> $logonscript

# convert text to dos format
cd $logonscriptdir
/usr/bin/unix2dos $logonscript
/bin/chmod 644 $logonscript

#finishing
exit

Contoh hasil generate

Misal generate logon script untuk gue, bisa di cek dulu gue masuk groups apa nih? Oya, gue pake sambldap-tools. Jadi groups udah ada di LDAP dan udah terintegrasi dengan sistem. Tapi kalopun nggak pake LDAP server (murni samba), script ini tetep bisa. Karena deteksi groups gunakan sistem Linux. Misal nih gue masuk groups apa aja:

root@sambasvr:~# su lutfi
lutfi@sambasvr:/root$ groups
Domain Users Domain Admins Administrators mis management

Jadi gue masuk di groups (department): "mis" dan "management". Dan ke dua groups ini punya folder di /samba/department. Group yang laen (Domain Users, Domain Admins dan Administrators) adalah default groups dari Samba. Yang mana nggak ada foldernya. Jadi ini akan diabaikan. Jadi untuk yang ini, jangan punya folder department bernama: Domain, Admins, Administrators dan Users. Inget yah!

Berikut contoh hasil script yang di generate:

root@sambasvr:/samba/netlogon# cat lutfi.bat
NET TIME \\SAMBASVR /SET /YES
NET USE /DEL J:
NET USE /DEL K:
NET USE /DEL L:
NET USE /DEL M:
NET USE /DEL N:
NET USE /DEL O:
NET USE /DEL P:
NET USE /DEL Q:
NET USE /DEL R:
NET USE /DEL S:
NET USE /DEL T:
NET USE /DEL U:
NET USE /DEL V:
NET USE /DEL W:
NET USE /DEL X:
NET USE /DEL Y:
NET USE J: \\SAMBASVR\PERSONAL
NET USE K: \\SAMBASVR\PUBLIC
NET USE L: \\SAMBASVR\mis
NET USE M: \\SAMBASVR\management
NET USE X: \\SAMBASVR\SOFTWARE
NET USE Y: \\SAMBASVR\TEMP

Laen-laen

Script ini akan gunakan drive mapping mulai drive J sampe drive Y. Jadi kalo butuh manually mount, sebaiknya jangan gunakan drive itu. Karena setiap login akan di diskonek dan di bikin drive mapping baru.

See pren, dengan Linux semua jadi bisa kan;-)

4 komentar:

Anonim mengatakan...

boss. . . itu kliennya pake windows or linux??? c ak jg mengalami problem yg sama. . . jd aku pake samba PDC n klien windows xp n vista, gmn carany untuk automap per user??? pleaseee. . . jawabannya kirim ke emilq ni: mas_sugiyanto@yahoo.co.id

Lutfi mengatakan...

Ini clientnya tentu saja Windows lah. Logon script kan hanya untuk Windows client.

Untuk client Linux (Gnome) coba gunakan ini sbg penggantinya yg fungsinya spt logon script:
http://rippingthepenguin.blogspot.com/2009/03/pengganti-logon-script-di-ubuntu-linux.html

dudi mengatakan...

lutfi thanks...

script ini menginspirasi saya untuk sedikit bikin perubahan.

hasilnya bisa di lihat di http://dgk.or.id/misc/loginscript.txt

btw, pake logon script (dan tentunya dengan bantuan root preexec)ini juga semua awal konfigurasi untuk user bisa juga di set dari sini.

dudi mengatakan...

ups sori. ada kesalahan url.

seharusnya: http://dgk.or.id/misc/logonscript.txt