Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: batsve в Jul 01, 2005, 23:36



Титла: Perl и md5
Публикувано от: batsve в Jul 01, 2005, 23:36
Със скрипт на Perl искам да сменя паролите на 50 потребители
едновремено наведнъж.

Имам файл с думи-новите пароли /в некриптиран вид/ за потребителите.

Как да ги криптирам с md5 например, за да ги вкарам пак със скрипт в /etc/shadow.

Това, което ме интересува е Perl може ли да криптира в md5 и как става това


Титла: Perl и md5
Публикувано от: mironcho в Jul 01, 2005, 23:57
Пробвай с Digest::MD5 (perldoc Digest::MD5). Ако го няма инсталиран, инсталирай през CPAN или "ръчно":

http://search.cpan.org/CPAN.....tar.gz


Титла: Perl и md5
Публикувано от: batsve в Jul 02, 2005, 00:14
Благодаря ти за връзката, преди минута сложих 2.03-ще обновя.


Титла: Perl и md5
Публикувано от: zarhi в Jul 03, 2005, 10:59
А защо се опитваш да утрепеш мравка с булдозер? Тоя перл скрипт дето ще те измъчи едва ли ще го ползваш повече от 1 път. Аз бих постъпил така:

1. Прочитам man chpasswd
2. Правя си текстовото файлче и готово.

Цитат
CHPASSWD(8)                                                                                                                CHPASSWD(8)

NAME
       chpasswd - update password file in batch

SYNOPSIS
       chpasswd [-e]

DESCRIPTION
       chpasswd reads a file of user name and password pairs from standard input and uses this information to update a group of exist-
       ing users. Without the -e switch, the passwords are expected to be cleartext. With the -e switch, the passwords are expected to
       be in encrypted form.  Each line is of the format

              user_name:password

       The named user must exist.  The supplied password will be encrypted as necessary, and the password age updated, if present.

       This command is intended to be used in a large system environment where many accounts are created at a single time.

CAVEATS
       The input file must be protected if it contains unencrypted passwords.

SEE ALSO
       passwd(1), newusers(8), useradd(8)

AUTHOR
       Julianne Frances Haugh (jockgrrl@ix.netcom.com)


Едно допълнение: в интерес на истината не знаех че има chpasswd. Обаче "мисълта" ми протече така: командите които пипат паролите обикновенно имат в имената си 'passw', освен това се намират в някоя от 'bin' директорийте. И затова написах:

Цитат
[root@zarhi64 ~]# locate passw | grep bin
/usr/kerberos/bin/kpasswd
/usr/kerberos/bin/v5passwd
/usr/sbin/saslpasswd
/usr/sbin/lpasswd
/usr/sbin/saslpasswd2
/usr/sbin/chpasswd
/usr/bin/smbpasswd
/usr/bin/passwd
/usr/bin/mksmbpasswd.sh
/usr/bin/gpasswd
/usr/bin/gnome-pilot-make-password
/usr/bin/kdepasswd
/usr/bin/lppasswd
/usr/bin/userpasswd
/usr/bin/htpasswd
/usr/bin/system-config-rootpassword
/usr/bin/vncpasswd
/usr/bin/ldappasswd
/usr/bin/yppasswd


Първото което ми хвана окото след passwd беше chpasswd. Следва man chpasswd i работата е свършена.


Титла: Perl и md5
Публикувано от: batsve в Jul 05, 2005, 11:26
Много си прав за мравката и булдозера, хареса ми :)

а скрипта ще се стартира на 2 мин от crontab  на root-a

