Это становится намного интереснее после прокрутки стандартных системных учётных записей.
Если вы не Linux-система, то вы можете получить это довольно просто, написав что-нибудь, что само по себе дампирует базу данных пользователей, используя функцию [112818]getpwent(2)[112819]. Примером на C может быть что-то вроде этого:
Поместите это в файл [112820]test.c[112821] и соберите его с помощью
Затем вы можете вызвать [112822]./test[112823] и посмотреть, что вы получите:
Как было сказано выше, это станет интереснее позже.
Подход с использованием [112824]getwent()[112825] имеет большое преимущество в том, что вам не нужно делать никаких предположений о том, как сконфигурирована система входа ([112826]/etc/passwd[112827], LDAP, NIS, ...? ), но просто дайте системе получить информацию с ее действительной конфигурацией.Редактирование:[112829] Может случиться так, что бэкэнд базы данных [112830]passwd[112831], например. LDAP, не разрешает перечислять БД (и, таким образом, [112832]getpwent()[112833]), а только раздает наборы данных, явно запрашиваемые ключом (например, имя логина или UID, так что [112834]getpwuid()[112835] или [112836]getpwnam()[112837] может сработать). В этом случае (и так как ваши целевые имена пользователей настолько аккуратно названы) вы все еще можете "перечислить" вручную с помощью модификации скрипта @masegaloeh:
Как это сделать в отсутствие [112838]getpwuid()[112839] с системным API ([112840]getpwnam()[112841], [112842]getpwuid()[112843]) оставлено в качестве упражнения для читателя.[112497].Этот бэш-скрипт сделает для вас петлю
#!/bin/bash
for i in {205846..205850}; do
finger e${i}
id e${i}
done
Вы просто модифицируете 205846 и 205850, чтобы получить другой диапазон
./etc/вывод пароля - это ваша самая безопасная ставка, так как палец будет печатать дубликаты, если какая-то часть имени совпадает.
Следующий бэш-скрипт должен сделать трюк, он выведет... user $output of id user
l=$(grep "^UID_MIN" /etc/login.defs)
# get max UID limit
#l1=$(grep "^UID_MAX" /etc/login.defs)
# if not set, set manually
l1=4999
# get all users and assign to users array
users=$(awk -F':' -v "min=${l##UID_MIN}" -v "max=${l1##UID_MAX}" '{ if ( $3 >= min && $3 <= max ) print $0}' /etc/passwd | awk 'BEGIN { FS = ":" } ; { print $1 }')
# print the needed info
for user in $users ; do echo -n $user && echo -n " " && id $user ; done
Если вы измените последнюю строку на
for user in $users ; do echo "INSERT INTO users(name,groups) VALUES('$user', '`id $user`');" ; done
то получите операторы SQL-вставки, например
INSERT INTO users(name,groups) VALUES('priit', 'uid=1056(priit) gid=1056(priit) grupid=1056(priit)');