News:

Help! We're trapped in the computer, and the computer is trapped in 2008! Someone call the time police!

Main Menu

Shell scripting

Started by Krazed, August 29, 2007, 10:09:20 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Krazed

I wrote this back in May of '05, and I've recently got back into linux/unix, and figured I'd get back into shell scripting.


QuoteI've recently, (today) gotten into shell scripting. I've written four scripts today, I'll post them here and let you guys discuss them.

We'll start with helloworld.sh.

Code:

#!/bin/bash

echo "Hello world bash script!"
echo "Writen by krazed of x86!"
echo "The first of many. :P"

#this script is pointless, shush.
#what directory are we in!?

pwd

#what's in this directory!?

ls

#and, what's the uptime on this boxs?

uptime

#how about the processes being ran?

ps -aux

#Okay, that's all for today, 'folks.
#Written by krazed of x86.
#E-Mail: krazedx86@gmail.com
#AIM: krazedx86



This is called cmdlisting.sh. It takes the contents of the command directorys and lists them into four different .txt files.

Code:

#!/bin/bash

echo "Command listing bash script."
echo "Purpose: Copy your command lists to three different text files."

# First, we start off with /usr/bin, the default commands.

ls /usr/bin > defaultcommands.txt
echo "Contents of /usr/bin written to defaultcommands.txt"
echo " "

# Okay, now we have copied the contents of /usr/bin into the file defaultcommands.txt, Next!
# Now, time for /bin, the system commands.

ls /bin > systemcommands.txt
echo "Contents of /bin written to systemcommands.txt"
echo " "

# Okay, contents of /bin are now in systemcommands.txt
# Let's move on to /usr/X11/bin, the X windows programs.

ls /usr/X11/bin > xwincommands.txt
echo "Contents of /usr/X11/bin written to xwincommands.txt"
echo " "

# Alright, last but not least, let's list your installed programs. /usr/local/bin

ls /usr/local/bin > installedprograms.txt
echo "Contents of /usr/local/bin written to installedprograms.txt"
echo " "
echo "Script executed, no errors, not bad for my second script ever, eh?"

# Okay, that's the script for yah.
# It's not too bad for my second script ever.
# This script written by krazed of the x86 crew.
# We're on IRC at irc.tehnetwork.org:6667 #x86.
# E-Mail: krazedx86@gmail.com AIM: krazedx86



And, this is the third one. This one is actually pretty nifty, it's me experimenting with ANSI color codes, and scripting in color.

Code:

#!/bin/bash

# A small shell script written so I could fuck around
# and get the hang of coding with colors in shell scripts.

# A full list of all the ANSI color codes.
#1m     -     Change text to hicolour (bold) mode
#4m     -        "    "   "  Underline (doesn't seem to work)
#5m     -        "    "   "  BLINK!!
#8m     -        "    "   "  Hidden (same colour as bg)
#30m    -        "    "   "  Black
#31m    -        "    "   "  Red
#32m    -        "    "   "  Green
#33m    -        "    "   "  Yellow
#34m    -        "    "   "  Blue
#35m    -        "    "   "  Magenta
#36m    -        "    "   "  Cyan
#37m    -        "    "   "  White
#40m    -     Change Background to Black
#41m    -        "       "      "  Red
#42m    -        "       "      "  Green
#43m    -        "       "      "  Yellow
#44m    -        "       "      "  Blue
#45m    -        "       "      "  Magenta
#46m    -        "       "      "  Cyan
#47m    -        "       "      "  White
#49m    -        "       "      "  Default background
#7m     -     Change to Black text on a White bg
#0m     -     Turn off all attributes.

echo -e "\x1B[34;49m This is blue text on default background."
echo -e "\x1B[32;49m This is green text on default background."
echo -e "\x1B[37;42m This is white text on green background."

# This script written by krazed of the x86 crew.
# We're on IRC at irc.tehnetwork.org:6667 #x86.
# E-Mail: krazedx86@gmail.com AIM: krazedx86



I re-wrote cmdlisting.sh so I could practice getting color codes down. So here it is, the new and improved, cmdlistingv2.

Code:

#!/bin/bash

echo -e "\x1B[34;49m" "Command listing bash script, version2. Rewritten 05/22/05."
echo -e "\x1B[34;49m" "Purpose: Copy your command lists to four different text files."
echo " "

# First, we start off with /usr/bin, the default commands.

ls /usr/bin > defaultcommands.txt
echo -e "\x1B[31;49m" "Contents of /usr/bin written to defaultcommands.txt"
echo " "

# Okay, now we have copied the contents of /usr/bin into the file defaultcommands.txt, Next!
# Now, time for /bin, the system commands.