Но тъй като не ми е понятно как да направя скрипт за bash, а perl долу горе знам някои неща-пиша си на perl-просто не знам друго :(.

С този скрипт значи проверявам кой се е логнал и който не ми трябва му сменя паролата и го изхвърля от системата.

Настоящия проблем ми е как да убия процесите на потребителя petko например и да го изхвърля.

zarhi
Благодаря ти за подробните напътствия
и ще използвам chpasswd - по кратко е наистина и по удобно


Титла: Perl и md5
Публикувано от: zarhi в Jul 06, 2005, 09:07
Ами примерно викаш като root "ps au" отделяш само редовете които започват с интересуващия те юзер и следва kill -9 <pid>


Титла: Perl и md5
Публикувано от: batsve в Aug 04, 2005, 14:58
Да, и аз нещо подобно направих
Като root викам ps --User "името на юзера" и после kill

Можеш ли да подскажеш
как да забраня на потребител petko примерно да се логва в един и същи момент от различни хостове. Същинския ми проблем е как да забраня на petko да се логне над веднъж в едно и също време.

Казаха ми, че може да се направи като в .profile на /home/petko се добави проверка. Нещо подобно на сценария "когато petko се логне провери има ли  файл   /tmp/petko и ако го има не го логвай, ако няма го направи, когато излезе изтрий този файл".
Това долу горе ми е ясно но не знам как до го направя за bash.

Има ли по лесен начин просто като забрана за друго логване на същия потребител?

А chpasswd не можах да разбера нещо синтаксиса май-направих го с

passwd --stdin $usr </tmp/pn/$usr

смяна на паролата на потребител от файл-върши работа


Титла: Perl и md5
Публикувано от: Hapkoc в Aug 04, 2005, 22:09
Ако $USER_HOME е home директорията на user-а, за който става дума, нещо от рода на:

# mkdir /var/lock/loginu
# chmod g+w /var/lock/loginu
# chgrp users /var/lock/loginu
# ls -ld /var/lock/loginu
drwxrwxr-x  2 root users 4096 Aug  4 21:54 /var/lock/loginu

в .bash_profile пишеш
---------
[[ -f $HOME/.bash_profile.custom ]] && . $HOME/.bash_profile.custom
LOGIN_FILE=/var/lock/loginu/$USER
if [ -f $LOGIN_FILE ]; then
        echo "Already logged in, exiting"
        logout
else
        touch $LOGIN_FILE
fi
---------

в .bash_logout пишеш
---------
rm -f /var/lock/loginu/$USER
[[ -f $HOME/.bash_logout.custom ]] && . $HOME/.bash_logout.custom
---------

# chown root:root .bash_profile .bash_logout
# chmod 600 .bash_profile .bash_logout

потребителят може да си слага разни настройки, команди и т.н. във файловете .bash_profile.custom и .bash_logout.custom, но не може да редактира .bash_profile и .bash_logout.

п.п. решението е примерно и ще работи за bash, ако shell-а на потребителя е друг няма да работи за него.

п.п.п. има малка уловка, ако shell-а на потребителя излезе не по нормален начин (да кажем бъде убит), вероятно няма да се изпълни файла .bash_logout и съответно няма да може да се логне user-а.


Титла: Perl и md5
Публикувано от: в Aug 04, 2005, 23:37
как потребителите влизат в системата ?
по колко различни начина може да се направи това ?

при pam, вероятно от /etc/security/limits.conf (maxlogins ?) може да се зададе.

аз намирам за безсмислено да се поставя такова ограничение.


Титла: Perl и md5
Публикувано от: в Aug 04, 2005, 23:46
о-о-п-п-с темата е в 'Web development' , т.е. ограничението зависи от web приложението. кое е то ?


Титла: Perl и md5
Публикувано от: batsve в Aug 05, 2005, 14:33
rpetrov,
как да опиша там само имената на юзерите които искам без значение на домейна от който влизат
да им задам maxlogins 1 вече е ясно

Приложението не е web-грешката за това е моя, просто започнах с едно а излязоха други въпроси като последния за логването.

За мен има смисъл да забраня втори логвания, затова и питам тук знаещите.

Потребителите влизат в системата през графика - Гном по подразбиране свъзможности за избор кде и хдм, обикновено гном.

Hapkoc,
Благодаря ти за подробните примери, ще ги пробвам и ще кажа как работят.

За kill имам решение мисля. Един скрипт ми се изпълнява от root crontab всяка минута- мисля да добавя проверка в него с w или who след която да  изтрие всички /var/lock/loginu/$USER които не се показват.

Мисля да пробвам и двата варианта, пък после ще видим :)


Титла: Perl и md5
Публикувано от: batsve в Aug 05, 2005, 15:01
rpetrov
Благодаря ти, просто пишеш името и това е

Решението е било по просто отколкото си мислех

И скрипта на Hapkocще ми влезе в работа но за друго

Благодаря на всички за помощта

последна редакция

За всичко, което съм питал тук съм намерил решения благодарение на помощта на горните хора.
Ако някой има подобни въпроси или проблеми да ми пише, ще помагам с каквото знам.
Успех