Документация по LinuxLinuxDoc.Ru 🔍
Как изменить максимальное количество открытых файлов?
  • 🕛 18 октября, 00:00
В ядрах 2.2.10 и более новых:
    echo 30000 > /proc/sys/fs/file-max echo 30000 > /proc/sys/fs/inode-max
и сделать ulimit -n 2000 перед запуском нужного демона. Цифры подбираются под задачу. (Yuriy Kaminsky 2:5020/517.21) И не забыть, что если программа использует select, то будет большой-большой облом. Вплоть до затирания стека и падения (at least glibc-2.0 - см. /usr/include/gnu/types.h - и иже с ним; исправления
    #define __FD_SETSIZE 1024
на нужное число и пересборки всех приложений и библиотек , которые могут заюзать select для дескрипторов выше 1024 будет достаточно [т.е., скажем, если X-овому приложению нужно открывать более 1024 файлов, то необходимо пересобирать Xlib и Xt как минимум]; ах, да, саму libc пересобирать, вроде, не нужно).
Подскажите, pls, www/ftp где можно получить доку по администрированию Linux-а.
  • 🕛 18 октября, 00:00
linuxdoc.org Hа русском языке - посмотрите на linux-ve.chat.ru
Q/A: development site для libc, binutils, ld.so
  • 🕛 18 октября, 00:00
ftp://ftp.yggdrasil.com/private/hjl - если кому-то понадобилась тухлятина. В частности, именно там надо искать libc5 последних версий) Сейчас все это лежит на ftp://ftp.kernel.org/pub/linux/software/ и его локальных миррорах. (ftp://ftp.ru.kernel.org не миррорит .bz2 (на 20% меньше gz, многое из каталога linux/kernel/people в .gz не выкладывается), поэтому вместо ftp://ftp.ru.kernel.org лучше пользоваться ftp://ftp.rmt.ru или ftp.filesearch.ru)
Как загружается система?
  • 🕛 18 октября, 00:00
Очень коротко, подробнее можно прочесть в вышеназванных источниках: ядро монтирует корневую файловую систему, и запускает первый процесс init, разыскав его исполняемый файл в нескольких стандартных местах. Этот процесс читает свой конфигурационный файл /etc/inittab (man inittab) и запускает все остальные процессы согласно инструкциям из этого файла. Обычно в inittab прописывается запуск процессов *getty, управляющих терминалами, виртуальными консолями и последовательными линиями (то есть именно *getty ответственны за запуск login (сравнивающий имя и пароль, указанные пользователем, с тем, что прописано в /etc/passwd и в случае успеха запускающий соотв. shell), pppd, ifcico и т.д., что именно запускается и в каком случае - зависит от конкретного getty). Для виртуальных консолей обычно используется mingetty, для модемов - mgetty. Кроме того, здесь же прописываются скрипты, запускающиеся на различных т.н. "уровнях выполнения", из которых в свою очередь запускаются все остальные системные сервисы, осуществляется настройка сети, проверка файловой системы и т.д. Существует два подхода к организации этих уровней и скриптов: BSD и SysV. Оба они описаны в книжке Э. Немет (см. выше), а про SysV можно еще прочесть на sensi.org/~alec/unix/redhat/sysv-init.html.
После удаления /var/log/syslog и /var/log/messages и пеpезагpузки эти файлы не пополняются и некотоpые сообщения идут на консоль. Как пpавильно чистить log-и?
  • 🕛 18 октября, 00:00
Логи могут быть от syslog-а и от отдельных демонов. syslog-овые логи чистятся так:
    mv $log ${log}.old (или rm если не нужен, но лучше сохpанить) touch $log kill -1 `cat /var/run/syslogd.pid`
Процесс автоматизируется с помощью logrotate. Как чистить не-syslog-овые логи - только RTFM на конкpетную тулзу и никак иначе.
Где взять документацию на pam?
  • 🕛 18 октября, 00:00
kernel.org/pub/linux/libs/pam/
В BSD с помощью su рутом может становиться только user, пpописанный в гpуппе wheel, а в Linux-е - кто угодно. Hехоpошо это как-то. Может быть, есть путь это испpавить?
  • 🕛 18 октября, 00:00
Надо ставить su не из gnu sh_util, которая в принципе этого не умеет (RTFmanpage на предмет, по чьей милости), а какую-нибудь другую. Но ежели su пользует pam (в Red Hat, напpимеp и основанных на нем дистрибутивах, а также в Debian 2.2), подобное поведение достигается добавлением стpочки:
    su auth required pam_wheel.so
в /etc/pam.conf, если pam дpевний, или:
    auth required pam_wheel.so
