URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6450
[ Назад ]

Исходное сообщение
"скрипт для изменения пароля"

Отправлено harik , 09-Май-07 20:49 
нужно дать некоторым юзерам в системе добавлять и задавать пароли пользователям(стоит postfix, необходимо дать доступ создавать новые почтовые ящики)

чтобы случайно не изменили пароли на рута, администраторов и системных пользователей, (их логины поместил в файлик danger)нужно сделать скрипт, который бы потом запускался из под sudo(sudo script имя_пользователя вместо passwd имя_пользователя),но проверял на запрещенные логины в файле danger, сделал такой скрипт
#!/bin/sh
flag=true
echo $flag
cut -f1 danger | while read NAME
do
if [ $flag = "false" ]; then
break
elif [ "$1" = "$NAME" ]; then
flag=false
echo $flag
fi
echo $flag
done
# vivodim i zapuskaem proverku
echo $flag
if [ "$flag" = "true"]; then
passwd $1
echo parol $1 izmenen
else
echo net dostupa
exit
(echo поставил для проверки состояния $flag, в рабочем скрипте уберу)

но проблема в том, что при выходе из цикла в любом случае переменная сбрасывается на true, подскажите что не так делаю или альтернативные варианты решения проблемы в bash



Содержание

Сообщения в этом обсуждении
"скрипт для изменения пароля"
Отправлено Xela , 11-Май-07 14:07 
Ммм... Если все равно выполняете скрипт под sudo, то почему бы так и не указывать в sudoers:

informix        ALL=(ALL)       NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod, /bin/passwd, !/bin/passwd root, !/bin/passwd sinitsa, /bin/chmod, /bin/chown

в этом примере пользователю informix дозволяется вызывать passwd под sudo кроме тех случаев, когда passwd запускается с параметром root или sinitsa

в вашем бы случае я написал бы скрипт так:
#!/bin/bash

grep -qEe "^$1\W*" danger
[ $? -eq 0 ] && exit
passwd $1

То есть, grep-ом проверяем наличие в файле danger логина пользователя и если его там нет, выполняем passwd


"скрипт для изменения пароля"
Отправлено harik , 12-Май-07 22:02 
>Ммм... Если все равно выполняете скрипт под sudo, то почему бы так
>и не указывать в sudoers:
>
>informix        ALL=(ALL)    
>   NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod, /bin/passwd, !/bin/passwd root, !/bin/passwd sinitsa,
>/bin/chmod, /bin/chown
>
>в этом примере пользователю informix дозволяется вызывать passwd под sudo кроме тех
>случаев, когда passwd запускается с параметром root или sinitsa
>
>в вашем бы случае я написал бы скрипт так:
>#!/bin/bash
>
>grep -qEe "^$1\W*" danger
>[ $? -eq 0 ] && exit
>passwd $1
>
>То есть, grep-ом проверяем наличие в файле danger логина пользователя и если
>его там нет, выполняем passwd

спасибо за совет по поводу grep, послеучтения всех пожеланий, решил сделать таким образом:

ravno=`grep $1 danger`

if [ "$1" != "$ravno" ]; then
/usr/bin/passwd $1
echo $1 izmenen
echo `date` $1 izmenen
else
echo `date` net dostupa
fi

однако учитывая, что скрипт выполняется под sudo возникла необходимость исключить такую ошибку, когда после скрипта ничего не вводится, и возникает опасность изменить пароль на рута(sudo passwd), поэтому добавил в начало скрипта такое условие:

if [ $1 = ]; then
echo `date` ne zadano imya
exit 0
fi
При выполнении скрипта без ввода данных, все проходит нормально, когда вводится новое имя пользователя после скрипта, все работает нормально, однако выдает такое сообщение:
./passwd.sh: line 3: [: test(вводимое имя): unary operator expected

подскажите, как устранить, ввод $1 в кавычки и тд не помогают


"скрипт для изменения пароля"
Отправлено harik , 13-Май-07 09:38 
>if [ $1 = ]; then
>echo `date` ne zadano imya
>exit 0
>fi
>При выполнении скрипта без ввода данных, все проходит нормально, когда вводится новое
>имя пользователя после скрипта, все работает нормально, однако выдает такое сообщение:
>
>./passwd.sh: line 3: [: test(вводимое имя): unary operator expected
>
>подскажите, как устранить, ввод $1 в кавычки и тд не помогают

решил проблему, заменив на if [ -z "$1" ]



"скрипт для изменения пароля"
Отправлено L0n3R4ng3r , 30-Май-07 18:57 
>>if [ $1 = ]; then
>>echo `date` ne zadano imya
>>exit 0
>>fi
>>При выполнении скрипта без ввода данных, все проходит нормально, когда вводится новое
>>имя пользователя после скрипта, все работает нормально, однако выдает такое сообщение:
>>
>>./passwd.sh: line 3: [: test(вводимое имя): unary operator expected
>>
>>подскажите, как устранить, ввод $1 в кавычки и тд не помогают
>
>решил проблему, заменив на if [ -z "$1" ]


как вариант
if [ $# -ne 1 ];then
echo `date` ne zadano imya
exit 0
fi