X Server tidak akan menerima permintaan koneksi dari sembarang tempat. Anda tidak menginginkan setiap orang menampilkan windows pada layar Anda. Ataupun membaca setiap yang Anda tulis - perlu diingat bahwa keyboard Anda merupakan bagian dari tampilan!
Terlalu sedikit orang yang menyadari bahwa pemberian akses terhadap tampilan Anda mengandung suatu risiko keamanan. Seseorang yang mampu melakukan akses ke dalam tampilan Anda akan dapat membaca dan menulis ke dalam layar Anda, membaca tulisan Anda, bahkan membaca pergerakan mouse Anda.
Hampir semua server memiliki dua cara untuk melakukan otentikasi terhadap koneksi terhadapnya, yaitu: mekanisma daftar host (xhost
) dan mekanisma cookie ajaib (xauth
). Terdapat pula ssh, yaitu shell yang aman, yang mampu mengarahkan koneksi X.
Xhost memberikan akses berdasarkan nama komputer (host). Server memiliki sebuah daftar berisi setiap host yang diizinkan melakukan koneksi terhadapnya. Xhost dapat pula menon-aktifkan pemeriksaan host secara keseluruhan. Mohon berhati-hati: dengan menon-aktifkan pemeriksaan host berarti pemeriksaan ditiadakan, sehingga setiap host akan dapat melakukan koneksi!
Anda dapat melakukan kontrol terhadap daftar host yang dimiliki server dengan menggunakan program xhost. Untuk menggunakan mekanisme ini pada contoh di atas, lakukan:
light$ xhost +dark.matt.er
Perintah di atas mengizinkan semua koneksi yang berasal dari host dark.matt.er
. Tidak lama sesudah klien X membuat koneksi dan menampilkan sebuah window, untuk kepentingan keamanan, tarik kembali pemberian izin untuk membuat lebih banyak koneksi dengan cara:
light$ xhost -dark.matt.er
Anda dapat menon-aktifkan pemeriksaan host dengan cara:
light$ xhost +
Perintah di atas menon-aktifkan pemeriksaan akses terhadap host sehingga mengizinkan semua orang untuk membuat koneksi. Anda seharusnya tidak melakukan hal ini di dalam suatu jaringan yang Anda sendiri tidak mempercayai semua usernya (seperti pada Internet). Anda dapat mengaktifkan kembali pemeriksaan host dengan cara:
light$ xhost -
xhost -
tidak dapat menghilangkan sendiri semua host dari daftar akses (menjadi sangat tidak bermanfaat - Anda tidak dapat melakukan koneksi tempat manapun, bahkan dari komputer lokal Anda sekalipun).
Xhost merupakan suatu mekanisme yang tidak aman. Dalam hal ini xhost tidak membedakan pemakai yang berbeda di dalam komputer remote. Demikian pula, hostname (yang sesungguhnya merupakan alamat) dapat dipalsukan (spoofing). Keadaan ini sangat buruk jika Anda berada di dalam suatu jaringan yang tidak memiliki jaminan keamanan (misalnya sesudah membuat dialup PPP untuk mengakses Internet).
Xauth memberikan akses kepada setiap orang yang mengetahui rahasia yang dibutuhkan. Rahasia yang dimaksud adalah rekord otorisasi, atau cookie ajaib. Skema otorisasi ini secara formal disebut sebagai MIT-MAGIC-COOKIE-1
.
Semua cookie dari tampilan-tampilan yang berbeda disimpan di dalam file ~/.Xauthority
. File ~/.Xauthority
yang Anda miliki tidak boleh dapat diakses oleh group/pemakai lain manapun. Program xauth mengelola cookie tsb, itulah sebabnya nama kependekan xauth digunakan untuk skema ini.
Pada sessi permulaan, server membaca sebuah cookie dari sebuah file yang ditunjukkan oleh argumen -auth
. Sesudah itu, server tadi hanya mengizinkan koneksi dari klien-klien yang mengetahui cookie yang sama. Jika cookie di dalam file ~/.Xauthority
berubah, server tidak akan menerima perubahan yang terjadi.
Server-server baru dapat menghasilkan langsung cookie pada saat klien-klien memintanya. Semua cookie tetap disimpan di dalam server; Cookie tadi tidak berakhir di dalam ~/.Xauthority
kecuali apabila seorang klien meletakkan ke dalamnya. Seperti yang telah disampaikan oleh David Wiggins:
Perkembangan lanjutan telah ditambahkan ke dalam X11R6.3 yang mungkin akan menarik perhatian Anda. Dengan penambahan SECURITY baru, X Server sendiri sambil berjalan dapat membuat dan mengembalikan cookies baru. Lebih lanjut, cookies tadi dapat ditandai sebagai "tidak dipercaya" sehingga aplikasi-aplikasi yang membuat koneksi menggunakan cookie tadi akan dibatasi operasinya. Misalnya, aplikasi tadi tidak mampu untuk mencuri input keyboard/mouse, atau isi window, dari klien lain yang tidak dipercayai. Sebuah sub-perintah dari xauth yang baru dibuat memungkinkan penggunaan fasilitas ini, jika tidak mudah.
Xauth memiliki suatu kelebihan yang jelas dalam hal keamanan dibandingkan xhost. Anda dapat membatasi akses user-user tertentu ke dalam komputer tertentu. Xauth tidak terancam dengan pemalsuan alamat seperti pada xhost. Dan jika Anda menginginkannya, Anda masih dapat menggunakan xhost bersama-sama dengan xauth untuk memberikan koneksi.
Jika anda ingin menggunakan xauth, Anda harus menjalankan X Server menggunakan argumen -auth authfile. Jika Anda menggunakan script startx, script itu merupakan tempat yang tepat untuk melakukannya. Buatlah rekord otorisasi seperti yang diberikan berikut ini di dalam startx yang Anda miliki.
Merupakan bagian yang diambil dari /usr/X11R6/bin/startx
:
mcookie | sed -e 's/^add :0 . /' | xauth -q xinit -- -auth "$HOME/X.authority"
mcookie
merupakan sebuah program kecil dari paket util-linux, situs utamanya adalah
ftp://ftp.math.uio.no/pub/linux/. Secara alternatif, Anda dapat menggunakan md5sum untuk mengambil beberapa data secara acak (misalnya dari /dev/urandom
atau ps -ax
) dan memasukkannya ke dalam format cookie:
dd if=/dev/urandom count=1|md5sum|sed -e 's/^/add :0 . /'|xauth -q xinit -- -auth "$HOME/.Xauthority"
Jika Anda tidak dapat mengedit script startx (karena Anda bukan root), mintalah administrator sistem Anda untuk melakukan setup terhadap startx sesuai dengan yang diinginkan, atau meminta dia untuk men-setup xdm. Jika dia tidak dapat atau dia tidak mau melakukannya, Anda dapat membuat sebuah script ~/.xserverrc
. Jika Anda memilikinya, script ini dijalankan oleh xinit dan bukan oleh X Server yang sebenarnya. Setelah itu, Anda dapat mulai menjalankan X Server yang sebenarnya dari script ini menggunakan argumen yang tepat. Untuk dapat melakukannya, buatlah agar ~/.xserverrc
Anda menggunakan baris cookie ajaib di atas untuk membuat sebuah cookie lalu mengeksekusi X Server yang sebenarnya:
#!/bin/sh mcookie|sed -e 's/^/add :0 . /'|xauth -q exec /usr/X11R6/bin/X "$@" -auth "$HOME/.Xauthority"
Jika Anda menggunakan xdm untuk mengelola sessi X Anda, Anda dapat menggunakan xauth dengan mudah. Definisikan resource untuk DisplayManager.authDir
di dalam /etc/X11/xdm/xdm-config
. Xdm akan memberikan argumen -auth
tadi ke X Server pada saat mulai dijalankan. Pada saat Anda login sebagai xdm, xdm akan meletakkan cookie di dalam ~/.Xauthority
Anda. Silahkan baca xadm(1) untuk mendapatkan informasi lebih lanjut. Sebagai contoh /etc/X11/xdm/xdm-config
milik penulis memiliki baris berikut:
DisplayManager.authDir: /var/lib/xdm
Sekarang Anda telah menjalankan sessi X di dalam server host light.uni.verse
dan telah memiliki cookie di dalam ~/.Xauthority
, Anda harus mengirimkan cooke tadi ke client host, dark.matt.er
.
Cara termudah adalah ketika direktori-direktori home di dalam komputer light dan dark digunakan secara bersama-sama. File ~/.Xauthority
memiliki isi yang sama, sehingga cookie akan dikirimkan segera. Namun ada suatu kendala: pada saat Anda meletakkan sebuah cookie untuk :0
di dalam ~/.Xauthority
, komputer dark akan mengira bahwa cookie itu disediakan untuknya dan bukan untuk komputer light. Anda harus memberikan hostname secara eksplisit ketika Anda membuat sebuah cookie; Anda tidak dapat mengosongkannya. Anda dapat menginstal cookie yang sama untuk :0
dan light:0
dengan cara:
#!/bin/sh cookie=`mcookie` xauth add :0 . $cookie xauth add "$HOST:0" . $cookie exec /usr/X11R6/bin/X "$@" -auth "$HOME/.Xauthority"
Jika direktori-direktori home tidak dipakai secara bersama-sama, Anda dapat mengirimkan cookie tadi dengan menggunakan rsh, remote shell:
light$ xauth nlist :0 | rsh dark.matt.er xauth nmerge -
~/.Xauthority
(xauth nlist :0
)dark.matt.er
( | rsh dark.matt.er
)~/.Xauthority
(xauth nmerge -
)rsh mungkin tidak berjalan sesuai dengan keinginan Anda. Selain itu, rsh juga memiliki sebuah kelemahan dalam keamanan (pemalsuan hostname, jika ingatan penulis tidak salah). Jika Anda tidak akan atau tidak mau menggunakan rsh, Anda dapat mengirimkan cookie secara manual sbb:
light$ echo $DISPLAY :0 light$ xauth list $DISPLAY light/unix:0 MIT-MAGIC-COOKIE-1 076aaecfd370fd2af6bb9f5550b26926 light$ rlogin dark.matt.er Password: dark% setenv DISPLAY light.uni.verse:0 dark% xauth add $DISPLAY . 076aaecfd370fd2af6bb9f5550b26926 dark% xfig & [15332] dark% logout light$
Silahkan juga baca rsh(1) dan xauth(1) untuk mendapat informasi selanjutnya.
Memasukkan cookie ke dalam variabel-variabel TERM
ataupun DISPLAY
pada saat Anda melakukan telnet ke host remote merupakan suatu hal yang mungkin dilakukan. Cara yang dilakukannya sama dengan cara untuk memasukkan variabel DISPLAY
ke dalam variabel TERM
. Bacalah Bagian 5: Memerintahkan klien. Dalam pandangan penulis Anda harus menghadapi resiko sendiri, namun penulis berminat untuk mengetahui jika ada yang bermaksud memberi konfirmasi ataupun sanggahan.
Sebuah aplikasi di dalam komputer dark.matt.er, seperti xfig di atas, akan secara otomatis memeriksa file /.Xauthority untuk mencari cookie guna melakukan otentikasi bagi dirinya.
Rekord otoritas akan dikirim tanpa menggunakan enkripsi. Jika anda khawatir kalau ada orang yang akan mencium data itu, gunakanlah ssh, secure shell. Ssh akan melakukan pengiriman X melalui koneksi berenkripsi. Disamping itu, ssh juga berguna untuk hal-hal. Ssh merupakan peningkatan struktur yang baik bagi sistem Anda. Kunjungilah homepage ssh di http://www.cs.hut.fi/ssh/.
Siapa yang mengetahui skema otentikasi lainnya untuk melakukan enkripsi koneksi X? Mungkinkan digunakan kerberos?