Автор Тема: Perl и md5  (Прочетена 2959 пъти)

batsve

  • Напреднали
  • *****
  • Публикации: 48
  • Distribution: Mandriva 2009
  • Window Manager: KDE4
    • Профил
Perl и md5
« -: Jul 01, 2005, 23:36 »
Със скрипт на Perl искам да сменя паролите на 50 потребители
едновремено наведнъж.

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

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

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

mironcho

  • Напреднали
  • *****
  • Публикации: 495
    • Профил
Perl и md5
« Отговор #1 -: Jul 01, 2005, 23:57 »
Пробвай с Digest::MD5 (perldoc Digest::MD5). Ако го няма инсталиран, инсталирай през CPAN или "ръчно":

http://search.cpan.org/CPAN.....tar.gz
Активен

batsve

  • Напреднали
  • *****
  • Публикации: 48
  • Distribution: Mandriva 2009
  • Window Manager: KDE4
    • Профил
Perl и md5
« Отговор #2 -: Jul 02, 2005, 00:14 »
Благодаря ти за връзката, преди минута сложих 2.03-ще обновя.
Активен

zarhi

  • Напреднали
  • *****
  • Публикации: 81
    • Профил
Perl и md5
« Отговор #3 -: 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 работата е свършена.
Активен

http://www.skknet.net

CentOS 4.2 (Final) running on:
Epox EP-9NPA+ Ultra
Athlon64 3200+
GigaByte GF6600 PCI-Express x16
2Gb RAM, 2x80Gb Seagate SATA, 4x160Gb Seagate PATA, 2x120Gb Seagate PATA

batsve

  • Напреднали
  • *****
  • Публикации: 48
  • Distribution: Mandriva 2009
  • Window Manager: KDE4
    • Профил
Perl и md5
« Отговор #4 -: Jul 05, 2005, 11:26 »
Много си прав за мравката и булдозера, хареса ми '<img'>

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

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

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

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

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

zarhi

  • Напреднали
  • *****
  • Публикации: 81
    • Профил
Perl и md5
« Отговор #5 -: Jul 06, 2005, 09:07 »
Ами примерно викаш като root "ps au" отделяш само редовете които започват с интересуващия те юзер и следва kill -9 <pid>
Активен

http://www.skknet.net

CentOS 4.2 (Final) running on:
Epox EP-9NPA+ Ultra
Athlon64 3200+
GigaByte GF6600 PCI-Express x16
2Gb RAM, 2x80Gb Seagate SATA, 4x160Gb Seagate PATA, 2x120Gb Seagate PATA

batsve

  • Напреднали
  • *****
  • Публикации: 48
  • Distribution: Mandriva 2009
  • Window Manager: KDE4
    • Профил
Perl и md5
« Отговор #6 -: 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

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

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
Perl и md5
« Отговор #7 -: 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
« Отговор #8 -: Aug 04, 2005, 23:37 »
как потребителите влизат в системата ?
по колко различни начина може да се направи това ?

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

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

  • Гост
Perl и md5
« Отговор #9 -: Aug 04, 2005, 23:46 »
о-о-п-п-с темата е в 'Web development' , т.е. ограничението зависи от web приложението. кое е то ?
Активен

batsve

  • Напреднали
  • *****
  • Публикации: 48
  • Distribution: Mandriva 2009
  • Window Manager: KDE4
    • Профил
Perl и md5
« Отговор #10 -: Aug 05, 2005, 14:33 »
rpetrov,
как да опиша там само имената на юзерите които искам без значение на домейна от който влизат
да им задам maxlogins 1 вече е ясно

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

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

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

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

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

Мисля да пробвам и двата варианта, пък после ще видим '<img'>
Активен

batsve

  • Напреднали
  • *****
  • Публикации: 48
  • Distribution: Mandriva 2009
  • Window Manager: KDE4
    • Профил
Perl и md5
« Отговор #11 -: Aug 05, 2005, 15:01 »
rpetrov
Благодаря ти, просто пишеш името и това е

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

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

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

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

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

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
perl регулярен израз
Общ форум
qwerty11 3 1415 Последна публикация Feb 09, 2012, 22:52
от Demayl
Perl регулярен израз
Web development
qwerty11 8 3332 Последна публикация Jun 01, 2012, 14:10
от Demayl
Perl програмист за почасова работа
Търсене
vlindos 1 1890 Последна публикация Aug 31, 2012, 00:56
от vlindos
Съвет за редактор на Perl.
Идеи и мнения
elFO 23 4666 Последна публикация Dec 14, 2012, 01:25
от gat3way
Търси се Perl/PHP програмист
Търсене
gustav 0 1232 Последна публикация Oct 04, 2013, 11:38
от gustav