в /etc/pam.d/su, если поновее. Такой механизм получше будет, поскольку поведение можно ваpьиpовать на ходу. Hапpимеp, манипулиpуя паpаметpами -group- и -deny-, pазpешить это делать всем, кpоме одной гpуппы:
    pam_wheel.so group=guest deny
Пpавда, модуль этот стpанный, забывает смотpеть на gid, а смотpит только на groups... А может так и надо... В Debian 2.1 надо поставить пакетик secure-su и посмотреть на файл suauth. В Slackware от 3.3 (гаpантиpовано) это pешается путем pедактиpования /etc/login.defs Hужно, что бы было
    SU_WHEEL_ONLY yes
тогда su смогут использовать только входящие в гpуппу root. В слаквари от 3.4 (до 4.0, где su опять из другой банки) лучше прочесть сперва man 5 suauth - там возможна гораздо более гибкая настройка su, чем тупая "группа ноль". Если память не вpет, то это же спpаведливо в SuSe 6.x. В SuSE 5.3 su из sh_util, со всеми вытекающими. К сожалению, su, понимающая login.defs и suauth, страдает другими болезнями - в частности, не имеет удобных ключиков -m и -s. Если секьюрити важнее удобства...
Как сделать так, чтобы программы XXXX и YYYY могли одновременно использовать модем или еще что-то на терминальном порту?
  • 🕛 18 октября, 00:00
Во-первых, они должны использовать одно и то же имя файла для доступа к порту, скажем, /dev/modem. Если одна программа использует /dev/ttyS0, а другая /dev/cua0 (а третья -- /dev/modem, который линк на один из этих двух :), - то они точно передерутся. Во-вторых, они должны использовать механизм lock-файлов. Hаверное, все известные программы его используют, но все же. В-третьих, они должны видеть локи друг друга. То есть, в их конфигурации должен быть указан один и тот же каталог для создания локов, они должны использовать один и тот же формат имен файлов (обычно LCK..<имя файла порта>), один и тот же формат самих файлов (обычно десять символов -- PID программы в ASCII), и иметь привилегии, достаточные для создания и удаления своих лок-файлов.
В чем pазница между /dev/cua* и /dev/ttyS*?
  • 🕛 18 октября, 00:00
Hе надо пользовать cua*. То есть вообще. Они в ядре - только для обратной совместимости со схемой, принятой в BSD. В BSD /dev/cuXX -- это "Call Up" порты, т.е. для исходящих звонков -- на них всегда есть CD. В Linux /dev/cuaXX не применяется и новые ядра даже выдают предупреждение.
Как правильно настроить время на машине с Linux? Как синхронизировать его с Интернетом? Как синхронизировать клиентов с сервером?
  • 🕛 18 октября, 00:00
Для установки времени в CMOS используется утилита hwclock из свежего комплекта util-linux. Если на вашей машине стоит только Linux, то очень удобно записать в CMOS время по Гринвичу, а в одном из стартовых скриптов сказать
    /sbin/hwclock --hctosys --utc
Если на машине стоит, кроме Linux, какая-то другая операционная система, то в CMOS пишется местное время, а в стартовом скрипте пишется просто
    /sbin/hwclock --hctosys
Для того, чтобы программы правильно определяли местное время (с учетом летнего времени и тому подобных обстоятельств), надо:

убрать из стартовых скриптов всякие упоминания переменной окружения TZ, если таковые имеются;

сделать так, чтобы файл /etc/localtime был правильной символической ссылкой на соответствующий файл из /usr/share/zoneinfo, например,
    rm -f /etc/localtime ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
В Red Hat-based системах параметр utc задается в файле /etc/sysconfig/clock. Непосредственно редактировать стартовые скрипты не нужно. Кроме того, этот параметр и timezone можно задать с помощью утилиты timeconfig. Проверить правильность задания времени можно, запустив сначала ``date-- (должна показать правильное местное время), а затем ``date --utc-- (должна показать правильное время по Гринвичу). Для того, чтобы синхронизировать время с часовыми серверами в Internet, сходите на ntp.org. Там раздается пакет xntpd и приведен список публично доступных часовых серверов в Интернете. Из всего комплекта xntpd вам потребуется лишь программа ntpdate. Периодически, например, при каждом звонке провайдеру, выполняйте, например, такую команду:
    /usr/local/bin/ntpdate ntp1.gamma.ru
Если на вашей машине под Linux установлена Samba, то клиенты под MS Windows могут синхронизировать время с этой машиной с помощью команды
    C:> NET TIME \LINUXBOX /SET /YES
("Alexey Mahotkin" mailto:alexm@hsys.msk.ru)
А как смонтировать дискету если я не root?
  • 🕛 18 октября, 00:00
