Перейти к содержанию

gogi

Members
  • Постов

    547
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Весь контент gogi

  1. CAEman писал(а) Fri, 22 January 2010 13:48 Т.е. нужно искать файлы, в которых есть: getent passwd getent group ? Неeeeeeeт getent - это утилита, запускаемая из командной строки, и возвращающая информацию, находящуюся в соответствующих системных базах (в Вашем случае passwd и group). Выбор базы происходит посредством nss. Соответсвенно, если Вы пишете nss модуль, то Ваша конечная проверка того, что Вы написали и подключили, осуществляется через вызов getent. Цитата: Кстати, а какую группу вин.сервер может вернуть на запрос Линукса? Я так понимаю, что создаваемые локальные пользователи в рассматриваемом случае должны будут входить в группы, которые я укажу в настройке для вновь создаваемых пользователей. Или я что-то не так понимаю? Если АД не настроен спициально для обслуживания юникс пользователей, но он не может дать ни uid ни gid. Это вместо него и должа нелать nss. Цитата: Я пробежался ранее по содержаниям всех исходников и заподозрил следующие: source4/libnet/libnet_user.c source3/lib/netapi/examples/user/user_add.c source3/lib/netapi/examples/user/user_del.c source4/libnet/userman.c source3/winbindd/winbindd_user.c Если у Вас есть исходники, то ни могли бы Вы их проверить на наличие искомой информации (они небольшие, особенно user_add.c и user_del.c, и если знать, что искать, то разве поиск по схеме "нет"-"может быть" займёт много времени)? Я не вижу смысла перерывать эти исходники. Разве что для ознакомления. Я думаю, Вам следует изучить логику работы pam и nss. Тогда, во-первых, Вы не будете задавать вопросы, которые обречены остаться без ответа, а во-вторых, сможете попробовать разные схемы решения Вашей задачи. Очень вероятно, что существует и более приемлемомое решение, чем предложенное мной. Например, можно поэксперементировать с найденной Вами pam-scripts.
  2. beetle2001 писал(а) Wed, 20 January 2010 13:35 Всем привет! Есть девайс PocketBook 301 plus: на нем проц Samsung® S3C2440 AL-40 400MHz и установлена Linux. Вот полное описание девайса если что: http://pocketbook.com.ua/index.php?id=204 Для этого девайса есть SDK на С, но я хочу сбилдить под него Mono и попробовать писать на C#. Подскажите пожалуйста как сделать cross-compile Mono? Посмотрел описание. Вам не кажется, что в качестве платформы для разработки на моно, это не самой удачный выбор? Цитата: это больше вопрос по моно чем по линукс. Похоже, что так. Тогда Вам туда, где обсуждают эту поддерживаемую M$ технологию.
  3. CAEman писал(а) Fri, 15 January 2010 18:17 Просмотрел я исходник winbind_nss_linux.c. Что-то создание пользователя я там не нашёл... Работа идёт всё время с кэшем. Под конец только "map a uid to a SID string ". Это разве и есть создание пользователя? Прилагаю весь текст исходника (может, я что-то не понял?): Для подробного просмотра кода требуется немалое время. Очевидно, что для решения большинства задач используется обращение к даемону winbind. Виртуальные (очевидно, не системные) пользователи, видимо, создаются тоже этим даемоном. Вам этот код важен прежде всего, как пример программы nss. Нужно узнать из документации какие nss функции достаточно реализовать для баз passwd и group. А создать виртуального, или, если захотите, даже системного пользователя можно, например, прямым изменением файлов. Конечная задача - обеспечить нужной информацией вызовы getent passwd getent group
  4. gogi

    UBUNTU 9.10

    Rashpil писал(а) Thu, 14 January 2010 10:57 Подскажите пожалуйста по след вопросу UBUNTU 9.10 по умолчанию ставит GRUB 2 v 1.97 где у него находится файл содержащий конфигурацию меню??? раньше было все проше правился /boot/grub/menu.lst и нормуль, а теперь нет этого файла нигде вчера часа 2 перебирал файлы. есть подозрение что он его шьет в файл /boot/grub/grub.cfg но он не правится даже под рутом Допустим, Вы поленились почитать документацию, запустив info grub из командной строки, либо поискав в сети. Но все же вы редактировали crub.cfg, а там прямо в первых строках написано, каким образом этот файл генерируется. У меня, напр. так. # It is automatically generated by /usr/sbin/grub-mkconfig using templates# from /etc/grub.d and settings from /etc/default/grub Вот и правьте эти файли, затем запускайте grub-mkconfig. Цитата: выдает следующее при запуске: -------------------- Ошибка системы GConf: .... Не знаю, какое отношение имеет gconf к грабу.
  5. CAEman писал(а) Fri, 08 January 2010 20:59 Так вопрос именно в том, не будут ли при данной схеме авторизации (т.е. с обязательной авторизацией в сети, независимо от наличия локального пользователя со своим профилем) уже существующие профили перезаписываться профилем по умолчанию? Иначе говоря, возможно ли при данной схеме в случае наличия локального пользователя с именем, идентичным введённому, использовать его со своим профилем, а поскольку он будет беспарольным, то просто производить обязательную аутентификацию в сети при помощи кербероса (но при этом, если у него ещё не будет профиля, например, из-за неудачно произведённых ранее аутентификаций, то в случае удачной текущей - производить стандартную первую загрузку с созданием профиля по умолчанию)? То что Вы называете профилем, находится в домашнем каталоге и Вас никто не заставляет его удалять. А раз так, то все данные сохранятся, в том числе и личные настройки. Системе совершенно без разницы, где проведена аутентификация. Цитата: Количество uid составляет (по крайней мере, по умолчанию) менее 60000. Если производить неправильную авторизацию каждые 6с, то на это уйдёт ~100ч, что в реальности может составить срок порядка года... 65000 в ядре 2.4. Ядру 2.6, на котором сейчас собираются почти все дистрибутивы, уже далеко не первый год.) Предел - 4 миллиарда. Цитата: А в каких исходниках winbind'а можно это найти (ведь, если Вы считаете, что в winbind_nss_linux.c может содержаться нужная для первого создаваемого модуля информация, т.е. создание пользователя, то где-то должно быть и его удаление при неудачной авторизации или аутентификации)? Если Вы разберетесь с основной задачей, то решение этой (удаление только что созданного пользователя) не должно составить труда.
  6. CAEman писал(а) Fri, 08 January 2010 13:24 Значит, если я Вас правильно понимаю, согласно предлагаемой Вами схеме в целях безопасности следует исключить возможность локальной авторизации без сети всех этих создаваемых беспарольных локальных пользователей. В связи с этим у меня возникли следующие вопросы: 1. Будет ли грузиться root (и, кстати, как обеспечивается сохранность его пароля)? а) Обычно, pam настраивают таким образом, что root аутентифицируется локально. б) Каждый, имеющий физичесткий доступ к машини, сможет украсть хэш рута и попыталься подобрать пароль. Поэтому кртичные для безопасти машины должны быть физически изолированы, либо данные на диске должны быть зашифрованы. Цитата: 2. Будут ли использоваться локальные профили повторно загружающихся пользователей, или они будут перезаписываться профилем по умолчанию? /home можно использовать как локальный (самый простой вариант), так и разделяемый. Не сохранять личные настройки тоже можно, но думаю Вам это не нужно. Цитата: 3. Неправильно введённые (несуществующие в сети) пользователи будут плодиться неограниченно (вернее, до забивки всех возможных uid с последующей невозможностью загрузки неуспевших локально зарегистрироваться существующих сетевых пользователей)? Даже если они будуть плодиться неограниченно, за время службы комиьютера (не более 100 лет) количества uid будет достаточно ))). Также можно будет написать еще один pam модуль для удаления пользователя, не прошедшего аутентификацию.
  7. Алексей писал(а) Tue, 05 January 2010 21:53 В исходниках сказано: lba : 0 - 40xxx msf : 0:2:0 - 89:59:74 превод lba -> msf ( ( ( m * 60) + s ) * 75 + f )- 150 Как раз наоборот. По этой формуле msf -> lba. Цитата: написал три вложенных цикла: for ( m = 0; m <= 89 : m++ ) { for ( s = 0 ; s <= 59 ; s++ ) { for ( f = 0 ; f <= 47 ; f++ ) { arg.msf.cdmf_min0 = m; arg.msf.cdmf_sec0 = s; arg.msf.cdmf_frame0 = f; ret = ioctl( fd , CDROMREADMODE1 , &arg ); } } } Только вот возвращает удачных 2-3 чтения из 10 Может, я что-то напутал в адресации секторов? Елси не захотели пользоваться готовой функцией, то исправляйте свои ошибки. Их, как минимум, две. 1. В последнем цикле f < 75 (то же самое f <= 74) 2. Не учли, что в первом блоке (минута 0) счет секторов начинаетя с 2, а не с 0. Ваши игры с программированием подобны занятию человека, который, увидев белый экран телевизора, вместо того, чтобы воткнуть на место антенну, полез внутрь, при этом об электронике зная только то, что она поддается воздействию паяльника.
  8. Предвидя возможную реакцию, не стану критиковать Ваш чудной велосипедостроительный способ восстановления данных с диска. Перейду к тому, что остается, а остается разгадать новогоднюю загадку... Алексей писал(а) Mon, 04 January 2010 23:39 Остается загадкой способ инициализации msf-cтруктуры для последовательного считывания секторов диска. Напишите, например, функцию обратного преобразования lba в msf. И вызывайте ее перед вызовом ioctl. int getmsf (int lba, struct cdrom_msf *msf){ int f= lba + CD_MSF_OFFSET; msf->cdmsf_min0= f / (CD_SECS * CD_FRAMES); int s= f % (CD_SECS * CD_FRAMES); msf->cdmsf_sec0= s / CD_FRAMES; msf->cdmsf_frame0= s % CD_FRAMES;}// В основной программеunion { struct cdrom_msf msf; /* input */ char buffer[CD_FRAMESIZE_RAW]; /* return */} arg;int i;for (i=0; i < CD_MINS * CD_SECS * CD_FRAMES; i++) { getmsf (i, (struct cdrom_msf*)&arg); // теперь вызывайте ioctl() и записывайте содержимое arg в файл. И возвращаемые ошибки не забудьте проверить} И еще. Не забудьте необходимые заголовочные файлы добавить.
  9. Алексей писал(а) Wed, 30 December 2009 18:29 По поводу монтирования: Вам уже сказали, что все попытки безуспешны, или Вы полагаете, что я, читая спецификации различных ФС, как сказку про колобка, не в состоянии прикрутить образ? Наверное, не то читаете, если так и не смогли примонтировать. Цитата: По поводу системы: в описании темы предельно ясно указано, на какой платформе и какими инструментами записан носитель, или Вы можете определить тип ФС по номеру версии Windows и номеру сервис пака? Тогда удивите нас: WindowsXP SP2 Похоже, Вы взялись за задачу в процессе "провода" старого года. Упомянуто было только о windows, даже без указания версии. Даже я, не часто общаясь с вендой, знаю, что для записи дисков используются различные программы (некоторые из них могут и копипастить). Самый простой способ узнать ФС, естественно, посмотреть какой программой и с какими установками диск записан. Если Вы продолжаете настаивать, что это сделано встроенными средствами венды, то microsoft.com говорит: Windows XP Professional provides integrated support for writing data to CD-R and CD-RW. When writing data to CD, Windows XP Professional automatically uses the Joliet and ISO 9660 formats Цитата: И контрольный в голову всем мудрым советчикам howto и backup: Трактуйте название темы буквально - нас не интересует не причина, а пути решения проблем. У Вас проблемы с логикой. Именно самые прямые пути решения проблемы Вам и подсказывают.
  10. Алексей писал(а) Tue, 29 December 2009 23:57 dd if=/dev/cdrom /tmp/cd.iso Опечатка ? dd if=/dev/cdrom of=/tmp/cd.iso Цитата: Что касается первого вопроса, то предполагается, что это iso-9660, Компьетер, на котором производилась запись затонул или уничтожен перед приходом налоговой полиции? ))) В таком случае осталось в памяти, какая система там была установлена и есть возможность узнать используемую ФС. Установите, если понадобится, поддерку требуемой ФС и монтируйте файл, как Вам советовали ( -t ФС -o loop,ro). И только, если это не принесет результатов, стоит искать специализированные утилиты восстановления, изучать внутренности ФС и т.д. Да и то лучше обратиться к профессионалам. Правда говорят, что они много просят за восстановление данных. В общем возни хватит для того, чтобы и ночью помнить о бэкапе.
  11. CAEman писал(а) Fri, 25 December 2009 21:01 А какая программа могла бы выдать такую информацию? Гугл подскажет. Цитата: А какже: "3a. Если юникс пользователь есть в /etc/passwd, nss выдает его данные (uid...) 4а. Вызывется pam_unix для аутентификации." nss выдаст данные пользователя по логину независимо от введенного пароля и даже в том случае, если у него вовсе нет пароля. Если он есть в /etc/passwd, то это сделает системный модуль. Если нет - то ваш создаст пользователя и выдаст данные. Затем начнется проверка пароля модулями pam. Сначала pam_unix сверит хэш пароля с записью в /etc/shadow. При успехе - вход. Иначе pam_krb5 проведет аутентификацию в AD. При успехе - тоже вход. Иначе - отбой. Цитата: Чтобы пользователь в следующий раз уже мог загружаться локально без всей этой мороки... Сетевая аутентификация - это не морока, а один из принципов построения централизованной системы безопасности. Путаница будет, если у пользователя дубликаты паролей в разных местах. Один - в AD + по одному на каждой машине, где он хоть один раз логинился. Здесь и безопасность хромает. Всякий, загрузившийся с флэшки, сможет украсть хэш и подобрать пароль.
  12. CAEman писал(а) Fri, 25 December 2009 19:54 А следующий вывод на подрубленной к домену виндовой машине ldap.exe при выполнении bind никак не может здесь подсказать: " ld = ldap_open("", 389); Established connection to . Retrieving base DSA information... Я здесь ничего, что могло бы помочь, не нашел. Цитата: 2. А в DM сразу вводится и имя, и пароль. в gdm - да, в xdm -нет, в kdm - не помню. Но это все равно ничего не меняет. Цитата: 3а-4а. Если есть беспарольный (от неудачной аутентификации) и был введён беспарольный, то он не загрузится? системный nss, еще до Вашего, выдаст данные и после этого будет проверен пароль в AD. Цитата: А при удачной pam_krb5 аутентификации локальному пользователю будет добавлен правильный пароль? Автоматом, конечно, нет. Разве что еще один модуль pam писать для добавления в /etc/shadow хеша пароля. А это нужно?
  13. CAEman писал(а) Fri, 25 December 2009 15:15 А как может быть по другому, Вы не знаете? Или с данным локальным ПО можно подключиться только, если на АД реализовано именно так и не иначе? При вызове ldapsearch с ключем -D указывается dn нужной записи вместо uid=user-login,ou=Users,dc=domain. А какой именно - не знаю, смотрите в документации по AD. Цитата: Я не совсем понял, начать с какой ЭТОЙ более простой схемы. А то я так понял, что в создаваемый nss модуль нужно просто вбить команду useradd (кстати, на мой вопрос о проверке допустимости имени Вы не знаете ответ, или просто пропустили вопрос?) и всё! Вы бы не могли ЕЁ привести (для всего процесса авторизации и отдельно для создаваемого модуля) конкретно, как она Вам представляется? Cхема, как я понимаю, примерно такая. 1. Пользователь вводит логин и пароль (либо в консоли, либо в DM) 2. Систем проверяет наличие этого пользователя, обратившись к nss и если его нет, то приглашение ввести пароль не выводится. 3a. Если юникс пользователь есть в /etc/passwd, nss выдает его данные (uid...) 3b. Если в /etc/passwd такого логина нет, вызывается Ваш nss модуль, который создает пользователя (либо добавив его в /etc/passwd прямо или через useradd, либо в свою анологичную базу) и также возвращает его данные. 4а. Вызывется pam_unix для аутентификации. 4b. При неудачной аутентификации pam_unix, вызывается pam_krb5 либо анологичный ntlm модуль. 4с. При этой неудачной аутентификации пользователю дается отказ. Вот и все Допустимость имени. Если хотите обезопасить систему от недопустимых имен, то при вызове useradd, он, естественно, что-то проверит. Иначе не знаю. Цитата: Т.е., если придерживаться принципа "Внесение минимума изменений в систему", то в исходниках разрабатываемого nss модуля можно просто забивать команды useradd, passwd, или я Вас неправильно понял? Можно, но мне кажется, лучше напрямую изменять свою отдельную базу пользователей.
  14. CAEman писал(а) Fri, 25 December 2009 13:23 Что-то я не совсем понял. Если для винды "domain" (или "your-org" в Вашей редакции) Да нет, я только хотел сказать, что для домена org.ru запись в ldap dc=org,dc=ru Цитата: ~ # ldapsearch -x -D uid=user-login,ou=Users,dc=domain -W Enter LDAP Password: ldap_bind: Invalid credentials (49) additional info: 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 525, vece Запись для пользователя uid=user-login,ou=Users,dc=domain используется обычно для учеток в openldap. В AD, может, по другому, вот Вы и не можете подключиться к серверу под этой учеткой. Цитата: Т.е., как я понял, схема такова: после введения логина и пароля проверяется наличие локального пользователя с таким логином (А МОЖНО ЗДЕСЬ ВВЕСТИ И ПРОВЕРКУ ВВЕДЁННОГО ПОЛЬЗОВАТЕЛЯ НА "ПУСТОТУ", ЧТОБЫ В ТАКОМ СЛУЧАЕ СРАЗУ ЗАВЕРШИТЬ АУТЕНТИФИКАЦИЮ С ОТРИЦАТЕЛЬНЫМ РЕЗУЛЬТАТОМ?) => а) если пользователь существует, то проверяется пароль существующего пользователя - аа) если пароль пустой, то ищется одноимённый пользователь на AD и сверяется его пароль - ааа) если какая-нибудь из проверок завершается с отрицательным результатом, то аутентификация завершается с отрицательным результатом; ааб) иначе локальному пользователю присваивается введённый пароль и происходит его первая загрузка; аб) иначе введённый пароль сверяется с паролем локального пользователя - аба) если проверка завершается с отрицательным результатом, то аутентификация завершается с отрицательным результатом; абб) иначе происходит загрузка локального пользователя; б) иначе создаётся локальный пользователь одноимённый введённому логину, если он будет допустимым для этого (кстати, ЭТО ПРОВЕРЯЕТСЯ АВТОМАТИЧЕСКИ, ИЛИ ЭТО КАК-ТО НУЖНО БУДЕТ ЗАБИТЬ В ИСХОДНИКЕ?), и ищется одноимённый пользователь на AD и сверяется его пароль - ба) если какая-нибудь из проверок завершается с отрицательным результатом, то аутентификация завершается с отрицательным результатом; бб) иначе созданному локальному пользователю присваивается введённый пароль и происходит его первая загрузка. Всё верно? Кстати, если я правильно понял одно из предыдущих Ваших сообщений, то грамотнее вместо "аутентификация" здесь было писать "авторизация", или нет? Можно ли реализовать такую схему, зависит от деталей pam механизма. Если я не забыл, мы с Вами выяснили, что при отсутствии пользователя, пароль модулю pam не передается. Модулю nss он и вовсе не передается. В этой схеме Ваш nss модуль создает пустого пользоватеся, а pam_krb5 (или аналогичный модуль для ntlm) проверяет его пароль. Думаю, лучше начать с этой более простой схемы. Цитата: В исходниках на С можно использовать команды kinit, useradd, passwd и др.? Как в противном случае можно реализовать текущую схему? Возможно и использование системных утилит. Но здесь (на достаточно низком уровне) более приемлемо редактировать файлы passwd... или (еще лучше) своего аналогичного по содержанию. kinit, если не писать pam модуль, и вовсе не понадобится.
  15. sv_lary писал(а) Fri, 25 December 2009 11:12 Цитата: Это лекго проверить. А меня заело... Я решил - ПРОВЕРИТЬ! И написал крохотную программку. Тексты, выданные компиллятором, я вставил прямо в текст программы в виде комментариев. Характерно, что сообщения об ОШИБКАХ появились именно там. где Вы и указывали. Хотя я смысла этого по прежнему и не понимаю... Но вот три дополнительных ВАРНИНГА меня убили... Короче, смотрите сами : int main(int argc, char argv[]) { char sym = '\a'; char *p_sym = &sym; char **pp_sym = &p_sym; char ***ppp_sym = &pp_sym;// 1. Запрещает ***var1= const char ***var1; var1 = ppp_sym; // предупреждение: несовместимый тип указателя в присваивании *var1 = pp_sym; // предупреждение: несовместимый тип указателя в присваивании **var1 = p_sym; ***var1 = sym; // ошибка: assignment of read-only location ‘***var1’// 2. Запрещвет **var2=char * const ** var2; var2 = ppp_sym; // предупреждение: несовместимый тип указателя в присваивании *var2 = pp_sym; **var2 = p_sym; // ошибка: assignment of read-only location ‘**var2’ ***var2 = sym;// 3. Запрещает *var3=char ** const * var3; var3 = ppp_sym; *var3 = pp_sym; // ошибка: assignment of read-only location ‘*var3’ **var3 = p_sym; ***var3 = sym;// 4.Запрещает var4=char *** const var4; var4 = ppp_sym; // ошибка: присваивание переменной ‘var4’, доступной только на чтение *var4 = pp_sym; **var4 = p_sym; ***var4 = sym;} Ошибки пойманы верно. Ради этого и задумывался const. Предупреждения связыны с тем, что в этих трех случаях нужно явно указать компилятору преобразования типа. var1 = (char const ***)ppp_sym; // char*** -> char const *** *var1 = (char const **)pp_sym; // char** -> char const ** var2 = (char * const **)ppp_sym; // char*** -> char * const ** Хотя мне кажется, достаточно было ограничиться предупреждениями при попытке обратного преобразования const char* -> char* Почему нет предупреждений в трех других случаях? **var1 = p_sym; // char* -> char const * *var2 = pp_sym; // char** -> char * const * var3 = ppp_sym; // char*** -> char ** const * Этого я не знаю. Может, особенности реализации компилятора. Наверное, правильным является явно указать преобразования типа и в этих случаях. Ну а в оставшихся все верно. Преобразования типа здесь не происходит. ***var2 = sym; **var3 = p_sym; ***var3 = sym; *var4 = pp_sym; **var4 = p_sym; ***var4 = sym; Проверил на gcc (Debian 4.3.2-1.1) 4.3.2 ошибки и предупреждения в тех же местах, что и у Вас.
  16. sv_lary писал(а) Fri, 25 December 2009 06:43 Цитата: Всё логично Т.е. я эти примеры понял так : const char ***var; // Запрещает ***var= char * const ** var; // Запрещвет **var= char ** const * var; // Запрещает *var= char *** const var; // Запрещает var= Или я опять ошибаюсь ? Это лекго проверить. )))
  17. sv_lary писал(а) Thu, 24 December 2009 06:10 Спасибо! Это надо просто выучить. Потому, что понять такое - невозможно.. Во всяком случае, после таких языков, как Pascal, Modula-2 или Ada... Многим нравится C как раз за такие вещи (Даёшь больше звёздочек!). Другие (выросшие на ассемблере любители низкоуровневого программирования), напротив, вовсе игнорируют const и ставят уровень предупреждений такой, чтобы компилятор молчал. А запомнить, мне кажется просто. Есть типы char, char*, char**... Также есть типы char const ( он же const char), char* const, char** const. Всё логично .
  18. sv_lary писал(а) Wed, 23 December 2009 06:32 Т.е. определение языка утверждает, что квалификатор const запрещает использовать идентификатор в качестве l-value. А в описании функции совершенно ясно говорится, что значение этого идентификатора УСТАНАВЛИВАЕТСЯ внутри функции. Т.е. он ИСПОЛЬЗУЕТСЯ в качестве l-value... И что это значит ?! const char ** var; запрещает **var= 'C'; но разрешает *var= "String"; также разрешает s= "String; var= &s; Для запрета последних используется char * const * var; и char ** const var;
  19. sv_lary писал(а) Tue, 22 December 2009 09:01 Есть функция, описаная как : int sqlite3_prepare(...4 параметра, а это пятый : const char **pzTail /* OUT: Pointer to unused portion of zSql */); Я ее вызываю следующим образом : char *pzTail;rc = sqlite3_prepare(..., &pzTail); Компиллятор (GCC) выдает предупреждение : Цитата: warning: passing arg 5 of `sqlite3_prepare' from incompatible pointer type Хоть это и warning всего, но все равно - обидно! Кто-то может объяснить, что здесь не нравится компиллятору ? Если вы используете const для проверки на стадии компиляции изменения данных, то это нужно делать везде. В вашем случае, определить перед вызовом функции. const char *pzTail; показывая компилятору, что данные, на которые указывает pzTail, не должны изменяться
  20. Byte писал(а) Mon, 21 December 2009 12:25 Кстати, а построутинг настраивать не надо для этого случая? Из представленных Алексеем сведений, это нельзя заключить наверняка. Если на прокси марштутизуется один ip, а остальные надо натить, то построутинг здесь нужен, а если вся подсеть - то нет, благо недостатка в серых адресах нету.
  21. Алексей писал(а) Sun, 20 December 2009 12:44 На роутере поднят нат и форвардинг, чтобы машины из сети могли ходить в интерент. Но мне не хочется на каждой машине настраивать прокси, потому я добавил правило в фаервол: iptables -t nat -A PREROUTING -s $LOCAL_NET -p tcp --dport 80 -j DNAT --to 192.168.100.100.8080 Но такая конструкция не работает. Возможно ли написать правило для всей сети, чтобы не настраивать каждого клиента? Если остальные правила прописаны верно, то iptables -t nat -A PREROUTING -s $LOCAL_NET -p tcp --dport 80 -j DNAT --to-destination 192.168.100.100:8080 по идее должно работать Цитата: ВАЖНО: сам роутер также стоит за прокси и также требует настройки Конкретно для этой задачи значения не имеет. PS: В том случае, конечно, если эти пакеты не надо s-натить.
  22. CAEman писал(а) Sat, 19 December 2009 11:50 Я, конечно, попробовал сделать, как Вы советуете, но я не понял к чему здесь ",dc=ru". Могу только констатировать, что с этим, что без этого АБСОЛЮТНО идентичный результат: " ~ # ldapsearch -x # extended LDIF # # LDAPv3 # base <dc=domain> (default) with scope subtree # filter: (objectclass=*) # requesting: ALL # # search result search: 2 result: 1 Operations error text: 00000000: LdapErr: DSID-0C090627, comment: In order to perform this ope ration a successful bind must be completed on the connection., data 0, vece # numResponses: 1 " Начните с $ telnet sever.your-org.ru 389 your-org.ru - это предполагаемое имя вашего домена (отсюда же и dc=ru в прошлом примере). Если сервер ответит, значит он слушает порт 389. Следующим шагом попробуйте связаться с сервером не анонимно на тот случай, что AD не поддерживает анонимных запросов. $ ldapsearch -x -D uid=user-login,ou=People,dc=yuor-org,dc=ru -W Имя контейнера пользователя (-D ...) уточните в документации по AD или посмотрите, подключившись к лдап серверу из венды. Цитата: 1) В этом случае ЛДАП может не работать, а будет использоваться керберос? В этом случае к лдап мы не обращаемся. Для аутентификации будет использовать в любом случае либо kerberos, либо ntlm. Цитата: 2) Возможно ли сделать так, чтобы в случае наличия локального пользователя, идентичного введённому, всё остальное до загрузки пользователя пропускалось бы? Если этот пользователь имеет локальный пароль, то так и должно быть, иначе пароль будет проверен в AD. Цитата: 2) Создаваться будет пользователь с введёнными и именем, и паролем (а не беспарольный, как Вы в прошлый раз писали)? В предполагаемой схеме у него не будет локального пароля. Пароль будет проверяться в AD. Цитата: 3) А как сделать, чтобы после проверки на АД с отрицательным результатом созданный пользователь удалялся бы? При данной схеме - это момент, о котором имеет смысл думать (если имеет), когда все остальное заработает. Цитата: 4) А путём редактирования упомянутого как-то исходника "winbind_nss_linux.c" не проще будет, чем писать с нуля? Наверное, проще, ведь все равно от чего-то стоит исходить. Но в результате получится во много раз меньший кусок кода.
  23. CAEman писал(а) Fri, 18 December 2009 15:08 Приведу ещё раз ldap.conf, но без закоммент. строк (для удобства): " host xxx.xxx.x.xxx server.domain base dc=domain ... " Как видите, указан ip адрес; утилита ldp.exe на подключённой к этому домену вин.машине подрубается к нему через порт 389, используемый по умолчанию клиентом, или всё равно нужно разкоммент. соответствующую строку? Все остальные строки были взяты мной из статьи http://developer.novell.com/wiki/index.php/HOWTO:_Configure_ Ubuntu_for_Active_Directory_Authentication. Не могли бы Вы вставить в свой ответ только нужные из этих строки? А особенности, свойственные именно подключению к AD, никак нельзя обнаружить на подключённой к этой АД вин.машине? Оставьте две строки BASE dc=your-org,dc=ru URI ldap://xxx.xxx.xxx.xxx/ строки, касающиеся nss, в данном случае излишни, так как Ваша AD не содержит этой информации. Цитата: А как это можно сделать, чтобы после проверки наличия пользователя в системе с отрицательным результатом создавался бы безпарольный одноимённый введённому пользователь, затем происходила бы опять проверка его наличия в системе, потом введённый пароль проверялся бы именно у одноимённого пользователя АД, и при положительном результате этот пароль присваивался бы созданному пользователю с последующей его первой загрузкой, а в случае отрицательного результата - созданный беспарольный пользователь не мог бы загружаться (а лучше - удалялся бы)? Я что-то себе этого даже представить не могу... Для этого нужно написать модуль nss, который при запросе создаёт пользователя c нужными uid,gid,home, прописывая его в /etc/passwd (или, если хотите, в своей базе) и возвращает его данные. В /etc/nsswitch.conf для базы passwd указываем passwd: compat ваш_модуль Вот, собственно, и все. Основная проблема - написать модуль nss (они, как и модули pam, традиционно пишутся на C).
  24. korbnik писал(а) Wed, 16 December 2009 12:28 В crontab-е root-а прописана вот эта строчка: 10 12 * * * history | /usr/bin/mailx -s "history `uname -n`" box_history@mail.ru но приходит письмо с сообщением: history: not found Null message body; hope that's ok Версия ОС: FreeBSD 6.2-RELEASE Заранее благодарен. 1. (not found). Укажите полный путь для uname. 2. (Null message body). Встроенная команда history может не поддерживаться шеллом, запускаемым по cron. Чаще всего это /bin/sh.
  25. CAEman писал(а) Fri, 11 December 2009 13:53 Т.е., как я понял, без работающего ldap клиента (кстати, у Вас нет никаких предположений насчёт причин и их устранения) Я думаю, что у Вас неправильно настроен ldap клиент. Главное - правильно указать адрес сервера (лучше ip) и порт, а также не написать чего лишнего (У Вас, например, присутствуют ненужные строки, касающиеся nss, pam...). Также могут быть особенности, свойственные именно подключению к AD. Цитата: заниматься редактированием исходников winbind'а не имеет смысла. Или я ошибаюсь? Разве что если Вы будете создавать пользователя без пароля, не проверяя его наличие в АД. А затем pam сверит пароль с АД, и, при несовпадении, не даст войти в систему. Недостаток один - расплодится много пользователей. Цитата: А kinit же и пароль проверяет (по крайней мере, при получении билета). Мы выяснили (во всяком случае так было написано в мане к найденному Вами pam модулю): если пользователя нет в системе, то соответствующему pam модулю НЕ ПЕРЕДАЕТСЯ пароль. А kinit без пароля бессмысленен.
×
×
  • Создать...