По сайту/форуму искал, ненашёл.Не подскажите как из файла в формате :
username password
username password
... ...
Добавить пользователей в систему.Заранее благодарен.
pw useradd vasya -g группа -s каталог
passwd vasya
------------
Других варианов нет!, может ключи к pw useradd есть - незнаю!
>pw useradd vasya -g группа -s каталог
>passwd vasya
>------------
>Других варианов нет!, может ключи к pw useradd есть - незнаю!Спасибо что подсказал про pw, очень хорошая вещь.
Я вообще админ начинающий, и поневоле, bash скриптами не владею, если я напишу скрипт на PHP это будет очень плохо?
Какие есть недостатки у пхп скриптов для оболочек?
И ещё. Ну юзеров я с помощью пхп скрипта запихал, очень удобно кстати, прямо из таблички опенофис кальк, как бы вот им ещё пароли из этой же таблички назначить, ведь passwd штука интерактивная, и ей в параметрах пароль не передашь. =/
>И ещё. Ну юзеров я с помощью пхп скрипта запихал, очень удобно
>кстати, прямо из таблички опенофис кальк, как бы вот им ещё
>пароли из этой же таблички назначить, ведь passwd штука интерактивная, и
>ей в параметрах пароль не передашь. =/usermod -p ...
Только ему надо давать закриптованный пароль. Из man usermod(8):
...
-p passwd
The encrypted password, as returned by crypt(3).
...Скрипты, в общем-то конечно всё-равно, на чём писать, лишь бы удобно было. Но и в bash ничего мудрёного нет. И ещё хорошо бы было подумать о том, кто возможно будет в этом когда-нибудь потом разбираться (хотя это, разумеется, уже ваше личное дело).
>И ещё. Ну юзеров я с помощью пхп скрипта запихал, очень удобно
>кстати, прямо из таблички опенофис кальк, как бы вот им ещё
>пароли из этой же таблички назначить, ведь passwd штука интерактивная, и
>ей в параметрах пароль не передашь. =/
Используйте pw -h.
>Используйте pw -h.Что-то я непойму что за дескриптор ему надо передавать???
Может поясните?
>>Используйте pw -h.pw useradd testmy -g 6 -c comm -d /var/mail/ -s /sbin/nologin -h 0 << test11
в таком виде не работает.
pw useradd testmy -g 6 -c comm -d /var/mail/ -s /sbin/nologin -h 0 < test11
вот так работает, но надо чтобы был файлик test11 в котором содержится пароль, а хотелось бы чтобы пароль задавался в строке.
>>>Используйте pw -h.
>
>pw useradd testmy -g 6 -c comm -d /var/mail/ -s /sbin/nologin -h
>0 << test11
>
>в таком виде не работает.
>
>pw useradd testmy -g 6 -c comm -d /var/mail/ -s /sbin/nologin -h
>0 < test11
>
>вот так работает, но надо чтобы был файлик test11 в котором содержится
>пароль, а хотелось бы чтобы пароль задавался в строке.
echo password | pw useradd testmy -g 6 -c comm -d /var/mail/ -s /sbin/nologin -h 0
>echo password | pw useradd testmy -g 6 -c comm -d /var/mail/ -s /sbin/nologin -h 0Большое спасибо!!! Работет =)
Я думаю мой скрипт на пхп никому тут не нужен. Так что то что получилось - писать не буду =)
вот добавление записи на Perl(кусок кода):$r = sprintf ( "%s:%s:%d:1000::0:0:user:%s:/rbin/sh_users",
$login, crypt ($password, "salt"), $uid, $dir );open (A, ">>/etc/master.passwd") || die "Can't open master.passwd\n";
print A "$r\n";
close (A);
`/sbin/pwd_mkdb -u $login /etc/master.passwd`;
>>Используйте pw -h.
>
>Что-то я непойму что за дескриптор ему надо передавать???
>Может поясните?
Дескриптор файла. Передадите 0 - прочитает пароль из стандартного ввода.
Вот вариант на срр. Компилил для себя под gcc.
Если конечно кому нибуть интересно.. Я кинул прогу в сбин и юзаю. довольно таки удобно.
В параметр передается файл... pw катит на фри.. а вот под линуксами надо еще помучится.
#include <unistd.h>
#include <stdio.h>
#include <string.h>int main(int argc, char* argv[])
{
char stroka[100], tmp[100];
char* pch;
char* paruserpass[100];
char* cryptpass;
FILE* fp;stroka[0]=0;
if (argc != 2) {
printf("Использовать как: %s <Имя файла> \n", argv[0]);
exit(0);
}
//открытие файла
fp = fopen(argv[1],"rw");
if (fp==NULL) {perror ("Ошибка открытия файла"); return -1;}while (!feof(fp)) {
fgets (stroka , 100 , fp);//сдесь в ковычках перечисляется через какие знаки препинания расположены пользователь и пароль.
//У меня настроено как через пробел или таб или запятую.
pch = strtok (stroka," ,\t");int n = 0;
while (pch != NULL)
{//printf ("%s\n",pch);
paruserpass[n]= pch;
n++;//сдесь в ковычках перечисляется через какие знаки препинания расположены пользователь и пароль.
//У меня настроено как через пробел или таб или запятую.
pch = strtok (NULL, " .\t");
}printf("\n ------------------------------------------------- \n\n");
tmp[0] = 0;
cryptpass = crypt(paruserpass[1], strcat(strcat(tmp, "$1$"),paruserpass[0]));
printf("Пользователь:%s\n Пароль:%s\n Криптованный пароль:%s\n",paruserpass[0],paruserpass[1],cryptpass);
tmp[0] = 0;// Ну сдесь тупо собираем строку команды useradd по своему вкусу.
system(strcat(strcat(strcat(strcat(strcat(tmp,"useradd "),paruserpass[0])," -p '"),cryptpass),"' -g users"));printf("\n ------------------------------------------------- \n");
stroka[0]=0;
}
fclose(fp);
return 0;
}Ну и компилим
cc <имя исходника> -o <Имя получившийся программы> -lcrypt
кому понадобилось -> рад был помоч, за код сильно не придираемся, работает на 100%.