ls /bin > systemcommands.txt
echo -e "\x1B[31;49m" "Contents of /bin written to systemcommands.txt"
echo " "

# Okay, contents of /bin are now in systemcommands.txt
# Let's move on to /usr/X11/bin, the X windows programs.

ls /usr/X11/bin > xwincommands.txt
echo -e "\x1B[31;49m" "Contents of /usr/X11/bin written to xwincommands.txt"
echo " "

# Alright, last but not least, let's list your installed programs. /usr/local/bin

ls /usr/local/bin > installedprograms.txt
echo -e "\x1B[31;49m" "Contents of /usr/local/bin written to installedprograms.txt"
echo " "
echo -e "\x1B[34;49m" "Script executed."
echo -e "\x1B[0m"

# Okay, that's the script for yah.
# This script written by krazed of the x86 crew.
# Script rewritten so I could fuck with color codes.
# We're on IRC at irc.tehnetwork.org:6667 #x86.
# E-Mail: krazedx86@gmail.com
It is good to be good, but it is better to be lucky.

Krazed

This was a post tmp made, (tmp: come back and give me new challenges), which I plan to retry and finish within the week. Don't give me hints or tell me how.  :P

QuoteChallenge:

Using bash, make it so that when you boot into X Windows with your default user (krazed or whichever login you use) it always starts up a terminal (of your choice) that is running with UID 0 (root). This is assuming that your default user is not UID 0.

I used to have it so that whenever I booted X, xfterm4 popped up already tailing my logfiles (which required privs), so I've had to do this before. Let's see how similar our methodology is.

Let me know if you need any clarification/hints.
It is good to be good, but it is better to be lucky.

iago

For the command listing one, there's a bit of a problem. Linux doesn't necessarily use /bin /usr/bin etc. for its binaries, that's simply a convention. To ensure you got everything, I recommend the following (plus, it's a good way to learn about looooping :) ) (note: untested):


#!/bin/bash

echo "" > commands.txt
for i in `echo $PATH | sed 's/:/ /g'`; do
echo "Commands in $i:" >> commands.txt
ls -l $i >> commands.txt
echo "" >> commands.txt
done


Oh, and by the way, don't ever call x86 a "crew" :P

Krazed

Haha, those days were the best.
It is good to be good, but it is better to be lucky.

Newby

- Newby
http://www.x86labs.org

Quote[17:32:45] * xar sets mode: -oooooooooo algorithm ban chris cipher newby stdio TehUser tnarongi|away vursed warz
[17:32:54] * xar sets mode: +o newby
[17:32:58] <xar> new rule
[17:33:02] <xar> me and newby rule all

Quote from: Rule on June 30, 2008, 01:13:20 PM
Quote from: CrAz3D on June 30, 2008, 10:38:22 AM
I'd bet that you're currently bloated like a water ballon on a hot summer's day.

That analogy doesn't even make sense.  Why would a water balloon be especially bloated on a hot summer's day? For your sake, I hope there wasn't too much logic testing on your LSAT. 

mynameistmp

Quote from: Krazed on August 29, 2007, 10:11:29 AM
This was a post tmp made, (tmp: come back and give me new challenges), which I plan to retry and finish within the week. Don't give me hints or tell me how.  :P

QuoteChallenge:

Using bash, make it so that when you boot into X Windows with your default user (krazed or whichever login you use) it always starts up a terminal (of your choice) that is running with UID 0 (root). This is assuming that your default user is not UID 0.

I used to have it so that whenever I booted X, xfterm4 popped up already tailing my logfiles (which required privs), so I've had to do this before. Let's see how similar our methodology is.

Let me know if you need any clarification/hints.

I'm curious to see what you come up with here. Nice work thus far. I'll spend some time this weekend trying to recall some cool tricks for you =)

LordVader

#6
Adding users, this is ment for a linux system with a chroot environment but could be altered for other uses.

#!/bin/bash
# Script to add a user to Linux system
if [ $(id -u) -eq 0 ]; then
read -p 'Enter username : ' username
read -s -p 'Enter password : ' password
egrep ^À^Ü^$username^À^Ý /etc/passwd >/dev/null
if [ $? -eq 0 ]; then
    echo ^À^Ü$username exists!^À^Ý
    exit 1
else
    pass=$(openssl passwd $password)
    useradd -s /bin/bash -m -d /home/chroot/./home/$username -p $pass -c $username -g users $username
    [ $? -eq 0 ] && echo ^À^ÜUser has been added to system!^À^Ý | grep /etc/passwd -e "^$username" >> /home/chroot/etc/passwd | mkdir -p /home/chroot/home/$username/public_html || echo ^À^ÜFailed to add a user!^À^Ý
    exit 1
