Linux сменить пользователя: fkn+antitotal | студентам & программистам

Изменить владельца и права доступа на файлы и папки в Linux/BSD

Главная » Tips and Tricks

Автор Игорь Овчаренко На чтение 3 мин Просмотров 4.5к. Опубликовано

Изменить владельца и права доступа на файлы и папки в Linux и *BSD системах

Представленная ниже информация будет полезная начинающим Linux и *BSD системным администраторам. По большому счету, в любой операционной системе, будь то Linux, Windows или FreeBSD, корректная работа приложений, сервисов и безопасность системы в целом напрямую зависит от прав доступа  на файлы и папки. Используя ниже приведённые средства, можно решить практически 90% проблем, возникающих при настройке прав доступа.

Сменить владельца для всех папок и файлов. Для этих целей в Unix используется команда chown. Она обладает рядом параметров:

  • Опции. Например, для того, чтобы изменения коснулись не только данной директории, но и всех поддиректорий, нужно применить команду рекурсивно, т. е. с параметром «-R».
  • Владелец или группа владельцев («user:group» или «user»).
  • Пути до папок / файлов, к которым нужно применить команду. Например, «/mnt/pool1/dts1/backup».

Таким образом, команда для смены смены владельца (и группы владельцев) для директорий и всех вложенных папок и фалов будет выглядеть так:

sudo chown -R user:group /home/user/dir/

Изменить права доступа на файл или папку  в Linux и *BDS системах можно командой chmod. Стоит отметить, что в Unix имеются свои особенности в работе данной команды и принципа разделения прав. Так, кроме владельца файла или папки, можно настроить, какие операции может выполнять этот самый владелец и группа, а также все остальные пользователи. В Unix идёт разделение возможностей следующим способом — владелец, группа владельцев и другие. Также присутствует следующее разделение прав:

  • Право на запуск файла (для папок — проход по директории).
  • Право на изменение файла (создание и удаление файлов и папок в директории)
  • Право на чтение файла (для папок — это право на просмотр содержимого директории)

Для удобства использования и запоминания, используется следующая кодировка:

  • запуск — 1
  • изменение — 2
  • чтение — 4

Складывая данные цифровые обозначения мы получим набор прав, предоставляемый владельцу/группе/другим. Разберем данную информацию на примере:

Изменять файл имеет право только владелец, группа владельцев может читать, остальные — ничего не могут, соответственно команда будет такой:

chmod 640 /media/fileshare/file.txt

Создавать файлы в папке могут все, но видит их только владелец:

chmod 622 /media/fileshare/messages/

Чтобы все могли запускать какую-либо программу, но никто, кроме владельца, не мог её редактировать:

chmod 711 /media/share/exec

Для изменения прав на все вложенные файлы и папки (т. е. рекурсивно) используется опять же ключ «-R».

Выполняя данные операции, стоит понимать — изменять права на файлы и директории могут только администраторы и владелец этих папок и файлов.

Изменение прав только на файлы или только на папки  — команда find.  При этом файлы обозначаются как file (f), а директории, соответственно —  d. Например:

chmod -R 775 $(find . -type d)

Оцените автора

Управление учетными записями в Linux. Часть 2. Не/правильная настройка доступа / Хабр

В предыдущей статье мы рассмотрели вопросы хранения учетных данных в ОС семейства Линукс. Теперь перейдем к обсуждению вопросов правильной и не очень настройки прав доступа к различным объектам операционной системы.

Напомню основные моменты относительно учетных записей в Линукс: есть суперпользователь root (id=0), который может все и есть все остальные учетные записи (id от 500 или 1000), которые имеют ряд ограничений и по идее не могут нанести большого вреда системе.

Но на практике возможны различные ситуации, когда обычному пользователю необходимы административные права. Например, обычный пользователь не может прочитать файл с хэшами паролей /etc/shadow, но он может изменить свой собственный пароль с помощью команды passwd. Очевидно, что для внесения изменений в защищенный файл команда должна выполняться с правами суперпользователя. И таких примеров может быть довольно много.

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

su и sudo, когда хочется большего…

В процессе работы часто возникает необходимость в правах суперпользователя, например для установки программного обеспечения и выполнения привилегированных команд. Сейчас хорошей практикой является не использование для выполнения повседневных задач аккаунта root. Более того, многие современные Линуксы блокируют интерактивное использование этой учетки или как минимум запрещают работу под ней по протоколу ssh.

