Intereting Posts
Как защитить малиновый пирог, контролируемый SSH, против вредоносной программы Linux.MulDrop.14? Как найти все шестнадцатеричные числа между двумя номерами Как остановить гнома от принуждения меня к выходу из системы? Приложения GTK не уважают составление сопоставлений клавиш Использование ~ в цели символической ссылки или создание символической ссылки с переменной Низкая глубина цвета при использовании X11 на мониторе Какое измерение единицы измерения используется в edquota? Как установить Adobe Acrobat Reader в Debian? Клавиша отключения для солнечной батареи с последовательным разъемом Как создать загрузочную флешку для «efi-shell» Как загрузить много документов на терминал с сервера? Как сделать `sudo` сохранить $ PATH? Используйте rsync для сравнения удаленного каталога с локальным и сохраните различия в другом локальном каталоге обновить gnome в centos 6.4 DNS-запросы, не использующие nscd для кэширования

Как bash знает, как его вызывают?

Я установил jailkit на Ubuntu 12.04 и я установил оболочку пользователя в /bin/bash но когда он вызывается, он запускает /etc/bash.bashrc вместо /etc/profile

Если вы еще не использовали jailkit прежде чем в этом заключается суть:

  1. «Где-то где-то где-то создаётся« корневая »версия системного корня, например / home / jail
  2. Подгруженные домашние каталоги домашних пользователей перемещаются внутри этой папки, например / home / jail / home / testuser
  3. Файлы конфигурации Relavant копируются в / home / jail / etc / – включая ограниченный / etc / passwd
  4. Программы, которые вы хотите разрешить доступ, копируются в соответствующие каталоги, например / bin / bash
  5. Когда в тюрьме пользователь входит в систему, они chrooted в / etc / jail / и не могут видеть файлы выше этого

Итак, у меня есть testuser которого есть запись в /etc/passwd например:

 testuser:x:1002:1003::/home/jail/./home/testuser:/usr/sbin/jk_chrootsh 

В файле /home/jail/etc/passwd есть запись типа:

 testuser:1001:1003::/home/testuser:/bin/bash 

Я прочитал хотя bash(1) и поэтому я думаю, что проблема в том, что bash считает, что он не вызывается в качестве оболочки входа:

Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с параметром –login, она сначала считывает и выполняет команды из файла / etc / profile, если этот файл существует.

Я получаю, что bash на самом деле вызывается /usr/sbin/jk_chrootsh но я не понимаю, как bash определяет, какой тип оболочки он и какой набор файлов запуска он должен запускать.

Я хотел бы узнать, могу ли я устранить эту проблему, но я не понимаю:

Как bash знает, как его вызывают?

ps: Я также заглянул в login(1) без большой удачи.

Обычно bash знает, что это оболочка для входа, потому что когда программа входа в систему вызывает ее, она сообщает bash, что ее имя -bash . Это имя находится в argv[0] , аргументе командной строки в нуле, что обычно является способом, которым пользователь вызывается программой. Начальный дефис – это соглашение, чтобы сообщить оболочке, что это оболочка входа. Bash также ведет себя как оболочка входа, если вы передадите ему опцию --login или -l . См. Раздел Разница между оболочкой входа и оболочкой без входа в систему? Больше подробностей.

Начиная с Jailkit 2.16, jk_chrootsh читает абсолютный путь к оболочке для вызова из разных источников и передает этот путь как argv[0] и передает свои аргументы командной строки до этой оболочки. В обычном случае использования, когда jk_chrootsh сам используется в /etc/passwd , невозможно передать аргумент, такой как -l . Поскольку абсолютный путь не начинается с - , нет никакого способа сделать jk_chrootsh вызывать оболочку входа, не используя небольшую промежуточную программу.

 #include <unistd.h> int main () { execl("/bin/bash", "-bash", NULL); return 127; } 

Я бы ожидал, что jk_chrootsh будет иметь простой способ вызвать оболочку входа. Я предлагаю сделать запрос функции.

login вызывает команду / оболочку входа пользователя с ее argv[0] начиная с - . Оболочки проверяют свой argv[0] чтобы определить, вызываются ли они в качестве оболочки входа.

Как говорит @slm, это четко указано в разделе «Вызов» руководства bash .

Кроме того, несколько оболочек, таких как csh , tcsh , ksh , zsh , yash , bash и некоторые варианты оболочки Almquist, поддерживают параметр -l чтобы включить режим login в login без необходимости смешиваться с первым аргументом. Это не используется при login , но вы можете использовать его, если хотите имитировать оболочку входа от чего-то (например, большинство оболочек), где трудно выполнить команду с произвольным argv[0] . Я видел, как он использовался графическими менеджерами входа.

Взгляните на страницу bash man . Они обсуждают различия в том, как там можно ссылаться. Раздел называется INVOCATION . 2 основных способа его вызова вызываются как оболочка входа ( bash -l ) и как интерактивная оболочка ( bash -i ).

Взгляните на этот другой раздел вопросов и ответов Unix и Linux под названием « Разница между оболочкой входа и оболочкой без входа»? , Это в значительной степени охватывает то, о чем вы просите.