Saturday, November 13, 2010

disable directory browsing in Apache Web Server

While working on a website I understood that it was a "MUST" security action to disable directory browsing of the files in your website.
Thanks to this post
http://www.felipecruz.com/blog_disable-directory-listing-browsing-apache.php

remove the option "Indexes" from your apache config file and you are good to go.
Please refer the above link for more details.

Saturday, October 23, 2010

print to pdf when not connected to printer

Sometimes we come across a situation where we want to print a confirmation e.g. a train/flight ticket; but don't have a printer directly connected.
At those times we can directly print to a pdf; which we can print later.
cups-pdf is the package that does the trick and in Ubuntu it can be installed by "sudo aptitude install cups-pdf".For other rpm based distributions use "yum install cups-pdf".

More details can be found here :
http://ubuntu-tutorials.com/2008/07/03/printi-directly-to-pdf-in-ubuntu-804/

Sunday, October 17, 2010

shell script timing various commands

The time taken to execute a particular command (e.g. ls -ltr) can be saved to a file.
This can be useful when your shell script takes a lot of time and you want to profile the time taken by various commands.

-----------------------------
#!/bin/bash

"Time taken by ls" 2>> time.txt
{ time {
ls -ltr
} } 2>> time.txt

"Time taken by cat" 2>> time.txt
{ time {
cat test.sh;
} } 2>> time.txt

----------------------------

Saturday, October 9, 2010

vim - work remotely

vim is an editor which I love to work with. I make sure, I am using the latest stable version and also from time to time explore the new features incorporated into it.
I love my customized "vim" so much that I hate to use the basic "vi" installed by default in a new aix/linux machine. Also it is tedious to install vim in those machines; every time I make a new installation on my test machine.

But as always, there is a solution to get past this problem. use "vim" installed in your local system to read/edit files located on a remote server/machine. "vim + ftp" comes to our rescue.
for e.g. if you want to open "/home/sangeek/test.txt" located in server "abc.xx.com" as a "root" user, use this command :
vim ftp://root@abc.xx.com//home/sangeek/test.txt
you will be prompted to provide the password.

Alternately if you already have "vim" open you open the remote file in "command mode" :
:e ftp://root@abc.xx.com//home/sangeek/test.txt

That's it; a local copy of the file is made on your machine. Any edit and save you make using "vim" is also made in the remote server.

Other advantages of using "vim+ftp" to access files over remote server :
1. This is very helpful in case your remote server is very slow to access over network. Since you have a local copy of the same file; you navigation/edit in the file is very fast .. only delay the is when you save the file.
2. You don't have to authenticate for the ftp session if you want to open another file on the same remote server.
3. Best, your local vimrc settings apply to all the files opened remotely.


Thursday, May 13, 2010

strings - smart and useful

Someone gives you up a binary a.out and says he has added some line like this
printf("Hello Universe");
Now the changes may be much bigger then the example. During your testing you do not get the desired result as was expected after his changes.
How do you confirm that he has not misplaced his binaries and handed you a wrong one?
So, if there is a string involved in the change; then you can use the strings command and confirm it.
$ strings a.out | grep Universe
Hello Universe


Better explanation on why to use strings is given here as http://www.oreillynet.com/pub/a/oreilly/linux/news/linuxnut_0800.html

'''

Sometimes you really want to see inside a binary file. Maybe there isn't a manpage and you're looking for usage information, or perhaps you're looking for information about who wrote a program or what application a file is associated with.

The strings command is perfect for that purpose--it searches through a file looking for sequences of printable character strings and writes them to standard output. You can pipe the output through a pager like more, or if you are looking for particular text, you can pipe the output to the grep command.

'''

Thursday, May 6, 2010

perl trace; a very useful debug utility

I was given a perl script and asked to fix the code where a particular option was not behaving as expected. The code was huge.
What's the best/faster way to locate the problem ?

Obviously I had to use a debugger; just like any other programming language perl too has it's own debbuger.
By giving perl the -d switch at command line will invoke the perl debugger.
The best option to understand the code flow and reach to the problematic option is enable trace while debugging.
perl help describes trace like this :
t [expr] Toggle trace [trace expr]

Once you enable trace; all the statements executed along with their line numbers will be displayed on the screen. It is similar to viewing code flow in a shell script by using a "-x" switch.
It is much better than using step/next not knowing where it is leading to and when it will end. So, get an overview of the code flow with t(trace) and make debugging easier.

Wednesday, April 28, 2010

peculiar ssh requirement on AIX

Some days back I had a requirement to invoke scripts from a remote server periodically.
This is a classic requirement where one of the following solutions can be used :
1. rsh (where remote server would have added my user:host to the list of authenticated machines) and my machine can execute any command on the remote-machine bypassing login.
2. expect script using which I could have automated the login into the remote-machine and run the scripts.
3. ssh login without password.

Method 1 and 2 are not secure and 2nd method has the added disadvantage of changing the password in the script every time the login password changes.

So, I decided to use "ssh login". There are some good links over the Internet which provides the steps :
http://linuxproblem.org/art_9.html
http://www.linuxjournal.com/content/save-authentication (this is something which I contributed some time back)

All the steps are fine on AIX; but an added requirement.
The following files/directories should have these permissions for the automatic login to work fine :
chmod go-w ~/;
chmod 700 ~/.ssh;
chmod 600 ~/.ssh/authorized_keys

Hope this saves others the anxious moments I had to go through.