Команда su заменяет пользователя текущей оболочки shell на указанного, например su user1 заменит на пользователя user1. Естественно, при запуске su система запросит пароль того пользователя, на shell которого вы хотите переключиться. Далее происходит запуск нового экземпляра оболочки с указанными параметрами. Команда su позволяет не выходя из системы, без лишних манипуляций повышать возможности управления операционной системой или наоборот ограничивать их.

Вызов su без аргументов приведет к запуску оболочки root. Для возврата в оболочку основного пользователя, из под которого была вызвана команда su необходимо просто ввести exit.

Одновременным достоинством и недостатком su является то, что эта команда переключает в оболочку другого пользователя и позволяет выполнять в ней любые действия, разрешенные данному пользователю. Удобно для выполнения административных задач но не слишком безопасно, когда обычному пользователю необходимо просто разрешить выполнение одной или нескольких привилегированных команд.

Альтернативой su является команда sudo.  Данная команда предоставляет временное повышение привилегий для одной команды. Предоставляя привилегии root только при необходимости, sudo снижает вероятность того, что пользователь сможет нанести существенный ущерб системе своими действиями.

Основное отличие двух команд на примере пользователя root: su переключает вас в аккаунт root и требует пароль root. Sudo запускает с привилегиями root одну команду — она не переключает вас в аккаунт суперпользователя и не требует отдельного пароля root. Исключение sudo -i.

Кстати, о паролях. При вводе sudo команда система запрашивает пароль текущего пользователя. Хотя возможен вариант, когда sudo выполняется без пароля, но об этом чуть позже. Запрос пароля делается для того, чтобы в случае, если посторонний получил доступ к незаблокированной консоли, он не смог выполнить ничего привилегированного.

Но даже ввод корректного пароля еще не гарантирует выполнение команды под root.

Дело в том, что для разрешения запуска команд по sudo пользователь должен быть внесен в специальный файл /etc/sudoers, содержащий настройки использования sudo. Для нас в плане настройки доступа наиболее интересен раздел, связанный с разрешенными пользователям командами:

# User privilege specification

root    ALL=(ALL:ALL) ALL

user2 ALL = (root) NOPASSWD: /usr/sbin/iftop

user2 ALL = (root) NOPASSWD: /bin/more

Если мы хотим разрешить пользователю запускать под sudo любые команды, то необходимо использовать ключ ALL, например

user2 ALL=(ALL) ALL

 А если при этом мы еще и не хотим спрашивать пароль, то используем NOPASSWD

user3 ALL=(ALL) NOPASSWD: ALL

Аналогично, мы можем не спрашивать пароль при запуске конкретной команды

user2 ALL = (root) NOPASSWD: /bin/more

Но разрешение запуска любых команд это все-таки варианты настройки, которые можно использовать только в тестовой среде, в продуктиве необходимо выполнять гранулированные настройки, то есть разрешать выполнение только определенных команд

Например

Как мы узнаем из следующей статьи, гранулированные настройки тоже не всегда являются безопасными и в некоторых случаях могут привести к получению пользователем командной оболочки root. Но разрешение ALL точно позволит пользователю получить командную оболочку, если он этого захочет.

Поэтому учитывайте это обстоятельство при настройке /etc/sudoers. Разрешать всем все явно не нужно.

Права и SUID bit

Вернемся к приведенному ранее примеру со сменой пароля обычным пользователем с помощью команды passwd. Но для того, чтобы понять как выполняется этот трюк с доступом к привилегированному файлу мы немного поговорим о том, как в Линукс осуществляется доступ к файлам.

В стандартной модели доступа есть 3 вида прав, помимо специальных:

  1. чтение

  2. запись

  3. исполнение (для директорий прохождение через них)

Права на файлы определяются для пользователей из трех групп:

  1. для владельца

  2. для группы владельца

  3. для всех остальных

Для каждой операции выделены свои группы битов:

В зависимости от того, что разрешено, мы можем увидеть соответствующий набор значений:

Также права доступа можно представить в виде чисел, формируемых по следующему правилу:

Для того, чтобы пользователь не обладающий административными правами мог запускать приложения, требующие права root для своей работы (как в нашем примере с passwd) в Линукс предусмотрен специальный механизм — SUID (Set UID) bit. Данный бит позволяет выполнение программы с правами хозяина файла. Это ключевой механизм повышения прав в Unix системах. Особенности SUID программ в стандартных конфигурациях Linux:

  • Работают с полномочиями пользователя root.

  • Используются для выполнения безопасных привилегированных операций.

  • Используются для штатной смены идентификаторов пользователя: su, sudo, pkexec.

  • Программы учитывают идентификатор запустившего их пользователя и различные файлы конфигурации.

Для того, чтобы установить SUID бит необходимо воспользоваться следующей командой:

