test
Lesson 9 | Lesson 11
The symbol "[" is a symbolic link to test and is a shell builtin.
type [ [ is a shell builtin
who; echo $? 2009-07-20 18:18 (:0) mike pts/0 2009-07-20 18:19 (:0.0) mike pts/1 2009-07-20 18:25 (:0.0) 0
!/bin/bash
#ping -c3 123.123.123.123 ping -c3 127.0.0.1 echo $?
sh test.sh connect: Network is unreachable 2
sh test.sh PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.078 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.070 ms 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.072 ms
--- 127.0.0.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1998ms rtt min/avg/max/mdev = 0.070/0.073/0.078/0.007 ms 0
Test a String The test requires 3 parameters; the variable name($NAME), the test condition(=) and the value(fred).
Name="fred" test $NAME = fred echo $?
When you do tests enclose the variables in double quotes. string test -z zero-length -n non-zero length
Numeric tests string test = != <= >= > <
Numeric tests -eq -neq -le -ge -gt -lt
x=4 test "$x" -lt 10 echo $?
File test
test -f file
test -d /etc
if [ -f /etc/vsftpd/vsftpd.conf ]; then echo 'File exists'; another_command; fi
Check for empty string test -z str or [ -s str ]
if [ -z “$FRUIT” ]; then echo “Your fruit” else echo “second message” fi
equal strings test str1 = str2 or [ str1 = str2 ]
File Test Operators -b file block file -c file character file -d file directory -e file file exists -f file regular file, not directory -G file file exists and owned by group id -g file set group id is set -k file sticky bit is set -L file symbolic link -p file named pipe -O file file exists and owned by effective uid -r file file is readable -S file file is a socket -s file file is nonzero in size -f fd true if file descriptor is opened on a terminal -u file Set user ID bit is set -w file file is writeable -x file file is executable
ssh.sh
#!/bin/bash
cd ~ cd .ssh file=authorized_keys if [ -x $file ] then echo "Permissions are incorrect they should be 644" elif [[ -r $file && -w $file ]] then echo "You have read and write permissions to authorized_keys" else echo "YOU must pay attention to permissions" fi
You want to move into the hidden .ssh directory in order to evaluate the authorized_keys file. cd ~ cd .ssh
This file is important as it helps set up a connection using SSH without using a password, so permissions are ctitical and often a place where users have a problem. The variable is set up with this line and will be used in subsequent lines. file=authorized_keys
Here a if...then clause is set up to evaluate the permissions on this file. The first evaluation is to use testing to determine if the file is executable. If the file is executable, SSH will not allow the use of the authorized_keys file so you need to reinforce the actual permissions. if [ -x $file ] then echo "Permissions are incorrect they should be 644"
The second option will evaluate to see if the user had the read right (-r) and the write right (-w) to the file which would indicate the correct permissions for a specific user. elif [[ -r $file && -w $file ]] then echo "You have read and write permissions to authorized_keys"
The final option will cover any thing else that occurs with the permissions, which will not work. else echo "YOU must pay attention to permissions" fi
Now this script will work fine for a specific user, but if you run it as root you will find that it is not accurate because effectively, root and write to any file wheter it has write permissions or not. Here is an example of the permissions and how they work with a user called sue. You can see the script functions correctly.
The script executed as sue.
-r--r--r-- 1 sue sue 0 Aug 1 09:16 authorized_keys YOU must pay attention to permissions
-rwxr-xr-x 1 sue sue 0 Aug 1 09:16 authorized_keys Permissions are incorrect they should be 644
-r--r--r-- 1 sue sue 0 Aug 1 09:16 authorized_keys YOU must pay attention to permissions
Copyright CyberMontana Inc. and BeginLinux.com
All rights reserved. Cannot be reproduced without written permission. Box 1262 Trout Creek, MT 59874
|