fi
else
echo ^À^ÜOnly root may add a user to the system^À^Ý
exit 2
fi

Allows you to add a username, and password and create home dir + public_html dir automatically.
The "public_html" folder creation which is for apaches user directories to provide the new user with a web folder as well as chrooted ssh|sftp|sftp access.

Any suggestions to improve and clean this up are appreciated.

Update:
I am working on a full blown chroot automation script you can find it here
It is made to help automate and work with the openssh-server chroot tutorial for Debian etch located here from www.howtoforge.com.
As of sept. 23rd it is not finished but the parts that are finished work and everything is documented, check the readme.txt file for information, it's current status and a changlog if you are interested or curious.

As always feedback and suggestions is appreciated.

LordVader

#7
Also I was playing with a chroot attempting to add different tools to it, and ran into some snags with these:
man
java

Basically there are some dependancies to those that my create_chroot_env script fails to find and add, has anyone else tried to and been successfull @ adding those to a chroot environment?

You can see a similar example of the create_chroot_env script I am using in the middle of this article:
http://www.howtoforge.com/chroot_ssh_sftp_debian_etch

I am basically using that with some slight edits and adding more apps to the list.
It uses ldd to attempt to sort out dependancies and copy them into the chroot.
But sadly it fails to grab all the dependancies for java and some other things and im not sure why.
Possibly may need to do a: #strings <appname> | grep *.so or something to get a more complete depenancy listing?
Anyone with idea's to get a more full list of dependancies I would much appreciate the help.

Update:
For reference I have Sun Java SE 6 JDK/JRE installed, and I am not suffering from the problem listed here:
http://java.sun.com/javase/6/webnotes/#linux
getconf _NPROCESSORS_CONF returns 1 (one processor) in my chroot which is correct for that pc.
Also it appears all the key files are located in: /usr/lib/jvm
But even if you link or copy them all into the chroot java still have some issues finding everything.
java -jar responds if you do this where as java -version fails it could not find libjava.so.

Camel

I've never had any issues using Java on my chrooted vhost for clanbnu.ws - I use the hosting service to run my Java bot.

Sometimes /proc doesn't mount properly, and that cripples what the vhost can do.

<Camel> i said what what
<Blaze> in the butt
<Camel> you want to do it in my butt?
<Blaze> in my butt
<Camel> let's do it in the butt
<Blaze> Okay!

LordVader

#9
Java is running fine on the machine, im having problems getting the dependancies sorted out to copy into the chroot environment.
Same for man also, im fairly sure it may be a problem with the script im using either not properly finding all the dependencies or not adding them all(still playing/testing).

Outside the chroot all is fine, getting the libs and binary's in place so they can find one another inside the chroot is where the problem seems to be.
Smaller apps like wget/nano/vi etc all are working fine but some things seem to have deeper folder tree's and those seem to be the ones that are not working correctly.

Update:
I see one problem the script to create my chroot uses ldd on binary files to sort out dependancies, /usr/bin/java is a perl script so it doesn't return *.so files as results to copy in dependancies..  Using the perl script as a reference tho may give enuff info on what i need to track down :D
Quote from: the java perl script
# The real Java runtime:
my $javaRuntime = '/usr/bin/gij-4.1';

# The debian JNI module directory:
my $debianJNIDir = '/usr/lib/jni';
It's amazing what you find when you actually dig and look.
I'll post back a mini-how-to or something once I sort it all out.

Camel

Are you the computer's administrator?

You could mount -o bind your lib folders to the chroot.

<Camel> i said what what
<Blaze> in the butt
<Camel> you want to do it in my butt?
<Blaze> in my butt
<Camel> let's do it in the butt
<Blaze> Okay!

LordVader

#11
Yes is an old pc of mine, atm running debian linux and freebsd..
I'm doing this in debian atm, for a chrooted ssh environment trying to provide a isolated means to allow ssh logins and provide java apps like javaop2 or bnubot etc.

pxc

Quote from: Krazed on August 29, 2007, 10:11:29 AM
This was a post tmp made, (tmp: come back and give me new challenges), which I plan to retry and finish within the week. Don't give me hints or tell me how.  :P

QuoteChallenge:

Using bash, make it so that when you boot into X Windows with your default user (krazed or whichever login you use) it always starts up a terminal (of your choice) that is running with UID 0 (root). This is assuming that your default user is not UID 0.

I used to have it so that whenever I booted X, xfterm4 popped up already tailing my logfiles (which required privs), so I've had to do this before. Let's see how similar our methodology is.

Let me know if you need any clarification/hints.

Am I on the right track if I'm playing with xinitrc, some script I make up, and setuid?