chmod u+s выполнимый_файл

в результате в выводе в правах будет отображаться буква s

Обратите внимание на то, что владельцем файла является root. Кстати же знакомая нам команда sudo тоже имеет SUID бит.

Посмотрим, что произойдет, когда двоичный файл, имеющий SUID бит, выполнится. Созданный процесс изменит свой эффективный идентификатор пользователя (EUID) со стандартного UID на владельца этого специального двоичного исполняемого файла который в этом случае — root.

Ядро принимает решение, имеет ли этот процесс привилегию, просматривая EUID процесса. Потому что теперь EUID указывает на root — эта операция не будет отклонена ядром.

При самостоятельной установке SUID bit администраторам нужно быть особенно внимательными, так как некоторые утилиты имеют штатный функционал позволяющий запускать командную оболочку. О том как эксплуатировать подобные уязвимости мы подробно поговорим в следующей статье. Но прежде, чем разрешать какой-либо команде запускаться по sudo или устанавливать SUID bit я бы рекомендовал сначала прочитать man по данной команде, нет ли там ключика, позволяющего запускать shell.

Непутевый PATH

Переменная среды PATH предназначена для указания оболочке, где искать исполняемые файлы. То есть, благодаря PATH можно указывать только имя выполняемого файла без полного пути, а дальше уже ОС будет пытаться найти файл с таким именем по всем прописанным в переменной путям.

Но при не совсем корректном составлении списка путей в переменной PATH возможна ситуация, когда злоумышленник сможет разместить по одному из путей, указанных в PATH свой файл с таким же названием, как и легальное приложение. Но этот файл будет выполнен вместо легального приложения, так как путь к нему прописан в PATH раньше, чем путь к легальному приложению. Например, на скриншоте /usr/local/bin идет раньше, чем /usr/bin, поэтому если легальный файл лежит по второму пути, то злоумышленник может сохранить свой файл с таким же именем по первому и он будет выполнен вместо легального. Таким образом, злоумышленник имея доступ в каталоги прописанные в PATH может поместить свой выполнимый файл с тем же именем, и при выполнении, по сути, подменить легальный файл на свой. А учитывая, что файл могут пытаться запустить с правами суперпользователя злоумышленник в результате подмены может получить права root.

Заключение

В этой статье мы рассмотрели основные моменты настройки прав доступа. Я сознательно не рассматривал никакие “хакерские фокусы”, то есть практические примеры эксплуатации ошибок в данных настройках, так как этому будет полностью посвящена следующая статья. Но основные рекомендации по безопасности можно дать уже сейчас. Прежде всего, необходимо использовать принцип минимизации привилегий, то есть пользователям необходимо назначать только те права, которые необходимы им для работы. Недопустимо использование прав 777 на те приложения, запуск которых может привести к получению root-shell. Также недопустимо разрешение пользователям запуска любых команд под sudo, так как это равносильно получению прав root. Аналогично, SUID бит должен устанавливаться только на безопасные приложения, в противном случае есть риск получения пользователем прав root.

Вместо заключения хочу пригласить вас на бесплатные демоуроки по Linux от OTUS. Зарегистрироваться на уроки можно по ссылкам ниже:

  • Диагностика сети в CentOS.

  • Bash повышенной сложности: массивы, ключи, отладка.

Как изменить свое имя пользователя в Linux

Linux позволяет нескольким пользователям одновременно получать доступ к одной и той же системе, или мы можем сказать, что это многопользовательская ОС. Наряду с этим существует множество обязанностей, которыми должен управлять администратор, например, предоставление разрешений пользователям, назначение уникальных имен идентификаторов и т. д. Когда мы говорим об изменении учетных данных пользователей, таких как изменение их идентификаторов или имени, Linux также позволяет нам изменить имя. пользователя с помощью команд.

Чтобы изменить имя пользователя в операционной системе Linux, мы используем команду под названием «usermod». Команда «usermod» — это утилита командной строки или библиотека, предоставляемая Linux, которая используется для изменения свойств, связанных с информацией о пользователе. Как и другие утилиты командной строки, эта утилита также принимает параметры в качестве входных данных для анализа того, какое действие следует выполнить. В нашем случае эта команда изменяет или модифицирует корневые системные файлы, которые называются файлами системной учетной записи, чтобы внести изменения, указанные в командной строке. Перед выполнением такого действия следует иметь в виду, что мы не должны редактировать или изменять файл /etc/passwd вручную или с помощью любого текстового редактора.

Синтаксис:

Чтобы изменить или переименовать пользователя, мы используем следующий синтаксис:

