[email protected]
dd if=/dev/hda8 of=/etc/dosswap
gzip -9 /etc/dosswap
mkswap /dev/hda8 XXXXX
swapon -av
Jangan lupa menambahkan masukan untuk partisi swap di berkas /etc/fstab Anda.
swapoff -av
zcat /etc/dosswap.gz | dd of=/dev/hda8 bs=1k count=100
# Harap diingat bahwa ini hanya akan menulis 100 block pertama kembali ke
partisi. Dari pengalaman, penulis berpendapat bahwa ini sudah cukup.
>> Apa saja pro dan kontra dari hal ini?
Pro: Anda dapat menghemat sejumlah tempat di disk.
Cons: Jika langkah ke-5 tidak berlangsung otomatis, Anda harus ingat untuk melakukannya secara manual, dan ini akan memperlambat proses boot sebanyak beberapa nano-detik :-)
[email protected]
Ini adalah trik yang sudah penulis gunakan beberapa kali.
Undelete berkas teks untuk orang yang sudah putus asa.
Jika Anda secara tidak sengaja menghapus sebuah berkas teks, misalnya email, atau hasil pemrograman di larut malam, masih ada kemungkinan bahwa semuanya tidak hilang. Jika berkas pernah disimpan di disk selama lebih dari 30 detik, isinya mungkin masih ada di partisi.
Anda bisa menggunakan utilitas grep untuk mencari isi berkas di partisi disk secara langsung (raw).
Sebagai contoh, baru-baru ini penulis menghapus sebuah email secara tidak sengaja. Jadi penulis berhenti dari semua aktivitas yang bisa mengakibatkan berubahnya partisi: dalam hal ini penulis hanya menunda penyimpanan berkas atau menunda melakukan compile, dsb. Pada kejadian lain, penulis pernah terbawa kesulitan hingga harus berpindah ke mode single user, dan meng-unmount filesystem.
Kemudian penulis menggunakan perintah egrep terhadap partisi disk tersebut: dalam hal ini, emailnya terletak di /usr/local/home/michael/, jadi dari keluaran df, penulis bisa melihat bahwa ini sebenarnya di /dev/hdb5
sputnik3:~ % df
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/hda3 18621 9759 7901 55% /
/dev/hdb3 308852 258443 34458 88% /usr
/dev/hdb5 466896 407062 35720 92% /usr/local
sputnik3:~ % su
Password:
[michael@sputnik3 michael]# egrep -50 'ftp.+COL' /dev/hdb5 > /tmp/x
Sekarang, penulis sangat berhati-hati ketika bermain-main dengan partisi disk,
sehingga penulis berhenti sejenak supaya yakin bahwa penulis mengerti arti
sintaksis dari perintah yang akan dimasukkan SEBELUM menekan return/enter.
Dalam hal ini email tersebut mengandung kata 'ftp' yang diikuti dengan
teks tertentu yang diikuti dengan kata 'COL'. Email tersebut kira-kira
panjangnya 20 baris, jadi penulis menggunakan -50 untuk mencakup frase
tersebut. Di masa lampau penulis menggunakan -3000 untuk mencakup sebuah
frase dari sebuah kode (source code). Penulis mengarahkan keluaran dari
egrep ke partisi disk yang lain, hal ini mencegah terjadinya penimpaan
atas email yang dicari tersebut.
Penulis kemudian menggunakan strings untuk membantu mengamati keluaran tersebut:
strings /tmp/x | less
Dan ternyata email tersebut ada di sana.
Metoda ini tidak bisa diandalkan sepenuhnya, karena ada kemungkinan semua atau sebagian dari disk space tersebut telah digunakan kembali.
Trik ini mungkin hanya berguna untuk sistem single user. Pada sistem multi-user dengan aktivitas disk yang sangat tinggi, space yang dibebaskan (karena proses penghapusan) mungkin telah digunakan kembali untuk yang lain. Dan kita tidak bisa seenaknya mengambil alih komputer dari pengguna-pengguna yang lain ketika kita butuh untuk mengambil kembali berkas yang terhapus.
Di sistem di rumah penulis trik ini sudah digunakan kira-kira tiga kali dalam beberapa tahun terakhir - biasanya ketika penulis menghapus hasil kerja hari tersebut. Jika apa yang penulis kerjakan sampai pada suatu titik di mana penulis merasa bahwa sudah ada cukup kemajuan, pekerjaan itu akan di-backup ke floppy, jadi penulis jarang menggunakan trik ini.
[email protected]
Penggunaan 'Immutable Flag'
Setelah Anda memasang dan mengkonfigurasi sistem Anda, jelajahilah /bin, /sbin/, /usr/bin, /usr/sbin dan /usr/lib (dan juga beberapa lagi yang bisa dicurigai) kemudian pergunakan 'chattr +i command' seperlunya. Juga tambahkan ke berkas-berkas kernel di root. Sekarang 'mkdir /etc/.dist/' salinlah semua dari /etc/, termasuk sub-subdirektorinya (Penulis menggunakan 2 langkah, menggunakan /tmp/etcdist.tar untuk menghindari recursion). (Kalau Anda mau, bisa juga membuat /etc/.dist.tar.gz) -- dan tandailah sebagai immutable.
Latar belakang dari semua ini ialah untuk membatasi kerusakan yang bisa terjadi ketika login sebagai root. Anda tidak akan menimpa berkas-berkas dengan operator redirection yang salah, dan Anda tidak akan membuat sistem tidak bisa terpakai gara-gara penggunaan sebuah spasi yang salah dalam perintah 'rm -fr' (Masih banyak kemungkinan Anda bisa melakukan kerusakan pada data Anda -- tetapi berkas-berkas lib dan bin akan menjadi lebih aman).
Hal ini juga akan membuat sejumlah eksploitasi atas security dan 'denial of service' menjadi tidak mungkin atau lebih sukar (dikarenakan kebanyakan dari eksploitasi tersebut mengandalkan penimpaan berkas melalui tindakan-tindakan dari program-program SUID yang *tidak mendukung perintah shell sembarang*).
Satu-satunya ketidakpraktisan dari hal ini ialah ketika membangun dan melakukan 'make install' terhadap bermacam jenis berkas biner sistem. Di lain pihak, hal ini juga mencegah 'make install' dari penimpaan berkas-berkas. Jika Anda lupa membaca Makefile dan 'chattr -i' terhadap berkas-berkas yang akan ditimpa (dan direktori di mana Anda akan menambahkan berkas-berkas) -- program 'make' akan gagal, Anda tinggal menggunakan perintah chattr dan menjalankan ulang. Anda juga bisa menggunakan kesempatan itu untuk memindahkan berkas-berkas bin atau lib yg lama atau apa saja yg lain ke sebuah direktori .old/ atau mengubah nama direktorinya, melakukan 'tar' atau terserah Anda.
[email protected]
Semua barang baru dimulai di bawah /usr/local! atau /usr/local/`hostname`
Jika distribusi Anda adalah yang /usr/local -nya kosong, maka Anda tinggal membuat /usr/local/src, /usr/local/bin dst dan menggunakannya. Jika distribusi Anda meletakkan berkas-berkas di /usr/local maka Anda mungkin bisa melakukan 'mkdir /usr/local/`hostname`' dan memberikan group 'wheel' +w (Penulis juga membuatnya SUID dan SGID untuk menjamin bahwa masing-masing anggota dari group 'wheel' hanya bisa mengacak-acak berkas mereka sendiri di sana, dan bahwa semua berkas yang dibuat akan menjadi milik group 'wheel').
Sekarang, biasakan diri Anda sendiri untuk *SELALU! SELALU! SELALU!* meletakkan paket-paket baru di bawah /usr/local/src/.from/$DARI_MANA_SAYA_DAPAT/ (untuk berkas .tar atau apa pun akhirannya) dan compile-lah di bawah /usr/local/src (atau .../$HOSTNAME/src). Yakinkan bahwa itu bisa di-install di bawah hirarki lokal. Jika paket tsb. *benar-benar harus* di-install kembali ke /bin atau /usr/bin atau di tempat lainnya -- berikan symbolic link dari hirarki lokal ke masing-masing elemen di tempat lainnya.
Alasan dari hal ini ialah -- walaupun berarti menambah pekerjaan -- hal ini bisa membantu mengisolir apa yang harus di backup dan di- restore atau di-reinstall dalam rangka re-install secara penuh dari media distribusi (sekarang ini biasanya CD). Dengan menggunakan direktori /usr/local/.from Anda juga menyimpan sebuah log informal mengenai asal sumber -- yang akan membantu jika Anda mencari update -- dan mungkin masalah ini menjadi kritis jika memonitor mailing list security announcement.
Salah satu dari sistem di rumah penulis dipasang sebelum penulis membuat aturan-aturan ini untuk penulis sendiri. Penulis masih belum tahu semua cara-cara yang berbeda untuk masing-masing sistem yang terpasang. Hal ini dikarenakan penulis sangat sedikit melakukan konfigurasi dengan sistem di rumahnya dan penulis satu-satunya orang yang menggunakannya.
Sistem-sistem yang penulis pasang di tempat kerja (ketika penulis menjadi system administrator di sana) semua dipasang dengan cara ini -- dan sudah diadministrasi oleh beberapa kontraktor dan orang-orang MIS lain, dan telah mengalami sejumlah besar upgrade dan pemasangan paket-paket baru. Walaupun demikian, penulis masih tahu dengan tepat, elemen-elemen mana saja yang dipasang *setelah* pemasangan dan konfigurasi pertama kali.
[email protected]
Penulis memperhatikan adanya beberapa prosedur yang sulit dan tidak perlu dianjurkan di bagian 2c tips dari Edisi 12. Karena ada lebih dari satu, maka penulis mengirimkannya sbb:
#!/bin/sh
# lowerit
# convert all file names in the current directory to lower case
# only operates on plain files--does not change the name of directories
# will ask for verification before overwriting an existing file
for x in `ls`
do
if [ ! -f $x ]; then
continue
fi
lc=`echo $x | tr '[A-Z]' '[a-z]'`
if [ $lc != $x ]; then
mv -i $x $lc
fi
done
Wow, betapa panjangnya. Penulis tidak akan menggunakan script untuk
melakukannya; sebaliknya, penulis akan menggunakan perintah:
for i in * ; do [ -f $i ] && mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`;
done;
di command line.
Orang yang menyumbangkan script tsb. berkata bahwa dia menulis script tsb. supaya lebih mudah dimengerti (lihat di bawah).
Di petunjuk berikut, mengenai penambahan dan pneghapusan user, Geoff melakukan hal yang benar hingga langkah terakhir. Reboot? Wow, penulis berharap dia tidak melakukan reboot setiap kali menghapus user. Yang harus Anda lakukan hanyalah dua langkah pertama saja. Lagipula, proses apa yang sedang berlangsung yang dimiliki oleh si user? IRC bot? Proses tersebut bisa dibunuh secara singkat dengan:
kill -9 `ps -aux |grep ^<username> |tr -s " " |cut -d " " -f2`
Contoh, jika username adalah foo:
kill -9 `ps -aux |grep ^foo |tr -s " " |cut -d " " -f2`
Hal itu sudah teratasi, sekarang beralih ke root password yang terlupakan.
Solusi yang diberikan di majalah Gazette adalah yang paling universal, tetapi bukan yang paling mudah. Dengan adanya LILO dan loadlin secara bersamaan, seseorang mungkin menge-boot dengan memberi parameter "single" untuk boot langsung ke shell default tanpa login ataupun tampilan password. Dari sana, dia bisa menghilangkan atau mengubah password sebelum mengetikkan ``init 3`` untuk pindah ke mode multi-user. Jumlah reboot: 1
Dengan cara yang lain, jumlah reboot: 2
Justin Dossey
[email protected]
Buatlah sebuah /README.`hostname` dan/atau sebuah /etc/README.`hostname`, yang kemudian dipelihara. [Atau mungkin /usr/local/etc/README.`hostname`]
Kemudian, sejak *hari pertama* mengadministrasi sebuah sistem catatlah di sebuah berkas log online. Anda bisa saja membuat baris 'vi /README.$(hostname)' di /bash_logout milik root. Cara lain untuk melakukan ini ialah menulis sebuah script su atau sudo yang isinya kira-kira:
function exit \
{ unset exit; exit; \
cat ~/tmp/session.$(date +%y%m%d) \
>> /README.$(hostname) && \
vi /README.$(hostname)
}
script -a ~/tmp/session.$(date +%y%m%d)
/bin/su.org -
(gunakan perintah typescript untuk membuat log dari sebuah sessiondan buat sebuah fungsi untuk mengotomatisasi penambahan dan update dari log).
Penulis mengakui bahwa penulis belum mengimplementasikan otomatisasi dari aturan -- sejauh ini penulis hanya mengandalkan dari disiplin diri sendiri. Bagaimanapun penulis telah bermain-main dengan ide tsb. (bahkan hingga membuat prototipe dari script dan fungsi-fungsi shell tsb. di atas). Satu hal yang membuat penulis urung ialah perintah 'script' itu sendiri. Penulis berpendapat bahwa beliau harus mendapatkan sumber-sumbernya dan menambahkan beberapa command line parameters (untuk memberhentikan (stop/pause) script merekam dari command line) sebelum penulis berkomitmen untuk menggunakannya.
Saran terakhir penulis (untuk bagian ini):
PATH dari root seharusnya berisi 'PATH= /bin'
Itu saja. Tidak ada lagi yang lainnya. Semua yang dilakukan oleh root: (1) disediakan melalui symbolic link dari /bin atau dengan alias atau fungsi shell, atau (2) adalah script atau berkas biner di /bin, atau (3) diketik secara langsung dengan menyertakan path secara eksplisit.
Hal ini membuat seseorang yang bertindak sebagai root menyadari (terkadang menyakitkan) tentang bagaimana dia mempercayai berkas-berkas biner. Administrator yang bijak dari sebuah host multi-user akan mengecek secara berkala berkas-berkas /bin dan /.*history untuk mencari pola-pola dan lubang-lubang.
Administrator yang benar-benar termotivasi akan menemukan daerah-daerah yang bisa diotomatisasi, tempat-tempat di mana pengecekan kesehatan sistem bisa dimasukkan, dan pekerjaan- pekerjaan dengan hak/akses 'root' seharusnya dihindarkan sementara (menjalankan penyunting (editor), MTA dan program- program interaktif besar yang lain yang memiliki kelebihan membuat script secara terperinci, yang *mungkin* diikutsertakan di berkas transparan atau berkas data -- seperti ./.exrc dari vi dan ./.emacs dari emacs dan $EXINIT yang lebih membahayakan lagi dan header/footer macros yang diikutsertakan). Biasanya perintah-perintah seperti itu bisa dijalankan dengan:
cp $data $some_users_home/tmp
su -c $origcommand $whatever_switches
cp $some_users_home/tmp $data
(...di mana spesifikasinya tergantung kepada masing-masing perintah).
Kebanyakan bermacam cara pencegahan yang terakhir ini agak berlebihan untuk sistem di rumah atau single-user -- tapi ini adalah aturan yang sangat baik untuk sistem yang multi-user -- terutama sistem yang bisa diakses oleh publik (seperti di netcom).
[email protected]
/usr/bin/X11/xdm
exec /usr/bin/X11/X -indirect hostname
Penulis menambahkan ini karena ketika penulis, sesudah putus asa, mencoba memasangnya untuk subnet penulis di sini, penulis sudah menghabiskan waktu seminggu untuk memcahkan semua persoalannya.
Harap diingat: dengan SLS lama (1.1.1), untuk suatu alasan anda bisa membubuhkan -nodaemon setelah baris xdm -- hal ini TIDAK berlaku untuk rilis setelah itu.