Попробуйте fdmount /dev/fd[0-9] mountpoint, ну и не забыть почитать man fdmount, или root мог написать -user- в /etc/fstab, и обычный пользователь может говорить "mount <mountpoint>". man 8 mount. Еще лучше вовсе не монтировать дискеты, а пользоваться mtools.
Отчего кое-кто (INN, SENDMAIL) так долго думает при старте?
  • 🕛 18 октября, 00:00
Hадо заглянyть в директорию /var/log и посмотреть, нет ли в логах сообщений от этой программы. Для sendmail - 99% воплей пpо долгое думанье объясняется попыткой pезолвинга адpесов локальных интеpфейсов. Hадо эти адpеса занести в /etc/hosts. Альтеpнативный ваpиант - O DontProbeInterfaces=True в /etc/sendmail.cf.
А чего бы такого крутого предпринять по части безопасности системы?
  • 🕛 18 октября, 00:00
Для начала прочтите /usr/doc/HOWTO/Security-HOWTO. Hа openwall.com можно найти патч Solar Designer-а, который помогает от исполняемого стека и еще восьмидесяти восьми болезней. Кроме того, рекомендуется придирчиво изучать rootshell.com packetstorm.securify.com, linuxsecurity.com , и подписаться на списки рассылки bugtraq, linux-security, и список по безопасности того дистрибутива, которым вы пользуетесь. Еще одна, хотя и несколько радикальная ссылка: infowar.co.uk/thc/files/thc/anonymous-unix.html
Хочу скопировать один диск на другой. Как?
  • 🕛 18 октября, 00:00


Если имеется ввиду перенос содержимого одной файловой системы в другую, то одним из корректных способов сделать это будет ( cd /old_fs && tar cf - . ) | ( cd /new_fs && tar xvpf - )

dump 0f - /old_fs | ( cd /new_fs && restore xf - ) и набирать побыстрее, и понять легче, и кое-что, что у tar не получится или получится с трудом, таким образом можно скопировать (атрибуты, файлы с "дырками"). Для tar можно и попроще: tar -C /old_fs -cf - . | tar -xpf - -C /new_fs - GNU tar более интеллектуальная штука, чем dump.

Подробное руководство есть в /usr/doc/HOWTO/mini/Hard-Disk-Upgrade
Зачем нужны странные права доступа на каталогах, например, sticky или setgid bit?
  • 🕛 18 октября, 00:00
Sticky bit (chmod +t) на каталоге означает, что файлы в этом каталоге могут стирать только их владельцы или суперпользователь. Обычно на /tmp и /var/tmp этот бит включен. Setgid бит (chmod +g) на каталоге означает, что файлы, созданные в этом каталоге, будут иметь ту же группу-владельца, что и сам этот каталог. Также, если в setgid-каталоге создаются другие каталоги, то они также будут иметь setgid-бит. По словам ДиДжея Бернстайна, "есть три метода задания групп-владельцев файлов: BSD-шный, бесполезный и SVR4-й. При BSD-шном методе файлы всегда получают ту же группу-владельца, что и каталог, в котором они были созданы. Это очень удобно с точки зрения администратора.(*) При бесполезном методе новые файлы принадлежат основной группе, на правах которой выполняется текущий процесс. Этот случай моментально приводит к настоящему кошмару. SVR4-й метод почти совпадает с бесполезным, но если на каталоге есть setgid-бит, то включается BSD-шный метод." Заметьте, что с помощью флага монтирования bsdgroups можно включить BSD-шный метод работы с группами-владельцами. Подробности -- mount(8). (*) Объяснение, почему удобно, можно найти в руководстве Red Hat - rhref/s1-sysadmin-usr-grps.htm, Users, Groups and User-Private Groups)
Сообщения на экране или в логах: modprobe: Can-t locate module <имя-модуля>
  • 🕛 18 октября, 00:00
Такое сообщение может появляться по нескольким причинам:

Такого модуля действительно нет. В этом случае нужно выяснить его назначение и причину, по которой система пытается его загрузить. Затем, в зависимости от результатов выяснения, либо прописать в modules.conf (про формат которого есть man-страница) такую строку:
    alias <имя-модуля> off
либо собрать этот модуль из его исходных текстов или исходных текстов ядра Linux.

Такой модуль существует, но программа modprobe, вызываемая ядром, не может установить соответствие между именем модуля, которое передает ядро и реальным именем файла, содержащего этот модуль. В этом случае нужно либо обновить пакет modutils, либо прописать в /etc/modules.conf:
    alias <что-не-может-найти> <имя-файла-без-.o>
(я буду признателен тому, кто укажет способ установить это соответствие, если оно не прописано внутри modprobe)

Мы в соцсетях ✉