# usermod -l логин-имя старое-имя

 
Параметр «-l» используется, чтобы сообщить системе, что мы меняем Имя пользователя. Команда заменяет существующее имя параметром «old-name» и заменяет его на «login-name». Эта команда ничего не изменяет и не редактирует. Когда мы меняем имя пользователя, мы должны изменить домашний каталог пользователя, чтобы повлиять на внесенные нами изменения.

Передав другие параметры этой команде вместо «-l», мы также можем внести изменения в другие свойства пользователя, такие как добавление его в группу, изменение его домашнего каталога и т. д.

Пример:

В этом Например, мы пытаемся изменить имя пользователя нашей операционной системы. Как мы знаем, данные пользователя и его учетные данные всегда хранятся в файле /etc/passwd. Мы также можем изменить имя пользователя вручную, отредактировав этот файл. Но иногда это может вызвать некоторые проблемы в системе. Таким образом, в основном этого избегает администратор, который изменяет его вручную. По этой причине в большинстве случаев утилита usermod используется в Linux для внесения любых изменений в данные пользователя и управления ими. Для выполнения этой процедуры у вас должен быть доступ к учетной записи суперпользователя, если вы не можете управлять этими задачами.

Добавление нового пользователя

Предположим, мы хотим изменить имя пользователя. Для этого мы сначала пытаемся добавить нового пользователя, которому затем пытаемся изменить имя. Чтобы создать нового пользователя, мы запускаем следующую команду в нашем терминале:

linux@linux-VirtualBox:~$ sudo adduser testuser

 
После запуска предыдущей команды она запрашивает пароль администратора, который создает новый пользователь. Следует помнить одну вещь: он не будет отображать пароль, пока вы вводите его на терминале. Просто введите пароль и нажмите клавишу ввода.

После ввода пароля вы получите следующий вывод, в котором создается каталог для нового пользователя:

Вам будет предложено установить новый пароль для нового пользователя. Когда пароль вводится, он принимает некоторые данные, которые могут включать полное имя пользователя, которого вы хотите использовать. Некоторыми дополнительными данными являются «номер комнаты», «рабочий телефон», «домашний телефон» и «другое». Вы можете ввести любые данные или нажать Escape, чтобы пропустить это. Предоставляя все детали, он запрашивает ваше подтверждение. Вводя значение «y», вы разрешаете системе создать нового пользователя.

Наконец, выйдя из системы пользователя, которого вы используете в данный момент, вы можете убедиться, что новый пользователь создан с именем «testuser». Как видно из следующего фрагмента, показаны как новые, так и старые пользователи:

Переименование пользователя

Теперь пришло время переименовать пользователя, которого мы создали. Сначала авторизуемся в системе. После входа в систему открываем терминал, где с помощью команды пытаемся переименовать нашего пользователя. Для этого нам нужно запустить простую команду, которая показана в следующей строке:

linux@linux-VirtualBox:~$ sudo usermod –l testuser1 –d /home/testuser1 –m testuser

 
В ранее упомянутой команде мы используем команду usermod, которая используется для изменения системных файлов. Флаг «-l» используется для переименования любого файла, а его использование вместе с командой usermod позволяет нам переименовать пользователя. Следующее ключевое слово «testuser1» — это имя, которое мы используем в качестве нового имени для пользователя. Затем мы используем флаг «-d», обозначающий каталог. Мы передаем путь к каталогу, в котором находятся учетные данные пользователей. «-m» обозначает модификацию имени «testuser». Когда мы нажимаем клавишу ввода, он просит нас ввести пароль пользователя. После ввода пароля он не будет отображать никаких выводов в терминале. Он просто передает терминал пользователю для выполнения дальнейших команд.

Теперь, чтобы проверить, изменилось ли имя пользователя или нет, мы просто выходим из текущего пользователя и проверяем его в нашей области входа.

Или, войдя в систему нашего пользователя, которого мы переименовали, мы увидим, что имя каталога, созданное в имени нашего домашнего каталога, также изменилось.

Или, просто открыв терминал, можно увидеть, что имя терминала изменено на «testuser1», как показано в следующем фрагменте:

Заключение

Мы познакомили вас с процедурой изменения имени пользователя в операционной системе Linux. Иногда вы можете столкнуться с ситуацией, когда необходимо изменить имя пользователя. Затем мы попытались объяснить всю процедуру, объяснив ее вам на примере, в котором мы объяснили каждый шаг, предпринятый при реализации этих команд.

Как переключаться между пользователями в Linux

