2017-01-22 12 views
-1

У меня есть сценарий bash здесь, который я пытаюсь изменить, чтобы проверить, есть ли только один идентификатор root, является ли он уязвимым и в настоящее время, этот скрипт проверяет только, есть ли дублирующий uid и отображать пользователей, которые имеют один и тот же uid , Заранее спасибо! :)Bash: как проверить, есть ли только один идентификатор корня, и все пользовательские UID уникальны?

Bash сценария:

#!/bin/bash 
/bin/cat /etc/passwd| /bin/cut -f3 -d":" | /bin/sort -n | /usr/bin/uniq-c | while 
read x ; do 
    [ -z "${x}" ] && break 
    set -$x 
    if [ $1 -gt1 ]; then 
     users=`/bin/gawk -F: '($3 == n) { print $1 }' n=$2 /etc/passwd| /usr/bin/xargs` 
     echo "Duplicate UID ($2): ${users}" 
    fi 
done 

Ожидаемый результат:

Audit criteria: There is only one root id 

Vulnerability: Yes 

Details: See below 


root:!:0:0::/:/usr/bin/bash 

jdoe:*:0:1:John Doe:/home/jdoe:/usr/bin/bash 
+0

Я предлагаю заменить 'Uniq-c' на' Uniq -c' и пожалуйста, смотрите: http://www.shellcheck.net/ – Cyrus

+0

Есть причина, по которой вы используете полные пути для основных команд, таких как 'cut',' grep', 'awk' и т. д.? – codeforester

+0

@codeforester это был пример, предоставленный мне, и, поскольку я стал новичком в сценариях bash, я не понял его, пока вы не указали его, спасибо за вход! –

ответ

0

Вы можете упростить сценарий сильно, потому что все, что вы ищете идентификатор пользователя 0, который является корнем :

#!/bin/bash 
root_count=$(cut -f3 -d":" /etc/passwd | grep -wc 0) 
if [[ $root_count > 1 ]]; then 
    users=$(awk -F: '($3 == 0) { print $1 }' /etc/passwd | xargs) 
    echo "Duplicate roots: ${users}" 
fi 
0

Вы можете использовать awk, чтобы выяснить это:

if ! awk -F: '$3==0{c++}END{exit !(c<2)}' /etc/passwd ; then 
    echo "More than one user with uid 0" 
fi 

 Смежные вопросы

  • Нет связанных вопросов^_^