В OS Inferno очень необычно сделана работа с пользователями. Во-первых, когда запускается
В связи со всем этим возникает логичный вопрос: Inferno — многопользовательская система, или нет?
Да, ещё стоит вспомнить с какой простотой в Inferno «заводятся» новые пользователи:
Напрашивается логичный ответ — нееет, к чёрту такую многопользовательность! :-) Но на самом деле в Inferno и с многопользовательностью, и с безопасностью всё в порядке!
Для начала нужно осознать, что Inferno это не та система, которая будет заниматься бессмысленными глупостями. Если пользователь имеет физический доступ ко всем файлам системы (например он установил Inferno в своём домашнем каталоге), то создавать кучку пользователей с разными правами на доступ к этим файлам — прямой путь к шизофрении, а не безопасности. Если же Inferno установлена, например, в
В этом случае обычно в host OS создаётся новый пользователь, например «inferno», и root при установке системы в /usr/inferno выставляет права на чтение/запись ключевых файлов Inferno только для пользователя «inferno». Теперь, когда обычный пользователь, например, powerman, запустит
Внимательный читатель просто обязан в этом месте возмущённо фыркнуть, и поинтересоваться: а что мешает пользователю powerman после запуска emu запустить тот же
Дело в том, что Inferno будет считать, что текущий пользователь — «inferno», и проверять права на доступ исходя из этого (т.е. он потеряет доступ к файлам powerman-а). А когда проверка прав в Inferno завершится удачно (например, для доступа к файлам принадлежащим пользователю «inferno»), и emu попытается обратиться к этим файлам, то проверку прав проведёт уже host OS. Которой все эти виртуальные фокусы внутри процесса emu (запущенного пользователем powerman) до лампочки, и которая по-прежнему считает, что текущий пользователь — это powerman. И доступ к файлам пользователя inferno не даст! В результате пользователь становится окончательно бесправным существом. :)
Что касается логинов и паролей, то они моментально потребуются, как только вы захотите подключить какой-нибудь сетевой ресурс. Сразу выяснится, что в сети Inferno должен существовать сервер идентификации пользователей (authentication server a.k.a. CA a.k.a. $SIGNER). И для вас на этом сервере администратор должен завести аккаунт, с любым логином и паролем (они не обязаны совпадать с именем пользователя, которое вы используете внутри Inferno). Чтобы подключиться к сетевому ресурсу вам нужно сначала обратиться на этот сервер идентификации, представиться ему под тем логином/паролем под которым вы ему известны, и получить сертификат (наподобие private/public ключей ssh). Сертификат этот вы сохраняете в файлик в своём домашнем каталоге, и используете при подключении сетевых ресурсов. (Пока вы этот файлик не удалите, обращаться к серверу идентификации вам не потребуется, это обычно одноразовая операция.)
При этом подключаемые вами сетевые ресурсы будут опознавать вас под тем именем, под которым вы зарегистрированы на сервере идентификации — оно прописано в вашем сертификате.
Кстати, как раз для безопасного запуска сервера идентификации логично использовать запуск
emu
, вы получаете командную строку без необходимости вводить логин и пароль. При этом ваше имя пользователя выставляется таким же, как и в основной системе (host OS). Во-вторых, вы можете запустить, например, wm/wm wm/login
, ввести имя другого пользователя (причём пароль у вас даже не спросят), и продолжить работу как этот пользователь. Аналогично можно воспользоваться командой runas ИМЯПОЛЬЗОВАТЕЛЯ sh
, чтобы не запускать графическую оболочку.В связи со всем этим возникает логичный вопрос: Inferno — многопользовательская система, или нет?
Да, ещё стоит вспомнить с какой простотой в Inferno «заводятся» новые пользователи:
mkdir /usr/ИМЯПОЛЬЗОВАТЕЛЯ
Напрашивается логичный ответ — нееет, к чёрту такую многопользовательность! :-) Но на самом деле в Inferno и с многопользовательностью, и с безопасностью всё в порядке!
Для начала нужно осознать, что Inferno это не та система, которая будет заниматься бессмысленными глупостями. Если пользователь имеет физический доступ ко всем файлам системы (например он установил Inferno в своём домашнем каталоге), то создавать кучку пользователей с разными правами на доступ к этим файлам — прямой путь к шизофрении, а не безопасности. Если же Inferno установлена, например, в
/usr/inferno
root-ом — тогда совсем другое дело!В этом случае обычно в host OS создаётся новый пользователь, например «inferno», и root при установке системы в /usr/inferno выставляет права на чтение/запись ключевых файлов Inferno только для пользователя «inferno». Теперь, когда обычный пользователь, например, powerman, запустит
/usr/inferno/Linux/386/bin/emu
, то он попадёт в систему как пользователь powerman, с очень ограниченными правами. Фактически, у него даже не будет домашнего каталога, если его не создаст root или не даст права на запись в каталог /usr/inferno/usr/
(что не очень безопасно) или домашний каталог не будет подмонтирован автоматически при входе пользователя из, например, каталога /home/powerman/inferno/
в host OS (к которому пользователь powerman имеет полный доступ), либо по сети.Внимательный читатель просто обязан в этом месте возмущённо фыркнуть, и поинтересоваться: а что мешает пользователю powerman после запуска emu запустить тот же
runas inferno sh
и переключиться на аккаунт «inferno»? Самое смешное — ему ничего не мешает это проделать. Но прав у него после этого трюка станет не больше, а меньше!Дело в том, что Inferno будет считать, что текущий пользователь — «inferno», и проверять права на доступ исходя из этого (т.е. он потеряет доступ к файлам powerman-а). А когда проверка прав в Inferno завершится удачно (например, для доступа к файлам принадлежащим пользователю «inferno»), и emu попытается обратиться к этим файлам, то проверку прав проведёт уже host OS. Которой все эти виртуальные фокусы внутри процесса emu (запущенного пользователем powerman) до лампочки, и которая по-прежнему считает, что текущий пользователь — это powerman. И доступ к файлам пользователя inferno не даст! В результате пользователь становится окончательно бесправным существом. :)
Пароли? Их есть у меня!
Что касается логинов и паролей, то они моментально потребуются, как только вы захотите подключить какой-нибудь сетевой ресурс. Сразу выяснится, что в сети Inferno должен существовать сервер идентификации пользователей (authentication server a.k.a. CA a.k.a. $SIGNER). И для вас на этом сервере администратор должен завести аккаунт, с любым логином и паролем (они не обязаны совпадать с именем пользователя, которое вы используете внутри Inferno). Чтобы подключиться к сетевому ресурсу вам нужно сначала обратиться на этот сервер идентификации, представиться ему под тем логином/паролем под которым вы ему известны, и получить сертификат (наподобие private/public ключей ssh). Сертификат этот вы сохраняете в файлик в своём домашнем каталоге, и используете при подключении сетевых ресурсов. (Пока вы этот файлик не удалите, обращаться к серверу идентификации вам не потребуется, это обычно одноразовая операция.)
При этом подключаемые вами сетевые ресурсы будут опознавать вас под тем именем, под которым вы зарегистрированы на сервере идентификации — оно прописано в вашем сертификате.
Кстати, как раз для безопасного запуска сервера идентификации логично использовать запуск
emu
от пользователя host OS inferno (например, через su/sudo в пользователя inferno от root). Тогда получится, что доступ к критичной в плане безопасности информации внутри Inferno имеет доступ только root на host OS (который его в любом случае имеет, будем откровенны).