Поскольку Linux является многопользовательской операционной системой, рано или поздно вы почувствуете необходимость переключения между пользователями. Будь то выполнение административных действий с использованием учетной записи суперпользователя или просто изменение текущего пользователя для доступа к определенному каталогу, Linux предоставляет несколько способов решения таких проблем.

Давайте посмотрим, как можно переключаться между несколькими пользователями в Linux.

Изменение текущего пользователя с помощью su

Согласно справочной странице su, команда su используется, чтобы либо стать другим пользователем во время сеанса входа в систему, либо переключиться на суперпользователя. Основной синтаксис команды:

 su options имя пользователя 

…где options — это различные флаги, которые вы можете использовать с командой, а username — это имя целевой учетной записи.

Если вы не укажете имя пользователя в команде, то su по умолчанию переключится на пользователя root.

 su 

Простая передача имени пользователя в качестве аргумента в команде переключит текущий сеанс входа в систему на указанного пользователя.

 su имя пользователя 

Вам может быть предложено ввести пароль, если у пользователя есть пароль для своей учетной записи.

Например, чтобы переключиться на пользователя с именем testuser :

 su testuser 

Введите любую из следующих команд, чтобы проверить изменение:

 whoami 
echo $USERNAME

На выходе будет отображаться имя пользователя, на которого вы только что переключились. В этом случае:

 testuser 

Если вам нужно выполнить только одну команду от имени другого пользователя, вам не нужно переключаться на этого пользователя. Вместо этого вы можете просто выполнить команду от имени другого пользователя, используя флаг -c .

 su -c command имя пользователя 

Например:

 su -c chmod +w /Downloads testuser 

Добавление дефиса ( ) на команду su создаст новую среду при переключении между пользователями.

 su - testuser 

Используйте флаг -s с командой для смены оболочки при переключении на другого пользователя. Обратите внимание, что вам нужно будет вызвать команду с указанием пути к оболочке следующим образом:

 su testuser -s /bin/zsh 

Связано: Sudo или su: какую команду следует использовать?

Использование sudo для переключения между пользователями

Подобно команде su, вы также можете изменить текущего пользователя с помощью sudo. Синтаксис обеих команд более или менее одинаков, за исключением опций.

Чтобы изменить текущий сеанс входа в систему на другого пользователя, используйте флаг -u :

 sudo -u имя пользователя 

Если вы хотите выполнить конкретную команду от имени другого пользователя, укажите ее в команде:

 sudo - u username команда 

Например:

 sudo -u testuser chmod 777 /Documents 

Вы также можете изменить оболочку при переключении между пользователями:

 sudo -u имя пользователя путь к оболочке 

Например, чтобы изменить текущую оболочку на zsh и переключиться на testuser одновременно:

 sudo -u testuser /bin/zsh 

Еще раз проверьте, были ли изменения успешно внесены с помощью команды whoami или переменной среды USERNAME .

Смена пользователей с помощью среды рабочего стола

Если использование командной строки вам не по вкусу, вместо этого вы можете выбрать графический подход. На большинстве ПК с Linux установлена ​​среда рабочего стола, обеспечивающая графический интерфейс, необходимый для взаимодействия с ОС. GNOME и KDE — две наиболее широко используемые среды рабочего стола, поэтому данное руководство будет посвящено только им.

Для переключения между пользователями в среде рабочего стола GNOME:

  1. Щелкните значок стрелки вниз, расположенный в правом верхнем углу экрана.
  2. Щелкните Power Off/Log Out и выберите параметр Switch User в раскрывающемся меню.
  3. GNOME отобразит список доступных пользователей. Нажмите на имя пользователя, под которым хотите войти.

Для тех, кто использует KDE, выполните следующие шаги, чтобы изменить текущего пользователя:

  1. Откройте средство запуска приложений и щелкните параметр Оставить , расположенный в правом нижнем углу окна.
  2. В раскрывающемся списке выберите Сменить пользователя .
  3. Вы вернетесь к экрану входа в систему. Выделите пользователя, на которого хотите переключиться, используя правую и левую клавиши курсора.
  4. Введите пароль учетной записи и нажмите Введите для входа в систему.

Обратите внимание, что другие среды рабочего стола также предлагают аналогичные варианты входа в качестве другого пользователя.

Управление несколькими учетными записями пользователей в Linux

Как и в других операционных системах, в Linux также можно переключаться между несколькими пользователями. Хотя другие операционные системы, такие как Windows и macOS, предоставляют графический интерфейс для выполнения таких действий, в Linux вы можете использовать командную строку для эффективного входа в другие учетные записи пользователей.

Очевидно, что продвинутое знание командной строки Linux является мощным дополнением к арсеналу любого ИТ-специалиста.