Скачиваний:
9
Добавлен:
09.05.2014
Размер:
12.6 Кб
Скачать

Лабораторная работа № 3

Работа с правами доступа

Работу выполнил

студент гр. 2100

Голубцов Евгений

Работу принял

Дергачёв А. М.

2008

Задание

Написать программу, выдающую список пользователей, имеющих право выполнения заданного файла.

Текст программы

#!/bin/bash
echo "Please enter file name:"
read name
if
test -f "$name"
then :
else echo "File doesn't exist!"
echo "Searching for such directory..."
	if 
	test -d "$name"
	then sw=1
	else echo "No such directory was found!"
	exit 0
	fi
fi
if [ "$sw" = "1" ]
then comm="ld"
else comm="l"
fi
u=$( ls -$comm  "$name" 2>>errlog3 | awk '{print substr($1,4,1)}')
g=$( ls -$comm "$name" 2>>errlog3 | awk '{print substr($1,7,1)}')
o=$( ls -$comm  "$name" 2>>errlog3 | awk '{print substr($1,10,1)}')
echo $u
echo $g
echo $o

if [[ "$u" = "x" && "$g" = "x" && "$o" = "x" ]]
then	
(cat /etc/passwd & niscat passwd.org_dir ) | awk -F: '{print $1}' 

elif [[ "$u" = "x" && "$g" = "x" && "$o" = "-" ]]
then		
usertemp=$(  ls -$comm "$name" | awk '{print $3}')	
grouprtemp=$( ls -$comm  "$name" | awk '{print $4}')
grouprtempid1=$((cat /etc/group & niscat group.org_dir) | awk -F: "/^$grouprtemp/"'{print $3}' )
echo $grouprtempid1 1>tmp3_1
grouprtempid=`awk '{print $1}' tmp3_1`
rm tmp3_1
echo "root"
(cat /etc/passwd & niscat passwd.org_dir ) | awk  -F: '$4~'"/^$grouprtempid"'$/{print $1}' | awk '$1!~/^root$/ {print $1}'
(cat /etc/group & niscat group.org_dir) |  awk  -F: '$3~'"/^$grouprtempid"'$/{print $4}'

elif [[ "$u" = "x" && "$g" = "-" && "$o" = "x" ]]
then
usertemp=$( ls -$comm  "$name" | awk '{print $3}')	
grouprtemp=$( ls -$comm "$name" | awk '{print $4}')
grouprtempid1=$((cat /etc/group & niscat group.org_dir) | awk -F: "/^$grouprtemp/"'{print $3}' )
echo $grouprtempid1 1>tmp3_1
grouprtempid=`awk '{print $1}' tmp3_1`
rm tmp3_1
echo $usertemp
(cat /etc/passwd & niscat passwd.org_dir ) | awk  -F: '$4!~'"/^$grouprtempid"'$/{print $1}' 

elif [[ "$u" = "x" && "$g" = "-" && "$o" = "-" ]]
then
usertemp=$( ls -$comm "$name" | awk '{print $3}')
echo "root"
echo $usertemp

elif [[ "$u" = "-" && "$g" = "x" && "$o" = "x" ]]
then
usertemp=$(  ls -$comm "$name" | awk '{print $3}')
(cat /etc/passwd & niscat passwd.org_dir ) | awk  -F: '$1!~'"/^$usertemp"'$/{print $1}'

elif [[ "$u" = "-" && "$g" = "x" && "$o" = "-" ]]
then
usertemp=$( ls -$comm "$name" | awk '{print $3}')	
grouprtemp=$( ls -$comm "$name" | awk '{print $4}')
grouprtempid1=$((cat /etc/group & niscat group.org_dir) | awk -F: "/^$grouprtemp/"'{print $3}' )	
#grouprtempid2=$((cat niscatgroup) | awk -F: "/^$grouprtemp/"'{print $3}')
echo $grouprtempid1 1>tmp3_1
grouprtempid=`awk '{print $1}' tmp3_1`
rm tmp3_1
#echo $grouprtempid
find=`(cat /etc/passwd & niscat passwd.org_dir ) | awk  -F: '$4~'"/^$grouprtempid"'$/{print $1}' | awk  -F: '$1!~'"/^$usertemp"'$/{print $1}'`
declare -a massive
i=0
for findname in $find
do
massive[$i]="$findname"
let "i += 1"
done
numberofel=${#massive[@]}
i=0
while [ "$i" -ne "$numberofel" ]
do
if [ ${massive[$i]} = "root" ]
then level=1
else echo ${massive[$i]}
fi
let "i +=1"
done
if [ "level" != "1" ]
then echo "root"
fi 
(cat /etc/group & niscat group.org_dir) |  awk  -F: '$3~'"/^$grouprtempid"'$/{print $4}' 1>tmp3_2
testing=`cat tmp3_2`
if [ "$usertemp" = "$testnig" ]
then
(cat /etc/group & niscat group.org_dir) |  awk  -F: '$3~'"/^$grouprtempid"'$/{print $4}'
fi
elif [[ "$u" = "-" && "$g" = "-" && "$o" = "x" ]]
then 
usertemp=$( ls -$comm "$name" | awk '{print $3}')	
grouprtemp=$( ls -$comm "$name" | awk '{print $4}')
grouprtempid1=$((cat /etc/group & niscat group.org_dir) | awk -F: "/^$grouprtemp/"'{print $3}' )
echo $grouprtempid1 1>tmp3_1
grouprtempid=`awk '{print $1}' tmp3_1`
rm tmp3_1
(cat /etc/passwd & niscat passwd.org_dir ) | awk  -F: '$4!~'"/^$grouprtempid"'$/{print $1}' | awk  -F: '$1!~'"/^$usertemp"'$/{print $1}'

elif [[ "$u" = "-" && "$g" = "-" && "$o" = "-" ]]
then
echo "root"

fi

Соседние файлы в папке задание №3 — 4