<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; Вопрос по залогиниванию]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=36831&amp;type=atom" />
	<updated>2014-11-25T15:13:37Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=36831</id>
		<entry>
			<title type="html"><![CDATA[Re: Вопрос по залогиниванию]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=432746#p432746" />
			<content type="html"><![CDATA[<p>Спасибо, подробно)</p>]]></content>
			<author>
				<name><![CDATA[Aether]]></name>
				<uri>https://linuxforum.ru/profile.php?id=36320</uri>
			</author>
			<updated>2014-11-25T15:13:37Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=432746#p432746</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Вопрос по залогиниванию]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=432669#p432669" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>в<strong>ы</strong>ходных данных</p></blockquote></div><p>опечатка...<br /></p><div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>Так вот, предположим, мы обратились к файлу, с запрещённой для нас записью, стало быть именно ядро должно принять решение можно нам с ним работать или нет, сверяя, UID, GID... Write() вернёт программе результат: либо отказ в доступе, либо операция исполнена.</p></blockquote></div><p>да всё так, только это всё делается во время open(2)<br /></p><div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>login имеет изначально права root, setuid понижает её права до UID выбранного пользователя?</p></blockquote></div><p>да, но это делается уже для нового процесса, после fork&#039;а, но до exec&#039;а. т.е. сам login это не затрагивает...<br /></p><div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>Получается, если я создам программу, включу библиотеку unistd.h, сделаю вызов setuid() на любого пользователя, то она либо переключит UID процесса в случае запуска из под root, либо выдаст ошибку при запуске из-под любой другой учётной записи.</p></blockquote></div><p>да...<br /></p><div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>Если можно, то хотел бы уяснить: что такое реальный, а что такое эффективный UID?</p></blockquote></div><p>они одинаковы почти всегда: euid отличается только у программ с установленным setuid битом... в остальных случаях их можно не различать...</p>]]></content>
			<author>
				<name><![CDATA[Fat-Zer]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11911</uri>
			</author>
			<updated>2014-11-25T01:12:44Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=432669#p432669</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Вопрос по залогиниванию]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=432666#p432666" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>Так это сути дела не изменит, как я понял, в системах с systemd, процессом init является файл-ссылка на systemd. Инициализирующим может являться, вообще, какой угодно процесс.</p></blockquote></div><p><a href="http://unix-pro.ru/un/linux/linuxlesson/53-polnomochija-polzovatelja.html">http://unix-pro.ru/un/linux/linuxlesson … telja.html</a></p>]]></content>
			<author>
				<name><![CDATA[Wolfenberg]]></name>
				<uri>https://linuxforum.ru/profile.php?id=9425</uri>
			</author>
			<updated>2014-11-25T00:29:52Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=432666#p432666</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Вопрос по залогиниванию]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=432621#p432621" />
			<content type="html"><![CDATA[<p><strong>Aether</strong>, я всего лишь юзер. Но даже я не понял всего драматизма и пафоса вопроса. Переформулируйте пожалуйста! Внятно.</p>]]></content>
			<author>
				<name><![CDATA[stranger]]></name>
				<uri>https://linuxforum.ru/profile.php?id=33370</uri>
			</author>
			<updated>2014-11-24T16:08:17Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=432621#p432621</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Вопрос по залогиниванию]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=432595#p432595" />
			<content type="html"><![CDATA[<p>Так это сути дела не изменит, как я понял, в системах с systemd, процессом init является файл-ссылка на systemd. Инициализирующим может являться, вообще, какой угодно процесс.</p>]]></content>
			<author>
				<name><![CDATA[Aether]]></name>
				<uri>https://linuxforum.ru/profile.php?id=36320</uri>
			</author>
			<updated>2014-11-24T14:31:34Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=432595#p432595</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Вопрос по залогиниванию]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=432570#p432570" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>которые запускает init</p></blockquote></div><p>Почему только он? Мы systemd не рассматриваем?</p>]]></content>
			<author>
				<name><![CDATA[stranger]]></name>
				<uri>https://linuxforum.ru/profile.php?id=33370</uri>
			</author>
			<updated>2014-11-24T11:06:14Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=432570#p432570</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Вопрос по залогиниванию]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=432569#p432569" />
			<content type="html"><![CDATA[<p>Хорошо, как я понимаю функции ввода-вывода, например printf() - это всего лишь формообразователи входных данных с последующим сис. вызовом write(). Далее ядро или его модули получают в обработку буфер подготовленных данных... Так вот, предположим, мы обратились к файлу, с запрещённой для нас записью, стало быть именно ядро должно принять решение можно нам с ним работать или нет, сверяя, UID, GID... Write() вернёт программе результат: либо отказ в доступе, либо операция исполнена.<br />Соответственно, что делает setuid() - это тоже системный вызов. Почитал описание, но не совсем понял суть:<br />login имеет изначально права root, setuid понижает её права до UID выбранного пользователя? Получается, если я создам программу, включу библиотеку unistd.h, сделаю вызов setuid() на любого пользователя, то она либо переключит UID процесса в случае запуска из под root, либо выдаст ошибку при запуске из-под любой другой учётной записи.<br />Если можно, то хотел бы уяснить: что такое реальный, а что такое эффективный UID?</p>]]></content>
			<author>
				<name><![CDATA[Aether]]></name>
				<uri>https://linuxforum.ru/profile.php?id=36320</uri>
			</author>
			<updated>2014-11-24T11:04:39Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=432569#p432569</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Вопрос по залогиниванию]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=432471#p432471" />
			<content type="html"><![CDATA[<p>[далее всё написанное относится к классической схеме без оговорок про pam, systemd и cgroups]</p><div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>а, соответственно, запрашивает имя пользователя, пароль, и, полагаю, есть тоже какой-то системный вызов, который эти данные передаёт ядру для сверки</p></blockquote></div><p>нет,&nbsp; пароли проверяются в userspace: login просто читает содержимое /etc/passwd и /etc/shadow и сама принимает решение о предоставление доступа, без участия ядра.<br /></p><div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>Мало того, все последующие вызовы fork из этого залогиненного процесса будут наследоваться потомками. Затем запускается оболочка bash (PID 102 PPID 101), и мы пишем команды от лица зарегистрированного пользователя.</p></blockquote></div><p>тут всё проще: login делает fork() -&gt; setuid() -&gt; exec(&lt;shell&gt;).<br /></p><div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>Вопрос, во-первых, какими правами обладают процессы, которые запускает init до залогинивания? root?</p></blockquote></div><p>про те которые говорим — да, root... остальные могут быть запущены с произвольными правами...<br /></p><div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>Во-вторых, когда в bash набираю exit он возвращается на уровень login, то есть как-бы разлогинивается. По идее должен иметься системный вызов, на отмену регистрации, тогда к каким правам вернулась программа login?</p></blockquote></div><p>login просто ждёт на wait(2). после завершения шела управление передаётся ему и он продолжает своё дело с теми же правами, которыеу него были...<br /></p><div class="quotebox"><cite>Aether пишет:</cite><blockquote><p>В-третьих, в tty1 я запускаю процесс aaa &amp;.<br />Консоль пишет: ...PID 140...<br />То есть, запустился новый процесс. Если затем разлогиниться, получается этот процесс так и сохранится с правами того пользователя из под которого был запущен?</p></blockquote></div><p>после разлогинивания процесс будет убит SIGHUP&#039;ом и завершится... но если он перехватит сигнал, то продолжит работать со своими правами...</p>]]></content>
			<author>
				<name><![CDATA[Fat-Zer]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11911</uri>
			</author>
			<updated>2014-11-23T20:15:44Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=432471#p432471</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Вопрос по залогиниванию]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=432453#p432453" />
			<content type="html"><![CDATA[<p>Доброго дня.</p><p>Итак, интересно разобраться немного подробнее с вот чем:<br />когда запускается linux, его первый процесс (PID 1) запускается ядром. Далее этот процесс разветвляется, запуская кучу чего, и вот, в некий момент, он вызывает, в очередной раз, fork (для примера, новый процесс PID 100, процесс предок PPID 1), и запускает getty, которая создаёт необходимый буфер для консоли, обеспечивает вывод информации на экран, а также файл устройства, например, tty3. Далее, getty, также делает fork, запуская программу login (PID 101 PPID 100), та, соответственно, запрашивает имя пользователя, пароль, и, полагаю, есть тоже какой-то системный вызов, который эти данные передаёт ядру для сверки, после чего, ядро как-бы регистрирует права конкретного пользователя на доступ к ресурсам ПК к конкретному процессу. Мало того, все последующие вызовы fork из этого залогиненного процесса будут наследоваться потомками. Затем запускается оболочка bash (PID 102 PPID 101), и мы пишем команды от лица зарегистрированного пользователя.</p><p>Вопрос, во-первых, какими правами обладают процессы, которые запускает init до залогинивания? root?</p><p>Во-вторых, когда в bash набираю exit он возвращается на уровень login, то есть как-бы разлогинивается. По идее должен иметься системный вызов, на отмену регистрации, тогда к каким правам вернулась программа login?</p><p>В-третьих, в tty1 я запускаю процесс aaa &amp;.<br />Консоль пишет: ...PID 140...<br />То есть, запустился новый процесс. Если затем разлогиниться, получается этот процесс так и сохранится с правами того пользователя из под которого был запущен?</p><p>Буду рад, указаниям на мои ошибки в понимании.</p>]]></content>
			<author>
				<name><![CDATA[Aether]]></name>
				<uri>https://linuxforum.ru/profile.php?id=36320</uri>
			</author>
			<updated>2014-11-23T19:11:54Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=432453#p432453</id>
		</entry>
</feed>
