Вывод команды ls сбивает с толку для необработанного образа KVM в XFS

Домашние каталоги не нужно размещать в / home , и ваша программа ошибочна, если она жестко фиксирует любые такие предположения, что все домашние каталоги имеют общий родительский элемент или тот, который называется / home .

/ home - это даже не универсальное соглашение. Идея

/ home возникла довольно давно после того, как был изобретен Unix. В ранних версиях Unix использовались другие каталоги. Это все еще можно увидеть сегодня в операционных системах, таких как FreeBSD (и ее производные), где / home является символической ссылкой, а пользовательские каталоги фактически находятся в / usr / home .

Solaris также помещает «настоящие» домашние каталоги в / export / home , так что / home может быть заполнен автоматическим монтированием NFS и т.п.

/ home не является родительским для многих общих домашних каталогов.

Есть множество домашних каталогов, которых нет в / home .

  • Наиболее очевидным из них является / root , домашний каталог для суперпользователя, перемещенный из своего более старого местоположения в / , чтобы личные и «точечные» файлы root не загромождали корневой каталог, но хранится в корневом томе, чтобы суперпользователь мог войти в систему даже при сбое монтирования других дисковых томов.
  • У различных программ-демонов есть домашние каталоги в других местах для выделенных учетных записей, под которыми эти демоны запускаются.
    • различные учетные записи dæmon qmail используют, например, / var / qmail или / var / qmail / alias . Последний даже обычно называют ~ псевдоним и предназначен как домашний каталог с файлами ~ alias / .qmail , как и у других (реальных) пользователей. 'домашние каталоги.
    • Различные серверные программы HTTP (S) и FTP имеют (официальные или неофициальные) соглашения. Например: домашние каталоги для виртуальных хостов с выделенными системными учетными записями могут быть / var / www или / var / www / $ VHOST .
    • Другое программное обеспечение можно найти в различных операционных системах с использованием домашних каталогов для неличных учетных записей пользователей, таких как / var / unbound , / var / db / mysql и ] / var / db / tor .
    • Различные обычные неличные учетные записи пользователей имеют домашние каталоги, такие как / sbin , / var / adm , / var / spool / lpd , ] / var / spool / mail , / var / spool / news , / var / spool / uucp и так далее.
  • В OpenBSD учетная запись системного оператора имеет домашний каталог / operator , а различные неличные учетные записи пользователей имеют / var / empty в качестве своих домашних каталогов.

Домашние каталоги не обязательно должны оставаться в / home .

Домашние каталоги можно переместить после создания учетной записи с помощью -d ( - home ) и -m ( - move- home ) к команде usermod в операционных системах Linux.

Пользовательский модуль OpenBSD имеет те же параметры. (Не делайте то же самое с командой pw usermod во FreeBSD, TrueOS / PC-BSD и др. Комбинация -m -d имеет несколько иное значение. )

Домашние каталоги не нужно создавать в / home .

Можно изменить даже обычный родительский каталог, используемый при создании учетных записей, и не обязательно / home .

В операционных системах Linux и OpenBSD параметр -b ( - base-dir ) команды useradd указывает родительский объект, в котором создаются домашние каталоги, если не назван явно с помощью -d ( - home ). Базовый каталог по умолчанию - это переменная base_dir в /etc/usermgmt.conf в OpenBSD и переменная HOME в / etc / default / useradd во многих Linux. Системный администратор может изменить это по своему усмотрению.

На FreeBSD, TrueOS / PC-BSD и др. есть опция -b , аналогичная команде pw useradd , и значение по умолчанию для нее можно изменить с помощью переменной home в /etc/pw.conf .

Как справиться с этим

Ваша программа не должна жестко закреплять какие-либо ожидания относительно расположения домашних каталогов или их родителей.

  • Если вы хотите узнать домашний каталог текущего вошедшего в систему пользователя, используйте переменную среды HOME .Он настраивается такими программами, как login , userenv или systemd при переключении на учетную запись для входа в систему. Если нет переменной среды HOME , правильным решением будет просто прерывание на том основании, что переменные среды сеанса входа в систему должны присутствовать для запуска вашей программы.В противном случае вы можете вернуться к получению эффективного / реального (при необходимости) UID процесса и запроса базы данных паролей.
  • Если вы хотите узнать домашний каталог конкретного пользователя, запросите базу данных паролей с помощью getpwnam () / getpwnam_r () или getpwuid () / getpwiud_r () библиотечные функции и вытащите поле pw_dir . (Обратите внимание, что это поле может иметь значение NULL или может указывать на строку нулевой длины .)
  • Если вы хотите символически обозначить домашний каталог для пользователя способом, который не зависит от его фактического местоположения , вы можете принять соглашение о расширении тильды в виде оболочки: ~ JdeBP . Многие программы делают это, от vim до mailx .

Дополнительная литература

2
07.11.2016, 22:02
0 ответов

Теги

Похожие вопросы