Права суперпользователя Linux
Как вы знаете, Linux очень серьезно относится к управлению пользователями и предоставлению им прав на работу с системой. Обычный пользователь может записывать файлы только в свой каталог и каталог /tmp/. Также есть возможность читать некоторые файлы в корневой файловой системе. Но вы не можете устанавливать программы, ведь для этого нужно право на запись, не можете изменять атрибуты файлов, не можете запускать сервисы, не можете читать некоторые файлы логов и еще много чего не можете.
В Linux управлять корневой файловой системой и создавать там файлы имеет право только пользователь root.
В этой статье мы рассмотрим какие программы нужны для того, чтобы получить права root пользователя linux, как они работают, как выполнять программу с правами root от обычного пользователя и как запускать графические программы с правами root. А также выясним что такое sudo в чем разница su или sudo.
Права суперпользователя в Linux
Очень долго перечислять чего не может обычный пользователь Linux, проще сказать на что у него есть право, а именно при стандартной настройке полномочий для файлов в Linux, обычный пользователь может:
- Читать, писать и изменять атрибуты файлов в своем каталоге
- Читать, писать, изменять атрибуты файлов в каталоге /tmp
- Выполнять программы там, где это не запрещено с помощью флага noexec
- Читать файлы, для которых установлен флаг чтения для всех пользователей.
Если же нужно сделать что-то большее нам понадобятся права root пользователя linux. У root есть право делать все в вашей файловой системе независимо от того какие права установлены на файл.
Вход под суперпользователем
Чтобы войти под пользователем root можно переключиться в одну из виртуальных консолей, например, с помощью сочетания клавиш Ctrl+Alt+F1 и затем ввести логин root и пароль root пользователя.
Вы получите полноценное окружение root с возможностью выполнять все действия, но такой способ очень непрактичный, так как вы теряете все преимущества использования графического интерфейса.
Можно поступить полностью противоположным путем, ввести логин root и его пароль в графическом менеджере входа, чтобы окружение рабочего стола работало от имени root, и мы получаем все права root linux, но такой вариант крайне не рекомендованный, и очень опасный, вы можете случайно повредить всю систему. Поэтому этот способ был отключен во многих менеджерах входа.
Переключение на суперпользователя в терминале
Теперь мы подошли к более интересному и практичному. С помощью специальных утилит вы можете переключить текущий эмулятор терминала в окружения суперпользователя и выполнять все следующие команды не от своего имени, а от его, таким образом, дав программе права root linux. Для этого существует утилита su. Вообще говоря, эта утилита позволяет не только переключаться на пользователя root но и на любого другого пользователя, но по умолчанию используется именно root. Рассмотрим ее подробнее. Команда su linux имеет следующий синтаксис:
$ su опции пользователь
Вот ее основные опции:
- -c, —command — выполнить команду
- -g, —group — установить основную группу пользователя (только для root)
- -G —supp-group — дополнительные группы пользователя (только для root)
- -, -l, —login — режим входа, будут очищены и инициализированы с учетом нового пользователя все переменные окружения, а также изменен домашний каталог
- -p, —preserve-environment — сохранить переменные окружения
- -s, —shell — задать оболочку для входа
- —version — отобразить версию программы.
Теперь немного поэкспериментируем, чтобы понять как работает команда su linux.
Сначала выполним su без параметров, но для начала создадим переменную окружения, чтобы проверить как с ними обходится эта команда:
Теперь смотрим что получилось:
whoami
$ pwd
$ echo $VAR
$ echo $PATH
$ exit
Из этих команд мы видим, что теперь мы пользователь root, но домашней директорией считается директория нашего предыдущего пользователя и наша переменная не сохранилась также изменилась переменная PATH, теперь там добавлен путь /sbin.
Теперь используем вход в режиме логина:
И повторим ту же комбинацию:
whoami
$ pwd
$ echo $VAR
$ echo $PATH
$ exit
Та же ситуация, только на этот раз изменена ко всему еще и домашняя директория на директорию root. Но мы можем сохранить наши переменные окружения, если это нужно, для этого есть опция -p:
Как видите, наша переменная осталась. Вы также можете переключится на любого другого пользователя. Например:
Получение прав суперпользователя таким способом используется во многих дистрибутивах, например, Debian, OpenSUSE, ArchLInux, Gentoo и т д. Но в Ubuntu, как дистрибутиве для начинающих вход под пользователем root отключен. Это сделано потому, что это тоже не очень безопасно, вы можете забыть что выполняете команду от root и что-то натворить в системе. Поэтому переходим к следующей программе.
Получение прав root без переключения
Чтобы реализовать максимально безопасный интерфейс для работы с правами суперпользователя в Linux была разработана команда sudo. Давайте рассмотрим что такое sudo. Эта команда пишется перед каждой командой, которую нужно выполнить от имени суперпользователя, и для ее выполнения нужно ввести пароль уже не root, а всего лишь вашего пользователя. Так же, как и в предыдущей, в этой утилиты есть свои опции. Сначала рассмотрим синтаксис:
$ sudo опции команда
- -b — выполнять запускаемую утилиту в фоне
- -E — сохранить переменные окружения
- -g — запустить команду от группы
- -H — использовать домашний каталог
- -l — показать список полномочий в sudo для текущего пользователя
- -r — использовать для команды роль SELinux
- -s — использовать оболочку
- -u — запустить команду от имени пользователя, если не задано используется root
- -i — не выполнять команду, а войти в оболочку, эквивалентно su —
Вы можете выполнить те же эксперименты, только для этой команды, чтобы понять как использовать команду sudo. Например:
Использование sudo — это рекомендованный способ выполнять команды от имени суперпользователя в Linux. Так вы не забудете с чем имеете дело и меньше всего рискуете повредить систему. Но остался еще один нерешенный вопрос — как быть с графическими утилитами? Ведь команда sudo их не запускает, а запускать графическую оболочку от имени root небезопасно. Это мы и рассмотрим далее.
Графически приложения от имени суперпользователя
Для запуска графических приложений от имени суперпользователя существуют специальные утилиты. Они сохраняют все необходимые переменные окружения и полномочия. В KDE это команда kdesu, а в Gnome команда gksu.
Просто наберите gksu или kdesu, а затем нужную команду:
Эта команда запустит файловый менеджер KDE с правами суперпользователя. В Gnome это будет выглядеть вот так:
Программа запросит пароль, уже в графическом окне, а потом откроется файловый менеджер.
Выводы
Вот и все. Теперь вы знаете как получить права суперпользователя в Linux, знаете как использовать команду sudo и в чем разница sudo или su. Теперь программы, требующие дополнительных привилегий в системе, не вызовут у вас проблем. Если остались вопросы, пишите в комментариях!
Файловый менеджер от имени root
С записью (изменением) системных файлов новшество, но работает. Но вот с копированием файлов или созданием файлов или каталогов в системных разделах Дельфин справиться ну никак не может. Убрали возможность запускать Дельфин от root.
Можно конечно работать и из терминала посредством sudo и далее по назначению, но не всегда удобно.
Альтернативу нашел с помощь старого доброго МС (Midnight Commander), аналог Norton commander.
Соответственно ставим Миднайт.
Запустить его от root-а можно командой в терминале:
pkexec mc
Вводим пароль и решаем свои задачи.
Альтернативу нашел с помощь старого доброго МС (Midnight Commander), аналог Norton commander. MC, конечно, замечательный файловый менеджер, но уж больно похож на Norton commander, и скорее подходит для голого терминала, как и Norton commander во времена DOS.
А у нас есть ещё Krusader — его и за аналог Total Commander принять можно, и с запуском от root проблем не имеет. Делать в нем можно что хочешь, естественно в присущем ему функционале.
Расскажите, как вы его запускаете с правами root в 18.04?
Да нет никаких проблем. Просто лично я никогда им не пользовался.
Да, забыл предупредить — внешний вид Krusader-Root не больно хорош. А тут нам всем крепко помог leisampei, за что его не грех ещё раз поблагодарить.
Да. Так оно по привычней.
Весьма странный способ запуска. Для того, чтобы запустить с правами рута, надо сначала запустить с обычными правами… Раньше было не так…
И какая команда? Раньше она там сама прописывалась.
Аааа, я про это забыл… А если я с рабочего стола хочу запустить.
Добавить значок на рабочий стол — из пунктов меню, куда прилепишь Krusader-Root.
Что-то в доске приложений нет такого…
Может и нет, я на доску не переключаюсь.
ХА, попробовал доску — из неё тоже на стол можно перекинуть. Ты не забавляешься?
Покажи. Я не вижу. Есть только закрепить на панели задач.
А ещё есть добавить виджет запуска на панель. Я, правда, наблюдаю сие на Plasma 5.13.4. Может в этом несоответствие с твоим?
Разблокируй виджеты.
Осталось только спросить, как это сделать. 🙂
Я это часто делаю. Только под «рабочим столом» я имел ввиду классический рабочий стол. Поэтому и спрашивал команду для записи её в файл .desktop.
я запускаю просто — sudo krusader
Весьма странная вещь, запуск графического приложения из консоли. Для того чтобы увидеть выхлоп — да, а каждыый день…
В свежей версии кед вернули рут для долфина.
Это хорошо, хоть на это у них ума хватило. Осталось дождаться новой версии некоторым.
А лучше бы сделали как в Kate, чтобы dolphin при необходимости спрашивал пароль…
В исходниках
if (getuid() == 0) <
if (!qEnvironmentVariableIsEmpty(«SUDO_USER»)) <
std::cout
Тойсть.. Возможность запуска только если ты зашел в систему как root. А через sudo не запускается.
:
$ dolphin —version
dolphin 18.08.0
:
$ sudo dolphin
Executing Dolphin with sudo is not possible due to unfixable security vulnerabilities.
:
Хотя так запустилась sudo su — -c dolphin.
$ dolphin —version
dolphin 17.12.3
$ sudo su — -c dolphin
.
Executing Dolphin as root is not possible.
Работа точно проведена 🙂
Раньше было все намного проще
if (getuid() == 0) <
std::cout
В самом начале проверялось uid. Если UID равен 0 выходил из программы. А сейчас выкидывает только если находит переменные SUDO_USER и KDESU_USER. Просто не могу понять зачем так сделано.
Так сделано, чтобы сохранить запрет запуска для «простых пользователей» (этот «костыль» нужен для того, чтобы в ряде случаев не было проблем с запуском под юзером после запуска с привилегиями; саму проблему еще не пофиксили, но «Support for modifying root-owned files when running Dolphin as a normal user is still work in progress.»).
Но, при этом, данная конструкция в коде не ломала весь функционал приложения для того, кому по каким-то причинам (это уже вопрос третий) понадобилось запускать все окружение, залогинившись непосредственно под root’ом («Also, you can now launch Dolphin again when logged in using the root user account.»). Судя по всему, последнее изменение внесено как реакция на крики на багтрекере о полной невозможности запустить Dolphin, если ты — root.
Наверное, было бы проще пофиксить механизм запуска в различных режимах, чем объяснять каждому, что это не теория заговора против open source 😀
Так сделано, чтобы сохранить запрет запуска для «простых пользователей» (этот «костыль» нужен для того, чтобы в ряде случаев не было проблем с запуском под юзером после запуска с привилегиями; А что произойдет, если «простой пользователь» завалит себе систему? Начнется 3-я мировая? Или может Бунту перестанет существовать?
Или все же он, этот «простой пользователь», начнет учиться думать?!
А это плохо или хорошо?!
Так что ваши доводы просто смешны. Думаю, что данное недоразумение связано либо с облегчением KDE, либо с явной глупостью некого инициатора.
Пытаться кого-то принудительно (без явных и веских на то причин) оградить от необдуманного совершения ошибки за счет удобства и комфорта большинства других, это верх глупости и недалекости.
Думаю, что данное недоразумение связано либо с облегчением KDE, либо с явной глупостью некого инициатора.
С каким облегчением кде?
Запрет запуска фм с правами root`а не глупость, это верное решение, так как:
этот «костыль» нужен для того, чтобы в ряде случаев не было проблем с запуском под юзером после запуска с привилегиями;
По моему мнению необходимо было бы реализовать такой же функционал как в mac os в finder ( возможность изменения файлов посредством ввода root пароля, без запуска файлового менеджера с правами root ). Есть доступ к системным файлам на изменение и нет опасности нечаянного изменения пермишеннов.
возможность изменения файлов посредством ввода root пароля, без запуска файлового менеджера с правами root
Я об этом выше написал. Вот это было бы удобно.
Или все же он, этот «простой пользователь», начнет учиться думать?!
это верх глупости и недалекости
Специально для особо одаренных:
костыль — на IT-сленге означает плохое, часто временное, решение для исправления определенной проблемы путем добавления кусков кода, обрабатывающих определенные ситуации или ограничивающие проблемно работающий функционал, как быстрый способ вместо хороших, но долгих и трудозатратных изменений, откладывая последние на потом.
Если вам кажется, что я это придумал, можете посмотреть, например, здесь и здесь.
Когда «простые пользователи» со сбившимися пермишенами на конфиги Dolphin’а после запуска оного от root’а начинают видеть различные глюки, они не разбираются в причинах, а идут на багтрекер и создают новые «темы» в различных разделах. Примерно как вы, не пытаясь вчитаться в цитаты с первоисточника (анонса релиза) и их разъяснение, кидаетесь строчить ответ.
Еще раз:
Support for modifying root-owned files when running Dolphin as a normal user is still work in progress. (отсюда)
Кто не понимает и кому лень воспользоваться переводчиком:
Поддержка изменения файлов принадлежащих root’у когда Dolphin запущен от обычного юзера пока еще в процессе работы.
Это и будет хорошее решение, которое заменит костыль.
Да не надо было делать сам костыль-то.
Достаточно было оcтавить функционал kdesudo, и вырабатывай новое решение, сколько душе угодно, при этом не ломая старого.
Неужели это так сложно осилить?! ЁПРСТ.
И не стоит сильно уж умничать-то. Все много проще, чем кажется на первый взгляд.