КатегорииLinksUnix Tutorial
Personal Development Ruslan Valiev Solaris Performance Team Damien Farnham Fintan Ryan Nicky Veitch Niall Mullen Sean McGrath DTrace Bryan Cantrill Brendan Gregg ZFS Tim Foster General Ben Rockwood Learning Solaris 10 Privacy policy Архивы |
Friday, 9 November. 2007
Новый вебсайт: DTrace ... Добавил Gleb Reys
в категории DTrace в
14:53
Комментарии (0) Обратные ссылки (0) Select language: English
Новый вебсайт: DTrace Scripts
Через вебсайт CurThread.org я недавно узнал о новом онлайн проекте: DTrace Scripts. Похоже на проект создания постоянно развивающейся коллекции скриптов и советов для DTrace, так что очень приятно видеть очередной проект, делающий эту замечательную технологию более известной и доступной в Unix кругах.
Wednesday, 8 February. 2006
Хорошая статья по DTrace Добавил Gleb Reys
в категории DTrace в
16:32
Комментарии (2) Обратные ссылки (0) Select language: English
Хорошая статья по DTrace
Благодаря Адаму Левенталю, одного из авторов DTrace, я узнал о недавней статье про DTrace, написанной Брайаном Кантриллом.
Статья мне очень понравилась, так что немедленно добавил её в мой индекс ресурсов по DTrace. Сама статья доступна по этой ссылке: Hidden in Plain Sight Friday, 27 January. 2006
Полезные ресурсы по ... Добавил Gleb Reys
в категории DTrace в
13:06
Комментарии (0) Обратные ссылки (0) Select language: English
Полезные ресурсы по DTrace
Наконец-то положил начало ещё одной хорошей традиции на моём блоге. С сегодняшнего дня я буду поддерживать индекс ссылок на мои статьи по DTrace и добавлять к нему ссылки на все остальные ресурсы по DTrace, которые мне показались интересными.
Данная коллекция ссылок находится по этому адресу: http://solaris.reys.net/dtrace Wednesday, 21 December. 2005
DTrace: игры с mod_auth_pam и ... Добавил Gleb Reys
в категории DTrace в
13:29
Комментарии (12) Обратные ссылки (0) Select language: English
DTrace: игры с mod_auth_pam и Apache 2
Один из пользователей попросил помочь ему с настройкой PAM аутентификации в Apache 2, на одном из наших удалённых серверов.
Казалось бы, простая до безобразия задача - скачать mod_auth_pam, скомпилировать его для Apache 2, и проверить, что всё работает. Система использует NIS, потому что я на неё смог запросто зайти. И что же? Не тут-то было! Модуль скомпилировался запросто, но работать отказывался - в error_log'е упорно появлялись следующие строки (я разбил строку на двое, а то портится общий вид блога): CODE: [Tue Dec 20 16:48:44 2005] [error] [client xxx.xxx.xxx.xxx] \ PAM: user 'greys' - not authenticated: No account present for user Всё это пользователь сделал сам, с моими мелкими наводками. На данной стадии он попросил дополнительной помощи, и я, дабы упростить задачу, решил: 1) Перевести эксперименты с системы пользователя на свой Solaris 10-бокс. 2) Для начала отладить процедуру для локальных пользователей, а уже потом браться за NIS Увидев аналогичные ошибки на своей системе, я решил всерьёз взяться за PAM. Завёл строки в /etc/pam.conf специально для Apache, и добавил к ним опцию debug: CODE: httpd auth required pam_authtok_get.so.1 debug httpd auth required pam_unix_auth.so.1 debug Чтобы удобнее ловилась отладочная информация, подправил /etc/syslog.conf, чтобы он включал следующие строки: CODE: auth.debug /var/log/auth_log user.debug /var/log/user_log После этого стало удобнее наблюдать, что же именно происходит - по крайней мере, было ясно, что исполняется как раз та часть /etc/pam.conf, которая и была нужна. Но ошибка по-прежнему вводила меня в тупик - пользователь явно существовал, но Apache'м упорно не распознавался (опять приходится переносить строки, чтобы общий вид блога не портился): CODE: Dec 21 09:47:35 pele httpd[29143]: [ID 634615 user.debug] \ pam_authtok_get:pam_sm_authenticate: flags = 1 Dec 21 09:47:35 pele httpd[29143]: [ID 378613 user.debug] \ pam_dhkeys: user greys not found Dec 21 09:47:35 pele httpd[29143]: [ID 896952 user.debug] \ pam_unix_auth: entering pam_sm_authenticate() Dec 21 09:47:35 pele httpd[29143]: [ID 219349 user.debug] \ pam_unix_auth: user greys not found Настал момент посмотреть, что же именно делают PAM и Apache 2, когда я ввожу запрашиваемые имя пользователя и пароль для доступа к странице. Тут я сразу вспомнил про замечательный скрипт opensnoop от товарища Брэндана Грэгга (Brendan Gregg). И данный скрипт, запущенный в отдельной консоли, тут же помог мне увидеть, в чём была проблема: CODE: 60001 24744 httpd -1 2 /etc/pam_debug 60001 24744 httpd 11 0 /etc/pam.conf 60001 24744 httpd 11 0 /usr/lib/security/pam_authtok_get.so.1 60001 24744 httpd 11 0 /usr/lib/passwdutil.so.1 60001 24744 httpd 11 0 /usr/lib/libsldap.so.1 60001 24744 httpd 11 0 /usr/lib/security/pam_dhkeys.so.1 60001 24744 httpd 11 0 /usr/lib/security/pam_unix_cred.so.1 60001 24744 httpd 11 0 /lib/libbsm.so.1 60001 24744 httpd 11 0 /lib/libsecdb.so.1 60001 24744 httpd 11 0 /usr/lib/libproject.so.1 60001 24744 httpd 11 0 /lib/libproc.so.1 60001 24744 httpd 11 0 /lib/librtld_db.so.1 60001 24744 httpd 11 0 /lib/libelf.so.1 60001 24744 httpd 11 0 /lib/libctf.so.1 60001 24744 httpd 11 0 /usr/lib/security/pam_unix_auth.so.1 60001 24744 httpd -1 2 /var/run/syslog_door 60001 24744 httpd -1 13 /etc/shadow 60001 24744 httpd 11 0 /var/run/name_service_door 60001 24744 httpd 11 0 /etc/passwd 60001 24744 httpd -1 13 /etc/shadow 60001 24744 httpd -1 2 /var/run/syslog_door Как видно, httpd не мог открыть файл /etc/shadow (ошибка - код -1), естественно из-за ошибки доступа. Но на всякий случай это можно было проверить. Второй номер в строке про /etc/shadow - это 13, код ошибки: CODE: bash-3.00# grep 13 /usr/include/sys/errno.h #define EACCES 13 /* Permission denied */ Ну и после этого всё уже было делом техники: CODE: #groupadd shadows # chown root:shadows /etc/shadow # chmod 440 /etc/shadow И осталось указать в httpd.conf, чтобы Apache запускался как раз под этой группой, а не под nobody. pS: а изначально это всё не работало на машине с NIS-доступом, потому что там в /etc/nsswitch.conf было написано не passwd: files nis, а passwd: compat, и всё использование NIS'а было сделано с помощью указания групп с помощью + и - в файлах /etc/passwd и /etc/shadow. Т.е. доступ на чтение /etc/shadow всё равно нужен, хотя реально потом это и будет обращение к NIS. Tuesday, 13 December. 2005
DTrace: наблюдение за ... Добавил Gleb Reys
в категории DTrace в
02:16
Комментарии (2) Обратные ссылки (0) Select language: English
DTrace: наблюдение за PHP, часть 2
Следующим шагом наблюдения за PHP с помощью DTrace вполне может стать подобный скрипт. Он подсчитывает, сколько наносекунд провёл процесс Apache, выполняя ту или иную функцию PHP.
В ходе работы, скрипт выводит таблицу процессов Apache и скриптов PHP, в них запускаемых. Позже выводится таблица всех функций, с указанием процесса, который их выполнял, и затраченного времени. Скрипт можно скачать тут: php-scripts-timer.d CODE: #!/usr/sbin/dtrace -s #pragma D option quiet BEGIN { printf("php scripts timer started\n"); } :dtrace.so::function-entry / copyinstr(arg0) == "" && name[pid,copyinstr(arg1)] != 1 / { printf("%d -> %-30s\n", pid, copyinstr(arg1)); name[pid,copyinstr(arg1)] = 1; } :dtrace.so::function-entry / copyinstr(arg0) != "" / { self->ts = timestamp; } :dtrace.so::function-return / copyinstr(arg0) != "" / { self->elapsed = timestamp - self->ts; @time[pid, copyinstr(arg0)] = sum(self->elapsed); } END { printf("<------ php scripts timer finished"); printf("\n%10s %40s %14s\n", "PID", "PHP function", "Time elapsed"); printa("%10d %40s %14@u\n", @time); } А вот так может выглядеть типичный результат запуска этого скрипта, при параллельно открываемых с вашего сервера страниц с PHP: CODE: php scripts timer started
223074 -> /export/www/nightly/pma/left.php 223071 -> /export/www/nightly/pma/main.php 223074 -> /export/www/nightly/pma/css/phpmyadmin.css.php 223071 -> /export/www/nightly/pma/css/phpmyadmin.css.php <------ php scripts timer finished PID PHP function Time elapsed 223074 ob_get_level 22280 223074 get_cfg_var 32678 223074 mysql_get_client_info 32705 223074 strrpos 39160 223074 PMA_auth_set_user 39178 223071 get_magic_quotes_gpc 39478 223071 ob_get_level 43673 223071 addslashes 54847 223074 strpos 56869 223071 basename 61874 223071 PMA_reloadNavigation 63588 223071 mysql_get_client_info 64570 223071 get_cfg_var 64592 223071 ereg_replace 65993 223074 get_magic_quotes_gpc 67738 ... 234950 main 84254684 238255 main 105016748 238255 substr 153752861 238255 mysql_query 192585647 238255 PMA_DBI_try_query 195113800 234950 PMA_DBI_query 220108343 234950 mysql_query 276732073 234950 PMA_DBI_try_query 280801228 |




