Linux как изменить системный файл

Статья из цикла ознакомления с операционной системой Linux.

Антропологи утверждают, что эволюция человека как биологического вида прекратилась давным-давно: от кроманьонцев мы уже мало чем отличаемся. Но сам эволюционный потенциал никуда не делся — он трансформировался в развитие общества, которое всегда (по крайней мере, напротяжении своей письменной истории) складывается как динамическое равновесие составляющих его групп. Может, именно животворная и слепая эволюционная мощь заставляет нас быть такими непримиримыми к тем, чьи взгляды мы не разделяем?

Я не говорю даже о политике или социальных явлениях. Возьмите сисадминов и юзеров… Линуксоидов и адептов *BSD… Да что далеко ходить — даже в такой, казалось бы, беспочвенной для конфликтов области, как текстовые редакторы, пользователи Linux/*NIX разделены, оказывается, на враждебные одна другой группировки — как футбольные фаны, честное слово. Понятно, что процент выраженно фанатичных экстремистов, как и в мире спортивных болельщиков, не слишком велик, но именно они задают основной тон конфликта. Хотя, казалось бы, тут-то о чём спорить? Открывай редактор и пиши.

Вот именно те люди, которым позиция «открывай и пиши» ближе, чаще всего склоняются к использованию редактора vi. Это первый по-настоящему полнофункциональный и полноэкранный текстовый редактор для UNIX, благополучно перекочевавший на Linux и имеющийся в любой инкарнации этой операционной системы. Уметь обращаться с ним необходимо, если, конечно, вы не склонны к использованию антикварных продуктов — таких, как старый добрый ed, разрабатывавшийся ещё во времена телетайпных терминалов, когда ни о каких мониторах у компьютеров и речи не было.

Другое дело — редактор emacs, созданный основателем Фонда свободного ПО (Free software foundation) и основным идеологом лицензии GNU Ричардом Столманом. Emacs — крупная, постоянно совершенствуемая система, которую горячие её сторонники называют даже интегрированной средой, а не просто каким-то там редактором. В её состав входят собственный интерпретатор языка LISP, расширения для компиляции и отладки программ, учебник (не справка по основным командам, а полноценный учебник), море документации. Версия GNU Emacs ориентирована в основном на использование в текстовом режиме, а в графической среде X Window System лучше использовать XEmacs — как правило, обе версии редактора имеются в любой уважающей себя системе.

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

Редактор vi тоже прошёл долгий исторический путь: в современных дистрибутивах Linux не часто встретишь его исконную инкарнацию — как правило, при обращении к vi вызов перенаправляется редакторам vim (Vi IMproved) или nvi. Однако все добавления и усовершенствования (сделанные, по большей части, ради удобства работы в графической оболочке) не затрагивают базовых возможностей и способов управления vi.

Набрав vi с именем файла вслед за ним и нажав на Enter, вы очутитесь в окне редактора. Однако немедленно приступить к правке или набору текста не получится: по умолчанию документ (существующий, если вы указали соответствующее имя, или вновь созданный, если файла с таким именем не было) открывается в командном режиме. Помимо командного, vi работает в режиме редактирования, куда мы вскоре перейдём, а также в специальном режиме ex.

В режиме редактирования производится набор и смысловая правка текста. Модификация же текста в целом и операции с его фрагментами (абзацами, строками, словами, манипуляции с поиском и заменой и т. п.) производятся в командном режиме. Переход из исходного, командного, в режим редактирования осуществляется нажатием клавиши i, что можно интерпретировать как insert — «вставка».

Действуя в рамках стандартного vi, в режиме вставки можно вводить текст (разделяя строки нажатиями клавиши Enter), а также править своевременно замеченные опечатки, стирая символы перед курсором с использованием клавиши Backspace. Вообще говоря, современная инкарнация vi, vim, поставляемая с Red Hat Linux, позволяет уже в этом режиме применять курсорные стрелки для перемещений по тексту, однако следует помнить, что реализация vi на другой системе может и не быть настолько удобной. Будьте внимательны, используя стрелки вниз и вверх: каждое нажатие на них сдвигает курсор по вертикали не на соседнюю видимую в окошке редактора строку, а в соответствующую позицию соседней истинной строки (той, что отделена от текущей нажатием на клавишу Enter). С непривычки это может показаться неудобным — но ведь наверняка вы не станете вручную набивать в vi «Илиаду», а для нужд системного администрирования такое поведение оказывается более чем полезным.

Закончив набор текста, возвращайтесь в командный режим при помощи клавиши Escape. В каком именно режиме вы находитесь в каждый конкретный момент, поможет понять нижняя строка на экране: в командном она отображает имя файла, число строк (L) и символов (C) в нём, позицию курсора (строка и колонка истинной строки), а также долю объёма файла от его начала до текущего экрана (в процентах; если файл помещается на экране целиком, на этой позиции в правом нижнем углу размещается слово ALL). В режиме редактирования слева внизу указывается, как именно производится внесение правки в текст: вставкой нового (—INSERT—) или заменой присутствующего (—REPLACE—). В конце концов, если вы что-то забыли и запутались, полезно нажать лишний раз на Escape: в командном режиме это никакого действия не окажет, а из редактирования выведет.

Командный режим уже и в классическом vi предоставляет возможности перемещения по тексту: можно использовать курсорные стрелки или клавиши h, j, k, l (перемещения влево, вниз, вверх, вправо соответственно). Для сдвига курсора на целое слово назад используйте клавишу b, для сдвига вперёд — w. Клавиша 0 (ноль) переместит курсор к началу текущей строки, а $ (то есть одновременное нажатие Shift и 4) — к её концу. Пролистывание целых экранов вперёд осуществляется комбинацией клавиш Ctrl и f (forward), а назад — Ctrl и b (back). Заглавная G (то есть нажатие клавиш Shift и g одновременно) переместит курсор к последней странице документа. Можно комбинировать эту команду с цифрами: нажав последовательно клавиши 1, 0 и G, то есть, отдав команду «10G», вы установите курсор на десятую истинную строку текста. К началу документа, таким образом, можно перейти при помощи команды 1G.

Если требуется отыскать в тексте какой-либо фрагмент, с его поиском поможет команда /, вслед за которой надо набрать искомую комбинацию символов: отобразится она в нижней, служебной строке редактора. После нажатия на Enter курсор установится в позицию, соответствующую первому включению этого фрагмента в текст; чтобы перейти к следующему, введите / (то есть нажмите /, а потом — Enter), а к предыдущему — ? (Shift и / одновременно, а затем уже Enter). Все фрагменты при этом выделятся в тексте цветом: простой инверсией в случае классического vi, или светло-серым на оранжевом фоне для vim и стандартного цветного терминала.

Уже находясь в командном режиме, можно вносить в текст некую глобальную правку, а именно — удалять его фрагменты. Нажмите x, чтобы исчез символ, находящийся прямо в позиции курсора (текст в строке сдвинется влево). Чтобы уничтожить текущую строку, дважды нажмите клавишу d. Команда dG удалит весь текст за курсором до конца файла; команда d$ — весь текст до конца строки. Пользуйтесь этими возможностями крайне аккуратно. Команда p вернёт на место удалённый текст, но только тот, что был уничтожен прямо сейчас — многошагового буфера удаления в vi не существует.

Впрочем, некая страховка от неудачных действий у нас всё же имеется: все операции, проводимые над текстом в vi, воздействуют не на сам файл, а на его рабочую копию (так называемый буфер редактирования). И если не подтвердить специальной командой запись этих изменений, файл останется нетронутым. Для этих и некоторых других операций в vi имеется третий режим работы: ex (и-экс). Для перехода в него нажмите в командном режиме (именно в командном) : (двоеточие), то есть Shift и клавишу ; одновременно.

О переходе в режим ex свидетельствует очистившаяся служебная строка в самом низу экрана, в начале которой появляется двоеточие — приглашение ко вводу ex-команд. Две основные, без которых нам никак не обойтись, это q (выход) и w (запись буфера редактирования, окончательное внесение правки в исходный файл). Напечатав команду в служебной строке, нажмите Enter, и она исполнится. Маленькое замечание: выйти из vi, если в буфер редактирования были внесены изменения, которые потом не подтвердились записью, просто так не получится. Если вы сделали с текстом явно что-то не то, и проще начать заново, чем переправлять собственную правку, используйте команду q! (перейти в режим ex, напечатать в служебной строке q и !, нажать Enter). Если же придирчивый взгляд не выявил в исправленном тексте никаких несообразностей, смело используйте комбинацию wq — запись буфера в файл с последующим выходом из редактора. Кстати, аналогом wq в ex-режиме служит команда ZZ в командном (двойное нажатие на клавишу z при удерживаемом Shift’е).

Конечно, у vi есть масса других полезных возможностей, но на первое время вполне достанет и этих. Помните, в прошлый раз мы сетовали на то, что файл /etc/fstab был создан системой при установке, и неудачное расположение точки монтирования Windows-разделов (в корневом каталоге, а не в /mnt) пришлось изменять вручную? Так вот, настала пора расставить всё по местам.

Войдите в систему суперпользователем: вы окажетесь в /root, суперпользовательской домашней директории (можно убедиться в этом при помощи команды pwd). Прежде чем приступать к работе с каким-либо системным файлом, полезно — не полагаясь только на встроенные в редактор средства защиты от необдуманных изменений — скопировать этот файл в известное место, чтобы точно знать в случае чего, где находится его априори рабочий вариант. Давайте создадим каталог с прозрачным наименованием etc-backups и спасём туда текущую версию /etc/fstab, прибавив к названию файла ещё и дату — чтобы проще было ориентироваться при надобности.

Директории /mnt/c и /mnt/d уже были созданы нами в прошлый раз, то есть правильные точки монтирования уже есть. Какие параметры указывать, чтобы русские наименования файлов/директорий отображались корректно в и в Linux, мы теперь тоже знаем. Остаётся всё это внести в файл. Ну что же, бесстрашно наберём vi /etc/fstab и примемся за дело. Вместо /dos-c и /dos-d во второй колонке (для /dev/hde1 и /dev/hde5 соответственно) укажем /mnt/c и /mnt/d; вместо defaults в четвёртой пропишем параметры iocharset и codepage… А также по три дополнительных: uid, gid и umask.

Ну, с umask всё ясно: маска 007 означает, что монтироваться эти разделы будут с полными правами для владельца и группы, а все остальные — то есть все, кто не входят в указанную группу — доступа к ним иметь не будут даже на чтение. С точки зрения безопасности — полезно. В системе заведётся (совсем скоро!) особый пользователь, от имени которого и будут монтироваться разделы Windows. И если, паче чаяния, каким-нибудь невероятным образом на одном из них окажется написанный для Linux вредоносный код (вирусы и под Linux бывают, а вы как думали?), то скорее всего, он не сможет нанести системе вообще никакого вреда. Если грамотно ограничить права Windows-пользователя, конечно. В таком случае, очевидно, uid и gid задают идентификаторы этого самого пользователя и его группы. Но почему именно такие и откуда они взялись?

Вообще говоря, хорошо, что внесённые в /etc/fstab изменения автоматически не вступают в силу. А то могло бы оказаться, что у вас в системе уже есть пользователь и группа с идентификаторами 502… Давайте это проверим, и если нет, то заведём их. Выходите из редактора с сохранением (ZZ в командном или wq в ex-режиме) и посмотрите на самый хвостик своего файла /etc/passwd. Какой идентификатор присвоен последнему зарегистрированному в системе пользователю?

В моём случае это — 501 для пользователя dummy; значит, 502-й пока свободен. По умолчанию, первой учётной записи пользователя (не root’а!) присваивается номер 500, второй — 501 и так далее. С этим номером связывается имя пользователя, отображаемое, скажем, командой ls с параметром -l, однако реально принадлежность файла пользователю и группе характеризует именно номер.

Именные идентификаторы групп пользователей система берёт из файла /etc/group. Подробную информацию о том, как оба этих файла устроены, можно почерпнуть из соответствующих руководств (команды man 5 passwd и man 5 group). Более того, в системе имеются стандартные средства для создания новых учётных записей пользователей и групп — утилиты useradd и groupadd (см. их страницы руководств). Однако перед нами не стоит сейчас задача завести полноценного пользователя: напротив, нужно создать учётную запись с весьма ограниченными правами. А для этого вполне достаточно будет подредактировать системные файлы вручную. Заодно и в применении vi попрактикуемся.

Прежде всего, создайте, как и для /etc/fstab, резервные копии /etc/passwd и /etc/qroup. Открываем в vi /etc/passwd, переходим к концу файла (G — помните?) — и видим, что курсор установился в первую позицию последней строки. Если нажать сейчас клавишу i, именно с этой позиции и начнётся правка. Но нам ни к чему корёжить существующую строчку, надо начать новую. Перейти в режим вставки начиная со строки ПОД текущей позволит нам команда o. Нажмём эту клавишу и приступим.

Так; первым в строке, соответствующей каждой учётной записи, стоит имя пользователя. Те, что составляют большую часть файла — с идентификаторами меньше сотни — это служебные эккаунты (или аккаунты? О, великий и могучий…); с пятисот начинается именование пользователей настоящих. Хорошо; раз опция загрузки Windows-системы обозначается загрузчиком GRUB как DOS, пусть и владеющий подмонтированными разделами Windows пользователь называется doser. Запишем его имя с новой строки.

Поставим вслед за тем двоеточие: это разделитель полей в файле /etc/passwd. В следующем поле у каждой из записей наличествует крестик (буква х) — как обозначение того факта, что в файле /etc/shadow хранится настоящий пароль данного пользователя, доступ к просмотру которого имеет только root, тогда как /etc/passwd открыт для чтения всем и каждому (команда ls, например, устанавливает соответствие между именем учётной записи и идентификационным номером именно в соответствии с ним). Поставим в этом поле иксик и мы; двинемся затем дальше. Два последующих поля (не забывайте разделять их двоеточиями!) — идентификаторы пользователя и группы; поставим те же, что уже применили в /etc/fstab для Windows-разделов, — 502. Затем идёт поле описания: как правило, в нём размещается полное имя пользователя или некое пояснение для служебного эккаунта. Содержание — произвольное (осторожнее с двоеточиями!). Следующее поле — домашний каталог для данной учётной записи. Данной записи домашний каталог не потребуется: под именем doser никто не будет входить в систему. Поэтому укажем в качестве каталога традиционную «чёрную дыру», устройство /dev/null, официально называемую в руководстве «мусорной корзиной для данных»: документ, записываемый в этот файл, исчезает. И наконец, последний штрих: командный интерпретатор пользователя. Та среда, в которой выполняются все прочие команды. По умолчанию в Red Hat Linux это /bin/bash, но мы даже консоли пользователю doser не доверим, и потому укажем вместо интерпретатора очередную затычку — программу /sbin/nologin, которая вежливо сообщает пытающемуся войти в систему пользователю с соответствующим именем, что логин невозможен. Впрочем, степень вежливости тут настраиваемая; за подробностями обращайтесь к man nologin.

Всё! Переходим в ex-режим (Escape, чтобы вернуться в командный, и затем двоеточие); ещё раз убеждаемся, что все поля заполнены верно, и набрав комбинацию wq, нажимаем Enter — выходим из редактора, сохранив файл.

Теперь — самое время внести правку в /etc/shadow, чтобы уж точно убедиться, что ни под каким паролем входа doser’у в систему не будет. Снова перемещаемся в конец файла, входим в режим редактирования… Посмотрите: у учётной записи, предназначенной для пользовательского входа в систему, здесь находится зашифрованный пароль. У всех остальных в соответствующем поле — по два восклицательных знака. Так сделаем и для doser’a. Пусть вас не смущает множество очевидно пустых полей: там хранится информация о сроках истечения действия паролей, и в системах с большим количеством пользователей поля эти работают вовсю. Мы сейчас можем даже не разбираться, каков смысл каждого из них, а просто скопировать их у любого другого (кроме «полноценного»!) пользователя. Страница руководства man 5 shadow поможет заинтересовавшимся вникнуть в вопрос глубже; скажу только, что формат дат в этом файле очень интересен и крайне показателен для Linux/*NIX. Эти целые числа обозначают дни, прошедшие до указанной даты с 1 января 1970 года. Кстати, файл /etc/passwd мало того что скрыт от непривилегированных взоров, — он ещё и для root’а снабжён опцией «только для чтения». Когда вы решитесь сохранять изменения в нём, система напомнит вам об этом и попросит подтвердить запись, напечатав в ex-режиме не w, а w!.

А теперь давайте и с группой разберёмся, наконец. Уже привычным нам способом создаём резервную копию /etc/group, открываем его в vi и в конце, с новой строки, записываем имя вновь создаваемой группы — dosers. Логично, верно? Ставим двоеточие-разделитель, иксик на месте пароля (да, и использование группы, а не только учётной записи, можно защищать паролем, — но нам на уровне домашнего ПК это ни к чему), снова двоеточие, номер группы (тот же, что фигурировал в gid, указанном нами в обновлённом /etc/fstab) и затем — список её членов через запятую. Всё достаточно логично.

Вот, собственно, и всё с корректным монтированием Windows-разделов. Остаётся пара финальных штрихов.

Отмонтируем от нынешних точек диски C и D, после чего уничтожим за ненадобностью сами точки — директории /dos-c и /dos-d в корневом каталоге. Для этой цели существует команда rmdir, удаляющая ТОЛЬКО пустые каталоги. Пользоваться ей спокойнее, чем стандартной rm, оперирующей и каталогами, и файлами: всегда точно знаешь, что если она сработала, в директории точно ничего важного забыто не было.

А затем исполним команду mount -a, которая монтирует файловые системы в соответствии с указаниями /etc/fstab/. И удостоверимся, что всё с нашими системами в порядке. Именно так они и будут монтироваться теперь сами после очередной загрузки.

И теперь с ними действительно всё в порядке: являясь участником группы dosers, пользователь dummy, от имени которого мы занимаемся тут изучением возможностей системы, в состоянии не только свободно читать файлы с Windows-разделов, но и создавать их там.

Ну что же, вот и сделан первый шаг в сторону обеспечения внутренней системной безопасности. Достаточно разумный комплекс мер по ней рассмотрим с вами в следующий раз, а там уже примемся за Интернет и графическую оболочку системы. Командная строка хороша, но жизнь всё-таки слишком коротка, чтобы провести её всю в командной строке…

Содержание

Практически все настройки практически всех приложений в Ubuntu, включая системные компоненты, хранятся в виде обычных текстовых файлов различного формата, называемых конфигурационными файлами или просто «конфигами». Это очень удобно, поскольку позволяет просто читать и менять их не только из конкретного приложения. Нормальные программы обычно содержат встроенный редактор параметров, основные настройки системы так же можно легко изменить с помощью графических утилит, доступных из меню «Система». Однако некоторые операции требуют редактирования системных файлов конфигурации, к которым нет доступа из графического окружения.

Редактирование конфигурационных файлов

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

  • Самый простой путь: вызвать диалог запуска программ (по умолчанию — Alt+F2) и запустить обычный текстовый редактор с правами суперпользователя командой:

    gksu gedit /путь/до/файла

    Пользователи Kubuntu должны подставить вместо gedit текстовый редактор KDE kate. У вас попросят ввести ваш пароль и, если вы являетесь администратором компьютера, откроется для редактирования нужный файл.

  • То же самое можно сделать из терминала, запустив редактор командой

    sudo gedit /путь/до/файла

    В этом случае вместо графического окна с запросом пароля у вас появится запрос непосредственно в терминале.

При введении пароля в терминале на экране ничего не отображается, ни звёздочек, ни чёрточек, ни каких-либо других символов, это нормально и так и должно быть, просто вводите пароль и нажимайте Enter

  • Ну и наконец можно отредактировать текстовый файл непосредственно из терминала, не открывая графических приложений вообще. Существует масса текстовых редакторов для терминала, самыми популярными в среде линуксойдов являются vi и emacs, однако ни первым, ни вторым новичку пользовать в принципе нереально, поэтому лучше всего использовать простой в освоении редактор nano, доступный по умолчанию в любой версии Ubuntu. Для открытия текстового файла с правами суперпользователя в nano просто наберите в терминале

    sudo nano /путь/до/файла

Если для доступа к конфигурационному файлу требуются права администратора, то, скорее всего, в нём содержаться какие-то важные системные настройки. Будьте предельно внимательны при редактировании таких файлов, ошибка может привести к неработоспособности всей системы. Если всё же случилось так, что вы записали в конфиг что-то не то, то не отчаивайтесь: всегда можно загрузиться с LiveCD и исправить любой файл.

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

Критические системные файлы

Существует несколько критических конфигурационных файлов, от содержимого которых зависит в системе очень многое, классическим примером является файл /etc/sudoers. Для редактирования конкретно этого файла существует специально адаптированная версия редактора vi, которую можно вызвать командой

sudo visudo

Будьте предельно внимательны при изменении подобных файлов, неправильная информация в /etc/sudoers может крайне просто привести к невозможности выполнить что-либо в системе.

Всем привет. Это перевод статьи из книги RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 and EX300.

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

Итак, поехали.

image

Чтобы получить доступ к файлам в Linux, используются разрешения. Эти разрешения назначаются трем объектам: файлу, группе и другому объекту (то есть всем остальным). В этой статье вы узнаете, как применять разрешения.

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

Управление владением файлами

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

Отображение владельца файла или каталога

В Linux у каждого файла и каждого каталога есть два владельца: пользователь и группа.

Эти владельцы устанавливаются при создании файла или каталога. Пользователь, который создаёт файл становится владельцем этого файла, а первичная группа, в которую входит этот же пользователь, так же становится владельцем этого файла. Чтобы определить, есть ли у вас как у пользователя права доступа к файлу или каталогу, оболочка проверяет владение ими.

Это происходит в следующем порядке:

  1. Оболочка проверяет, являетесь ли вы владельцем файла, к которому вы хотите получить доступ. Если вы являетесь этим владельцем, вы получаете разрешения и оболочка прекращает проверку.
  2. Если вы не являетесь владельцем файла, оболочка проверит, являетесь ли вы участником группы, у которой есть разрешения на этот файл. Если вы являетесь участником этой группы, вы получаете доступ к файлу с разрешениями, которые для группы установлены, и оболочка прекратит проверку.
  3. Если вы не являетесь ни пользователем, ни владельцем группы, вы получаете права других пользователей (Other).

Чтобы увидеть текущие назначения владельца, вы можете использовать команду ls -l. Эта команда показывает пользователя и группу-владельца. Ниже вы можете увидеть настройки владельца для каталогов в каталоге /home.

[root@server1 home]# ls -l
total 8
drwx------. 3  bob            bob            74     Feb   6   10:13 bob
drwx------. 3  caroline       caroline       74     Feb   6   10:13 caroline
drwx------. 3  fozia          fozia          74     Feb   6   10:13 fozia
drwx------. 3  lara           lara           74     Feb   6   10:13 lara
drwx------. 5  lisa           lisa           4096   Feb   6   10:12 lisa
drwx------. 14 user           user           4096   Feb   5   10:35 user

С помощью команды ls вы можете отобразить владельца файлов в данном каталоге. Иногда может оказаться полезным получить список всех файлов в системе, в которых в качестве владельца указан данный пользователь или группа. Для этого вы можете использовать find. Аргумент find -user может быть использован для этой цели. Например, следующая команда показывает все файлы, у которых в качестве владельца указан пользователь linda:

find / -user linda

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

Например, следующая команда ищет все файлы, принадлежащие группе users:

find / -group users

Изменение владельца

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

chown кто что

Например, следующая команда меняет владельца каталога /home/account на пользователя linda:

chown linda /home/account

Команда chown имеет несколько опций, одна из которых особенно полезна: -R. Вы можете догадаться, что она делает, потому что эта опция доступна и для многих других команд. Это позволяет вам рекурсивно устанавливать владельца, что позволяет вам установить владельца текущего каталога и всего, что находится ниже. Следующая команда меняет владельца для каталога /home и всего, что находится под ним, на пользователя lisa:

Сейчас владельцы выглядят так:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 account account 62 Sep 25 21:41 account
drwx------. 2 lisa    lisa    62 Sep 25 21:42 lisa

Выполним:

[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#

Теперь пользователь lisa стал владельцем каталога account:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 lisa account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa    62 Sep 25 21:42 lisa

Изменение владельца группы

Есть два способа изменить владение группой. Вы можете сделать это, используя chown, но есть специальная команда с именем chgrp, которая выполняет эту работу. Если вы хотите использовать команду chown, используйте . или : перед названием группы.

Следующая команда изменяет какого-либо владельца группы /home/account на группу account:

chown .account /home/account

Вы можете использовать chown для изменения владельца пользователя и/или группы несколькими способами. Вот несколько примеров:

  • chown lisa myfile1 устанавливает пользователя lisa владельцем файла myfile1.
  • chown lisa.sales myfile устанавливает пользователя lisa владельцем файла myfile, а так же устанавливает группу sales владельцем этого же файла.
  • chown lisa:sales myfile то же самое, что и предыдущая команда.
  • chown .sales myfile устанавливает группу sales владельцем файла myfile без изменения владельца пользователя.
  • chown :sales myfile то же самое, что и предыдущая команда.

Вы можете использовать команду chgrp, чтобы изменить владельца группы. Рассмотрим следующий пример, где вы можете с помощью chgrp установить владельцем каталога account группу sales:

chgrp .sales /home/account

Как и в случае с chown, вы можете использовать опцию -R с chgrp, а также рекурсивно менять владельца группы.

Понимание владельца по умолчанию

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

Чтобы показать текущую эффективную первичную группу, пользователь может использовать команду groups:

[root@server1 ~]# groups lisa
lisa : lisa account sales

Если текущий пользователь linda хочет изменить эффективную первичную группу, он будет использовать команду newgrp, за которой следует имя группы, которую он хочет установить в качестве новой эффективной первичной группы. После использования команды newgrp первичная группа будет активна, пока пользователь не введет команду exit или не выйдет из системы.

Ниже показано, как пользователь lisa использует эту команду, что бы первичной группой стала группа sales:

lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1

После изменения действующей основной группы все новые файлы, созданные пользователем, получат эту группу в качестве группы-владельца.Чтобы вернуться к исходной настройке первичной группы, используйте exit.

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

Управление основными правами

Система разрешений Linux была изобретена в 1970-х годах. Поскольку вычислительные потребности были ограничены в те годы, базовая система разрешений была довольно ограничена. Эта система разрешений использует три разрешения, которые можно применять к файлам и каталогам. В этом разделе вы узнаете, как использовать и изменять эти разрешения.

Понимание прав на чтение, запись и выполнение

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

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

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

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

Разрешение на выполнение — это то, что вам нужно для выполнения файла. Оно никогда не будет установлено по умолчанию, что делает Linux практически полностью невосприимчивым к вирусам. Только кто-то с правами записи на каталог может применять разрешение на выполнение.

Ниже обобщается использование основных разрешений:

Использование chmod

Для управления правами используется команда chmod. При использовании chmod вы можете устанавливать разрешения для пользователя (user), группы (group) и других (other). Вы можете использовать эту команду в двух режимах: относительный режим и абсолютный режим. В абсолютном режиме три цифры используются для установки основных разрешений.

При настройке разрешений рассчитайте необходимое вам значение. Если вы хотите установить чтение, запись и выполнение для пользователя, чтение и выполнение для группы, а также чтение и выполнение для других в файле /somefile, то вы используете следующую команду chmod:

chmod 755 /somefile

Когда вы используете chmod таким способом, все текущие разрешения заменяются установленными вами разрешениями.

Если вы хотите изменить разрешения относительно текущих разрешений, вы можете использовать chmod в относительном режиме. При использовании chmod в относительном режиме вы работаете с тремя индикаторами, чтобы указать, что вы хотите сделать:

  1. Сначала вы указываете, для кого вы хотите изменить разрешения. Для этого вы можете выбрать между пользователем (u), группой (g) и другими (o).
  2. Затем вы используете оператор для добавления или удаления разрешений из текущего режима или устанавливаете их абсолютно.
  3. В конце вы используете r, w и x, чтобы указать, какие разрешения вы хотите установить.

При изменении разрешений в относительном режиме вы можете пропустить часть «кому», чтобы добавить или удалить разрешение для всех объектов. Например, эта команда добавляет разрешение на выполнение для всех пользователей:

chmod +x somefile

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

chmod g+w,o-r somefile

При использовании chmod -R o+rx /data вы устанавливаете разрешение на выполнение для всех каталогов, а также для файлов в каталоге /data. Чтобы установить разрешение на выполнение только для каталогов, а не для файлов, используйте chmod -R o+ rX /data.

Верхний регистр X гарантирует, что файлы не получат разрешение на выполнение, если файл уже не установил разрешение на выполнение для некоторых объектов. Это делает X более разумным способом работы с разрешениями на выполнение; это позволит избежать установки этого разрешения на файлы, где оно не требуется.

Расширенные права

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

Понимание расширенных прав SUID, GUID и sticky bit

Есть три продвинутых разрешения. Первое из них — это разрешение на установку идентификатора пользователя (SUID). В некоторых особых случаях вы можете применить это разрешение к исполняемым файлам. По умолчанию пользователь, запускающий исполняемый файл, запускает этот файл со своими собственными разрешениями.

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

Рассмотрим, например, ситуацию, когда пользователю необходимо сменить пароль. Для этого пользователь должен записать свой новый пароль в файл /etc/shadow. Однако этот файл недоступен для записи пользователям, не имеющим прав доступа root:

root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow

Разрешение SUID предлагает решение этой проблемы. В утилите /usr/bin/passwd это разрешение применяется по умолчанию. Это означает, что при смене пароля пользователь временно получает права root, что позволяет ему записывать в файл /etc/shadow. Вы можете видеть разрешение SUID с ls -l как s в позиции, где обычно вы ожидаете увидеть x для пользовательских разрешений:

[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd

Разрешение SUID может выглядеть полезным (и в некоторых случаях так оно и есть), но в то же время оно потенциально опасно. При неправильном применении вы можете случайно раздать права доступа root. Поэтому я рекомендую использовать его только с максимальной осторожностью.

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

Второе специальное разрешение — это идентификатор группы (SGID). Это разрешение имеет два эффекта. При применении к исполняемому файлу, он дает пользователю, который исполняет файл, разрешения владельца группы этого файла. Таким образом, SGID может выполнить более или менее то же самое, что SUID. Однако для этой цели SGID практически не используется.

Как и в случае с разрешением SUID, SGID применяется к некоторым системным файлам в качестве настройки по умолчанию.

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

Это не всегда очень полезно, особенно потому, что у пользователей Red Hat/CentOS в качестве основной группы задана группа с тем же именем, что и у пользователя, и из которых пользователь является единственным участником. Таким образом, по умолчанию файлы, которые создает пользователь, будут групповыми для общего доступа.

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

Ситуация по умолчанию состоит в том, что когда любой из этих пользователей создает файл, основная группа становится владельцем. Поэтому по умолчанию linda не может получить доступ к файлам, созданным lori, и наоборот. Однако, если вы создаете общий каталог группы (скажем, /groups/account) и убедитесь, что разрешение SGID применено к этому каталогу и что учет группы установлен как владелец группы для этого каталога, все файлы, созданные в этом каталоге и во всех его подкаталогах, также получают account группы как владельца группы по умолчанию.

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

Разрешение SGID показывается в выводе ls -ld как s в позиции, где вы обычно находите разрешение на выполнение группы:

[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account

Третий из специальных разрешений — sticky bit. Это разрешение полезно для защиты файлов от случайного удаления в среде, где несколько пользователей имеют права на запись в один и тот же каталог. Если применяется закрепленный sticky bit, пользователь может удалить файл, только если он является пользователем-владельцем файла или каталога, в котором содержится файл. По этой причине он применяется в качестве разрешения по умолчанию для каталога /tmp и может быть полезен также для каталогов общих групп.

Без sticky bit, если пользователь может создавать файлы в каталоге, он также может удалять файлы из этого каталога. В общедоступной групповой среде это может раздражать. Представьте себе пользователей linda и lori, которые оба имеют права на запись в каталог /data/account и получают эти разрешения благодаря участию в группе account. Поэтому linda может удалять файлы, созданные lori, и наоборот.

Когда вы применяете sticky bit, пользователь может удалять файлы, только если выполняется одно из следующих условий:

  • Пользователь является владельцем файла;
  • Пользователь является владельцем каталога, в котором находится файл.

При использовании ls -ld, вы можете видеть sticky bit как t в позиции, где вы обычно видите разрешение на выполнение для других:

[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/

Применение расширенных прав

Чтобы применить SUID, SGID и sticky bit, вы также можете использовать chmod. SUID имеет числовое значение 4, SGID имеет числовое значение 2, а sticky bit имеет числовое значение 1.

Если вы хотите применить эти разрешения, вам нужно добавить четырехзначный аргумент в chmod, первая цифра которого относится к специальным разрешениям. Следующая строка, например, добавит разрешение SGID на каталог и установит rwx для пользователя и rx для группы и других:

chmod 2755 /somedir

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

  1. Для SUID используйте chmod u+s.
  2. Для SGID используйте chmod g+s.
  3. Для sticky bit используйте chmod +t, а затем имя файла или каталога, для которого вы хотите установить разрешения.

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

Пример работы со специальными правами

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

  1. Откройте терминал, в котором вы являетесь пользователем linda. Создать пользователя можно командой useradd linda, добавить пароль passwd linda.
  2. Создайте в корне каталог /data и подкаталог /data/sales командой mkdir -p /data/sales. Выполните cd /data/sales, чтобы перейти в каталог sales. Выполните touch linda1 и touch linda2, чтобы создать два пустых файла, владельцем которых является linda.
  3. Выполните su — lisa для переключения текущего пользователя на пользователя lisa, который также является членом группы sales.
  4. Выполните cd /data/sales и из этого каталога выполните ls -l. Вы увидите два файла, которые были созданы пользователем linda и принадлежат группе linda. Выполните rm -f linda*. Это удалит оба файла.
  5. Выполните touch lisa1 и touch lisa2, чтобы создать два файла, которые принадлежат пользователю lisa.
  6. Выполните su — для повышения ваших привилегий до уровня root.
  7. Выполните chmod g+s,o+t /data/sales, чтобы установить бит идентификатора группы (GUID), а также sticky bit в каталоге общей группы.
  8. Выполните su — linda. Затем выполните touch linda3 и touch linda4. Теперь вы должны увидеть, что два созданных вами файла принадлежат группе sales, которая является владельцем группы каталога /data/sales.
  9. Выполните rm -rf lisa*. Sticky bit предотвращает удаление этих файлов от имени пользователя linda, поскольку вы не являетесь владельцем этих файлов. Обратите внимание, что если пользователь linda является владельцем каталога /data/sales, он в любом случае может удалить эти файлы!

Управление ACL (setfacl, getfacl) в Linux

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

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

Понимание ACL

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

Утилита tar не поддерживает ACL. Чтобы убедиться, что настройки ACL не будут потеряны при создании резервной копии, используйте star вместо tar. star работает с теми же параметрами, что и tar; он просто добавляет поддержку настроек ACL.

Вы также можете создать резервную копию ACL с помощью getfacl, которую можно восстановить с помощью команды setfacl. Чтобы создать резервную копию, используйте getfacl -R /directory > file.acls. Чтобы восстановить настройки из файла резервной копии, используйте setfacl —restore=file.acl.

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

Подготовка файловой системы для ACL

Перед началом работы с ACL может потребоваться подготовить файловую систему для поддержки ACL. Поскольку метаданные файловой системы необходимо расширять, не всегда есть поддержка по умолчанию для ACL в файловой системе. Если при настройке списков ACL для файловой системы вы получаете сообщение «operation not supported», возможно, в вашей файловой системе отсутствует поддержка ACL.

Чтобы это исправить, вам нужно добавить опцию acl mount в файле /etc/fstab, чтобы файловая система была смонтирована с поддержкой ACL по умолчанию.

Изменение и просмотр настроек ACL с помощью setfacl и getfacl

Чтобы установить ACL, вам нужна команда setfacl. Чтобы увидеть текущие настройки ACL, вам нужен getfacl. Команда ls -l не показывает никаких существующих ACL; он просто показывает + после списка разрешений, который указывает, что списки ACL применяются и к файлу.

Перед настройкой списков ACL всегда полезно показать текущие настройки ACL с помощью getfacl. Ниже на примере вы можете увидеть текущие права доступа, как показано с помощью ls -ld, а также как показано с getfacl. Если вы посмотрите достаточно внимательно, вы увидите, что показанная информация точно такая же.

[root@server1 /]# ls -ld /dir
drwxr-xr-x. 2 root root 6 Feb 6 11:28 /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

В результате выполнения команды getfacl ниже видно, что разрешения показаны для трех разных объектов: пользователя, группы и других. Теперь давайте добавим ACL, чтобы дать права на чтение и выполнение и группе sales. Команда для этого setfacl -m g:sales:rx /dir. В этой команде -m указывает, что текущие настройки ACL необходимо изменить. После этого g:sales:rx сообщает команде установить ACL для чтения и выполнения (rx) для группы (g) sales. Ниже вы можете увидеть, как выглядит команда, а также вывод команды getfacl после изменения текущих настроек ACL.

[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x

Теперь, когда вы понимаете, как установить групповой ACL, легко понять ACL для пользователей и других пользователей. Например, команда setfacl -m u:linda:rwx /data дает разрешения пользователю linda в каталоге /data, не делая его владельцем и не изменяя назначение текущего владельца.

Команда setfacl имеет много возможностей и опций. Один вариант особенно важен, параметр -R. Если используется, опция делает настройку ACL для всех файлов и подкаталогов, которые в настоящее время существуют в каталоге, где вы устанавливаете ACL. Рекомендуется всегда использовать эту опцию при изменении списков ACL для существующих каталогов.

Работа с ACL по умолчанию

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

Установив ACL по умолчанию, вы определите разрешения, которые будут установлены для всех новых элементов, создаваемых в каталоге. Имейте в виду, что ACL по умолчанию не меняет разрешения для существующих файлов и подкаталогов. Чтобы изменить их, нужно добавить и обычный ACL!

Это важно знать. Если вы хотите использовать ACL для настройки доступа нескольких пользователей или групп к одному и тому же каталогу, вы должны установить ACL дважды. Сначала используйте setfacl -R -m, чтобы изменить ACL для текущих файлов. Затем используйте setfacl -m d:, чтобы позаботиться обо всех новых элементах, которые также будут созданы.

Чтобы установить ACL по умолчанию, вам просто нужно добавить опцию d после опции -m (порядок имеет значение!). Поэтому используйте setfacl -m d:g:sales:rx /data, если вы хотите, чтобы группа sales имела доступ на чтение и выполнение всего, что когда-либо будет создано в каталоге /data.

При использовании списков ACL по умолчанию также может быть полезно установить ACL для других. Обычно это не имеет особого смысла, потому что вы также можете изменить разрешения для других, используя chmod. Однако, что вы не можете сделать с помощью chmod, это указать права, которые должны быть предоставлены другим пользователям для каждого нового файла, который когда-либо будет создан. Если вы хотите, чтобы другие не получали никаких разрешений на что-либо, созданное в /data, например, используйте setfacl -m d:o::- /data.

ACL и обычные разрешения не всегда хорошо интегрированы. Проблемы могут возникнуть, если вы применили ACL по умолчанию к каталогу, после чего элементы были добавлены в этот каталог, и затем попытаетесь изменить обычные разрешения. Изменения, которые применяются к обычным разрешениям, не будут хорошо отражены в обзоре ACL. Чтобы избежать проблем, сначала установите обычные разрешения, после чего установите ACL по умолчанию (и после этого старайтесь не изменять их снова).

Пример управления расширенными правами с использованием ACL

В этом примере вы продолжите работу с каталогами /data/account и /data/sales, которые вы создали ранее. В предыдущих примерах вы гарантировали, что группа sales имеет разрешения на /data/sales, а группа account имеет разрешения на /data/account.

Сначала убедитесь, что группа account получает разрешения на чтение в каталоге /data/sales, а группа sales получает разрешения на чтение в каталоге /data/account.

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

  1. Откройте терминал.
  2. Выполните setfacl -m g:account:rx /data/sales и setfacl -m g:sales:rx /data/account.
  3. Выполните getfacl, чтобы убедиться, что права доступа были установлены так, как вы хотели.
  4. Выполните setfacl -m d:g:account:rwx,g:sales:rx /data/sales, чтобы установить ACL по умолчанию для каталога sales.
  5. Добавьте ACL по умолчанию для каталога /data/account, используя setfacl -m d:g:sales:rwx,g:account:rx /data/account.
  6. Убедитесь, что настройки ACL действуют, добавив новый файл в /data/sales. Выполните touch /data/sales/newfile и выполните getfacl /data/sales/newfile для проверки текущих разрешений.

Установка прав по умолчанию с помощью umask

Выше вы узнали, как работать с ACL по умолчанию. Если вы не используете ACL, есть параметр оболочки, который определяет права по умолчанию, которые вы получите: umask (обратная маска). В этом разделе вы узнаете, как изменить разрешения по умолчанию с помощью umask.

Вы, наверное, заметили, что при создании нового файла устанавливаются некоторые разрешения по умолчанию. Эти разрешения определяются настройкой umask. Этот параметр оболочки применяется ко всем пользователям при входе в систему. В параметре umask используется числовое значение, которое вычитается из максимальных разрешений, которые могут быть автоматически установлены для файла; максимальная настройка для файлов — 666, а для каталогов — 777.

Однако некоторые исключения относятся к этому правилу. Вы можете найти полный обзор настроек umask в таблице внизу.

Из цифр, используемых в umask, как и в случае числовых аргументов для команды chmod, первая цифра относится к разрешениям пользователя, вторая цифра относится к разрешениям группы, а последняя относится к разрешениям по умолчанию, установленным для других. Значение umask по умолчанию 022 дает 644 для всех новых файлов и 755 для всех новых каталогов, созданных на вашем сервере.

Полный обзор всех числовых значений umask и их результатов в таблице ниже.

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

Есть два способа изменить настройку umask: для всех пользователей и для отдельных пользователей. Если вы хотите установить umask для всех пользователей, вы должны убедиться, что параметр umask учитывается при запуске файлов среды оболочки, как указано в /etc/profile. Правильный подход — создать сценарий оболочки с именем umask.sh в каталоге /etc/profile.d и указать umask, который вы хотите использовать в этом сценарии оболочки. Если в этом файле изменяется umask, он применяется ко всем пользователям после входа на сервер.

Альтернативой настройке umask через /etc/profile и связанные файлы, где он применяется ко всем пользователям, входящим в систему, является изменение настроек umask в файле с именем .profile, который создается в домашнем каталоге каждого пользователя.

Настройки, примененные в этом файле, применяются только для отдельного пользователя; следовательно, это хороший метод, если вам нужно больше детализации. Мне лично нравится эта функция, чтобы изменить значение umask по умолчанию для пользователя root на 027, тогда как обычные пользователи работают с umask по умолчанию 022.

Работа с расширенными атрибутами пользователя

Это заключительный раздел о правах в Linux.

При работе с разрешениями всегда существует связь между объектом пользователя или группы и разрешениями, которые эти объекты пользователя или группы имеют для файла или каталога. Альтернативный метод защиты файлов на сервере Linux — работа с атрибутами.
Атрибуты выполняют свою работу независимо от пользователя, который обращается к файлу.

Как и в случае с ACL, для атрибутов файла может потребоваться включить параметр mount.

Это опция user_xattr. Если вы получаете сообщение «operation not supported» при работе с расширенными атрибутами пользователя, обязательно установите параметр mount в файле /etc/fstab.

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

Ниже приведены наиболее полезные атрибуты, которые вы можете применить:

A Этот атрибут гарантирует, что время доступа к файлу файла не изменяется.
Обычно каждый раз, когда файл открывается, время доступа к файлу должно быть записано в метаданные файла. Это отрицательно влияет на производительность; поэтому для файлов, к которым осуществляется регулярный доступ, атрибут A можно использовать для отключения этой функции.

a Этот атрибут позволяет добавлять, но не удалять файл.

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

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

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

I Этот атрибут включает индексирование для каталога, в котором он включен. Это обеспечивает более быстрый доступ к файлам для примитивных файловых систем, таких как Ext3, которые не используют базу данных B-tree для быстрого доступа к файлам.

i Этот атрибут делает файл неизменным. Следовательно, в файл нельзя вносить изменения, что полезно для файлов, которые нуждаются в дополнительной защите.

j Этот атрибут гарантирует, что в файловой системе ext3 файл сначала записывается в журнал, а затем — в блоки данных на жестком диске.

s Перезаписать блоки, в которых файл был сохранен, на 0 с после удаления файла. Это гарантирует, что восстановление файла невозможно после того, как он был удален.

u Этот атрибут сохраняет информацию об удалении. Это позволяет разрабатывать утилиту, которая работает с этой информацией для спасения удаленных файлов.

Если вы хотите применить атрибуты, вы можете использовать команду chattr. Например, используйте chattr +s somefile, чтобы применить атрибуты к somefile. Нужно удалить атрибут? Тогда используйте chattr -s somefile, и он будет удален. Чтобы получить обзор всех атрибутов, которые в настоящее время применяются, используйте команду lsattr.

Резюме

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

Если вам понравился этот перевод, то прошу написать об этом в комментариях. Будет больше мотивации делать полезные переводы.

В статье исправил некоторые опечатки и грамматические ошибки. Уменьшил некоторые громоздкие абзацы на более мелкие для удобства восприятия.

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

За замечания спасибо berez.

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

На:
Если вы не являетесь владельцем файла, оболочка проверит, являетесь ли вы участником группы, у которой есть разрешения на этот файл. Если вы являетесь участником этой группы, вы получаете доступ к файлу с разрешениями, которые для группы установлены, и оболочка прекратит проверку.

Спасибо за замечание CryptoPirate

Файлы конфигурации содержат информацию, необходимую для управления работой программы. Пользователи Linux, особенно администраторы Linux, должны знать, как редактировать файлы конфигурации для обслуживания сервера или рабочего стола Ubuntu. Файлы конфигурации в Ubuntu хранятся в подкаталогах папки /etc в виде текстовых файлов и могут быть отредактированы с помощью текстовых редакторов. Некоторые примеры конфигурационных файлов — /etc/hosts, host.conf, hosts. resolv.conf, /etc/networks, syslog.conf и т.д. в операционных системах на базе Linux.

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

  • Использование редактора Gedit
  • Использование редактора Nano
  • Использование редактора Vim
  • Использование редактора Gvim
  • Использование редактора Emacs

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

Содержание

  1. Использование редактора Gedit
  2. Использование редактора Nano
  3. Использование редактора Vim
  4. Использование редактора Gvim
  5. Использование редактора Emacs

Использование редактора Gedit

Gedit — это текстовый редактор по умолчанию в среде рабочего стола Gnome. Он поддерживает вкладки, поэтому вы можете открывать различные файлы в нескольких вкладках. Это более простой и удобный текстовый редактор по сравнению с другими доступными текстовыми редакторами.

Чтобы отредактировать файл конфигурации в текстовом редакторе, запустите Terminal, нажав комбинацию клавиш Ctrl+Alt+T. Затем введите следующую команду как sudo:

sudo gedit /path/to/filename

Замените /path/to/filename на фактический путь к файлу конфигурации, который вы хотите отредактировать. Когда появится запрос на ввод пароля, введите пароль sudo.

Пример: редактирование файла /etc/resolv.conf

sudo gedit /etc/resolv.conf

Он похож на редактор Блокнот в операционной системе Windows. Как только откроется окно редактора, вы можете начать набирать текст или редактировать его, не входя ни в какой режим. Как только вы закончите редактирование, нажмите Ctrl+S, чтобы сохранить файл.

Редактирование файла конфигурации с помощью GEdit

Использование редактора Nano

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

Чтобы отредактировать любой файл конфигурации, просто откройте окно терминала, нажав комбинацию клавиш Ctrl+Alt+T. Перейдите в каталог, где находится файл. Затем введите nano, за которым следует имя файла, который вы хотите отредактировать.

sudo nano /path/to/filename

Замените /path/to/filename на фактический путь к файлу конфигурации, который вы хотите отредактировать. Когда появится запрос на ввод пароля, введите sudo password.

Теперь вы можете редактировать и вносить изменения в конфигурационный файл с помощью редактора nano.

Редактирование файла конфигурации в редакторе nano

После завершения редактирования нажмите Ctrl+O для сохранения и Ctrl+X для выхода из редактора.

Использование редактора Vim

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

Чтобы открыть файл в редакторе Vim, откройте окно терминала, нажав комбинацию клавиш Ctrl+Alt+T. Затем введите vi как sudo, за которым следует имя файла и путь к нему, например:

sudo vi /path/to/filename

Замените /path/to/filename на фактический путь к файлу конфигурации, который вы хотите отредактировать. Когда появится запрос на ввод пароля, введите sudo password.

Затем отредактируйте файл с помощью редактора Vim. Обратите внимание, что при открытии редактора вы переходите в командный режим. Вот несколько шагов для редактирования файла в редакторе Vim:

  • Чтобы отредактировать файл, нажмите I на клавиатуре, чтобы войти в режим вставки, здесь вы можете редактировать так же, как в обычном редакторе.
  • После завершения редактирования выйдите из этого режима, нажав Esc. Это вернет вас в обычный режим.
  • Чтобы сохранить файл, введите :w в командном режиме.
  • Чтобы выйти из редактора, введите :q в командном режиме.
  • Чтобы совместить эти действия, введите :wq для сохранения и выхода одновременно.

Использование редактора файлов Vi на Ubuntu

Использование редактора Gvim

Gvim — это редактор Vim с графическим интерфейсом пользователя. Чтобы установить Gvim, запустите Terminal, нажав Ctrl+Alt+T. Затем введите следующую команду в Terminal, чтобы начать установку.

sudo apt-get install vim-gnome

После завершения установки вы можете открыть и отредактировать любой файл конфигурации. Введите следующую команду с правами sudo в Терминале, чтобы открыть любой файл конфигурации в Gvim:

sudo gvim /path/to/filename

Нажмите I, чтобы войти в режим вставки, в котором вы можете редактировать файл.

Файловый редактор GVim

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

Использование редактора Emacs

Emacs также является текстовым редактором, но он не является встроенным редактором. Вы должны вручную установить его с помощью Терминала Ubuntu. В нем очень много функций, включая встроенный веб-браузер, калькулятор, календарь, Терминал и т.д.

Чтобы установить редактор Emacs, запустите Terminal, нажав комбинацию клавиш Ctrl+Alt+T. Введите следующую команду в Терминале как sudo:

После установки вы сможете открывать и редактировать в нем любые файлы конфигурации.

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

sudo emacs /path/to/filename

Замените /path/to/filename на фактический путь к файлу конфигурации, который вы хотите отредактировать. Когда появится запрос на ввод пароля, введите пароль sudo.

Редактирование текстовых файлов в Emacs

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

Пользователи Linux обычно редактируют файлы конфигурации с помощью терминальных инструментов, таких как nano и vim. Если вы хотите отредактировать файл графически — даже системный — текстовый редактор gedit сделает это безболезненно и легко.

Файлы, файлы везде

Часто повторяемая фраза относительно Linux и других операционных систем на базе Unix, таких как macOS, звучит так: «все является файлом».

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

Текстовым редактором GNOME по умолчанию является gedit, поэтому вы должны найти его в любой системе с рабочим столом GNOME. Сюда входят Ubuntu, Fedora, Debian, CentOS и Red Hat. Это удобный инструмент для редактирования файлов, когда все, что вам нужно, — это редактор, достаточный для выполнения работы, без необходимости изучения некоторых мощных редакторов, таких как vim.

Чтобы запустить gedit из командной строки, введите gedit и нажмите Enter.


Скоро появится текстовый редактор gedit.

текстовый редактор gedit с пустым документом в Linux

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

Конечно, вы также можете запустить gedit из меню приложений на рабочем столе Linux. Его часто называют «Текстовый редактор». Просто поищите в меню приложений «gedit».

Запуск gedit из меню приложений на рабочем столе GNOME Ubuntu

Запуск gedit в качестве фоновой задачи

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

Введите gedit, пробел, амперсанд & и нажмите Enter — вот так:

gedit &

gedit & команда в окне терминала

Открытие существующего файла

Чтобы открыть существующий текстовый файл, нажмите кнопку «Открыть» на панели инструментов gedit. Вы также можете нажать Ctrl + O, чтобы открыть файл.

Это открывает меню недавних файлов. Если вы хотите повторно открыть один из перечисленных файлов, щелкните имя файла. Если вы хотите открыть другой файл, нажмите кнопку «Другие документы…» в нижней части меню.

открыть меню файла в gedit

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

Нажмите зеленую кнопку «Открыть», когда вы выделите файл, который хотите отредактировать.

диалог открытия файла gedit

Открытие файла из командной строки

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

gedit ana.c

команда gedit ana.c в окне терминала

Функция выделения синтаксиса в gedit позволяет особенно удобно редактировать файлы исходного кода программы и сценарии оболочки.

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

gedit с файлом ana.c, открытым для редактирования

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

измененный файл в gedit

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

Сохранение изменений в файл

Чтобы сохранить изменения, нажмите кнопку «Сохранить» на панели инструментов. Вы также можете нажать Ctrl + S, чтобы сохранить файл.

Чтобы сохранить файл под другим именем или в другом месте, нажмите кнопку меню на панели инструментов, а затем выберите в меню «Сохранить как».

кнопка меню с подсветкой

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

диалог сохранения файла gedit

Редактирование системных файлов

Чтобы отредактировать системный файл, вам обычно нужно использовать sudo, потому что владельцем файла, скорее всего, будет root. Чтобы быть точным, вы сможете открыть системный файл, даже если вы не используете sudo, но вы не сможете сохранить какие-либо изменения обратно в файл, если не использовали sudo.

sudo gedit /etc/samba/smb.conf

команда sudo gedit в окне терминала

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

Эта команда открывает gedit и загружает файл конфигурации samba для редактирования.

gedit редактирование smb.conf

Репликация владения и разрешений на новый файл

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

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

Допустим, мы хотим отредактировать файл fstab.

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

touch new_fstab

коснитесь нового fstab в окне терминала

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

ls -l new_fstab

ls -l new_fstab в окне терминала

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

Теперь мы скопируем файл / etc / fstab поверх только что созданного файла. Затем мы проверим атрибуты файла, чтобы увидеть, не изменились ли они.

sudo cp /etc/fstab new_fstab
ls -l new_fstab

cp / etc / fstab new_fstab в окне терминала

Fstab был скопирован поверх файла new_fstab. Атрибуты файла new_fstab не изменились. Давайте проверим атрибуты исходного файла fstab.

ls -l /etc/fstab

ls -l / etc / fstab в окне терминала

Как мы видим, владельцем является root, а права доступа к файловому режиму разные. Разрешения группы — чтение и запись. Разрешения группы для new_fstab доступны только для чтения. Нам нужно будет исправить эти два атрибута, прежде чем мы скопируем файл обратно.

Сначала мы запустим gedit и отредактируем файл new_fstab, чтобы внести необходимые изменения.

gedit new_fstab

gedit new_fstab в окне терминала

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

Мы можем сделать это с помощью параметра –reference команд chmod и chown.

Параметр –reference принимает имя файла в качестве параметра. Это заставляет chmod и chown брать из этого файла права доступа к файловому режиму и значения владения файлом и копировать их в целевой файл. Затем мы можем использовать ls для проверки правильности установки атрибутов отредактированного файла, прежде чем копировать их обратно в исходный файл.

sudo chmod --reference=/etc/fstab new_fstab
sudo chown --reference=/etc/fstab new_fstab
ls -l new_fstab

параметр --reference в окне терминала

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

sudo cp new_fstab fstab в окне терминала

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

sudo mount -a

Будьте осторожны

Мой девиз — осторожность, и я не боюсь повторять предупреждения. Если вы совершенно не уверены в том, как ваши изменения в системном файле повлияют на поведение вашего компьютера, не вносите изменений.

Когда вам действительно нужно отредактировать текстовый файл, независимо от того, является он системным файлом или нет, вы обнаружите, что gedit — это быстрый и простой редактор, который не утомляет вас слишком большим количеством параметров, но при этом имеет достаточно возможностей, чтобы вы могли работа сделана.

Tag/tag.png

Candidate for Deletion
This article may not be appropriate for this wiki, and may be deleted. More info…

Содержание

Contents

  1. Права доступа в системе Linux
  2. Команда chmod

    1. Символьная форма прав доступа
    2. Числовая форма прав доступа
    3. Примеры
  3. Команда chown
  4. Команда chgroup

Права доступа в системе Linux

Поскольку Linux (да и UNIX вообще) — многопользовательская OS, в ней существует система прав доступа к файлам, служащая для защиты файлов каждого пользователя от влияния других пользователей системы.

Права доступа подразделяются на три типа:

  • чтение (read)

  • запись (write)

  • выполнение (execute)

Разрешение на чтение позволяет пользователю читать содержимое файлов, а в случае каталогов — просматривать перечень имен файлов в каталоге (используя, например, команду ls). Разрешение на запись позволяет пользователю писать в файл, изменять его или удалять. Для каталогов это дает право cоздавать в каталоге новые файлы и каталоги, или удалять файлы в этом каталоге. Наконец, разрешение на выполнение позволяет пользователю выполнять файлы (как бинарные программы, так и командные файлы). Если на файле стоит атрибут Execute, то независимо от его расширения он считается программой, которую можно запустить. (Вот почему в *nix не принято ставить исполняемым файлам расширения по типу DOS’овских *.com, *.exe, *.bat. Вообще в Unix/Linux нет такого жесткого понятия расширение файла, как в Dos/Windows, и система сама определяет тип файлов независимо от их расширения, но это — уже другая история…). Так же атрибут выполнения может стоять у shell-скриптов, CGI-скриптов, и у всего, что можно хоть как-то запустить. Разрешение на выполнение применительно к каталогам означает возможность выполнять команды вроде cd.

Эти типы прав доступа могут быть предоставлены для трех классов пользователей:

  • владельцы — у каждого файла в Linux’e есть один владелец.

  • группы — с каждым файлом связана группа пользователей этого файла.

  • остальные пользователи.

Владельцем файла становится юзер, который создал этот файл. Короче говоря, для файла все юзеры делятся на 3 типа: хозяин, или владелец, юзеры, состоящие в одной группе с владельцем, и все остальные юзеры. Для каждого типа — свои права. Учтите, что директории и все системные устройства в UNIX являются обычными файлами. Тот же самый /dev/fd0 — это не сам Floppy disk, а всего лишь файл, связанный с флопповодом. Поэтому, если root запретил юзеру доступ к этому файлу, тот не сможет использовать флопповод (так же обстоят дела с модемами, хардами и т.п.). Владельцем всех системных файлов является root. Он же имеет право забирать файлы у одного юзера и передавать их другому (менять владельца).

Команда chmod

Изменить права доступа к файлу может либо его владелец, либо сам root. Делается это командой chmod. Существует две формы представления прав доступа: символьная и цифровая.

Символьная форма прав доступа

Если войти в любой каталог, где есть файлы, и набрать ls -l, то появится список всех файлов в этом каталоге и права доступа в символьной форме. Строка прав доступа состоит из 10 символов. Первый символ указывает на тип файла: d — директория, — обычный файл. Три последующих — права доступа владельца к этому файлу. Если первый символ из этих трех — r, владелец имеет право читать этот файл, а если , то не имеет. Следующие 2 символа — w — писать и x — запускать. Если вместо них стоит , значит, владелец этого права не имеет. Еще 3 символа — права доступа группы, еще три — права всех остальных пользователей.

Примеры:

drwxrwxrwx — директория, к которой все имеют любые права доступа.

-rwxr—r— — обычный файл, владелец может делать все, а остальные — только читать.

-r——— — обычный файл, который владелец может только читать, а остальные пользователи не видят.

Важно заметить, что права доступа, которые имеет файл, зависят также от прав доступа к каталогу, в котором этот файл находится. Например, даже если файл имеет -rwxrwxrwx, другие пользователи не смогут до него добраться, если у них не будет прав на чтение и выполнение каталога, в котором находится файл. Например, если юзер захочет ограничить доступ ко всем своим файлам, он может просто изменить права доступа своего домашнего каталога /home/user на drwx——. Таким образом, никто другой не будет иметь доступ в его каталог, а следовательно посторонним будут недоступны и все файлы. Так что, пользователь может не заботиться об индивидуальной защите своих файлов. Другими словами, чтобы иметь доступ к файлу, вы должны иметь доступ ко всем каталогам, лежащим на пути от корня к этому файлу, а также разрешение на доступ собственно к этому файлу. Обычно пользователи UNIX весьма открыты всеми своими файлами. По умолчанию файлам устанавливается защита -rw-r—r—, которая позволяет другим пользователям читать файлы, но ни коим образом их не менять. Каталогам обычно устанавливаются права доступа drwxr-xr-x, что позволяет другим пользователям ходить с правами экскурсантов по вашим каталогам, но ничего в них не трогать и не записывать.

Но многие пользователи хотят держать других подальше от своих файлов. Установив права доступа файла -rw——-, вы никому не покажете этот файл и не дадите записать в него. Также хорошо закрывает файлы защита соответствующего каталога drwx——.

С правами доступа в символьной форме chmod работает так:

chmod {a,u,g,o}{+,-}{r,w,x} <filenames>

Кратко, вы выбираете из all (все), user (пользователь), group (группа) или other (другие). Далее указываете, либо вы добавляете права (+), либо лишаете прав (). И наконец, вы указываете один или несколько режимов: read, write или execute.

Числовая форма прав доступа

Теперь права доступа в числовой форме. Для некоторых эта форма может показаться более простой. Надо запомнить только следующее:

  • 400 — владелец имеет право на чтение
  • 200 — владелец имеет право на запись
  • 100 — владелец имеет право на выполнение
  • 40 — группа имеет право на чтение
  • 20 — группа имеет право на запись
  • 10 — группа имеет право на выполнение
  • 4 — остальные имеют право на чтение
  • 2 — остальные имеют право на запись
  • 1 — остальные имеют право на выполнение

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

Примеры

Символьная форма

chmod a+r stuff

Дает всем пользователям право читать файл stuff.

chmod +r stuff

То же самое, что и ранее (a — по умолчанию).

chmod og-x stuff

Лишает права на выполнение всех, кроме владельца.

chmod u+rwx stuff

Разрешает владельцу все (read, write и execute).

chmod o-rwx stuff

Запрещает все (read, write и execute) пользователям категории другие (other).

=== Числовая форма===

400+200+100+40+4=744

chmod 744 stuff

владелец может делать все, а остальные — только читать.

400+40+4=444

chmod 444 stuff

все имеют право только на чтение.

400+100+10+1=611

chmod 611 stuff

владелец может читать и выполнять, остальные — только выполнять.

400+200+100+40+10+4+1=755

chmod 755 script

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

Команда chown

Изменение владельца файла осуществляется командой chown, например:

sudo chown <имя нового владельца> <имя файла>

Для передачи каталога надо вводить:

sudo chown -R <имя нового владельца> <имя каталога>

Команда chgroup

Изменение группы, которой принадлежит файл.

sudo chown <название новой группы> <имя файла>

Для передачи каталога надо вводить:

sudo chown -R <название новой группы> <имя каталога>

Valery V. Kachurov

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

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

Новичкам намного проще редактирование файлов ubuntu в графическом интерфейсе и для этого в этой системе по умолчанию поставляется программа Gedit. Это очень простой, но достаточно функциональный текстовый редактор, который позволяет делать все что нужно.

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

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

Также вы можете запустить Gedit через терминал. Для этого откройте терминал с помощью сочетания клавиш Ctrl+Alt+T, и выполните:

gedit /путь/к/папке/с_файлом/файл

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

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

gksu gedit /путь/к/папке/с_файлом/файл

После этого программа запросит пароль и запустит текстовый редактор от имени администратора. Дальше вы сможете успешно выполнить редактирование файлов в Ubutnu и сохранить изменения в файле.

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

sudo apt update

Установите пакет nautilus-admin:

sudo apt install -y nautilus-admin

Затем выполните такую команду чтобы полностью закрыть Nautilus:

nautilus -q

Теперь загрузите Nautilus, и в меню появится пункт Редактировать как администратор:

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

Редактирование файлов в Ubuntu через терминал

Очень часто среди опытных пользователей принято работать с текстовыми файлами через терминал, для этого применяются две программы. Одна из них более простая и рассчитана на новичков — nano, а вторая более сложная, но очень эффективная — vim. Для редактирования файла с помощью nano используйте соответствующую команду:

nano /путь/к/файлу/имя_файла

Если файл нужно открыть от имени администратора:

sudo nano /путь/к/файлу/имя_файла

Редактор nano очень прост, для перемещения по файлу используйте кнопки со стрелками, после того, как закончите редактировать файл ubuntu, нажмите чтобы сохранить Ctrl+O, а для выхода Ctrl+X. Еще поддерживается поиск и замена, но все на очень примитивном уровне, и этого явно недостаточно для того чтобы работать эффективно.

Другой редактор ориентирован на профессионалов — это редактор vim. Он очень гибкий, может работать в двух режимах — командном и обычном режиме набора текста. Чтобы открыть с помощью него файл выполните:

vi /путь/к/файлу/имя_файла

Или для редактирования файла с правами суперпользователя:

sudo vi /путь/к/файлу/имя_файла

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

Выводы

В этой небольшой статье мы рассмотрели как редактировать файлы в терминале Ubuntu, а также как это более удобно выполнять через графический интерфейс. Это довольно простая задача, для нас — уже опытных пользователей, но для новичков она может показаться совсем непростой. Если у вас остались вопросы, спрашивайте в комментариях!

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

sudoedit /etc/ipsec.secrets

Как говорит EXL допустимо, но не рекомендуется. А за совет chmod -R 777 /etc/ipsec.secrets руки отрывать нужно.

mogwai ★★★★

(03.12.16 19:53:57 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от mogwai 03.12.16 19:53:57 MSK

Ответ на:

комментарий
от Linkolness 03.12.16 19:57:37 MSK

Когда будешь знать что происходит — сам уже решишь что с этим делать. Самый правильный совет тебе всё-равно никто кроме тебя самого не даст.

Goury ★★★★★

(03.12.16 20:01:19 MSK)



Последнее исправление: Goury 03.12.16 20:02:18 MSK
(всего

исправлений: 1)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от Goury 03.12.16 20:01:19 MSK

Английский учу, но до чтения тех документации пока далековато. Изучать Линукс-гуд, но для реализации тех задач, что я на него возложил мне нужно сперва отредактировать этот долбаный файл)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от Linkolness 03.12.16 19:57:37 MSK

sudo vi запускает от рута редактор, sudoedit делает копию нужного тебе файла, который открывает в редакторе запущенном из под твоего пользователя. После закрытия редактора изменённая копия заменит исходный файл.

mogwai ★★★★

(03.12.16 20:08:54 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от mogwai 03.12.16 20:08:54 MSK

сделал все как вы сказали, вот такую ошибку выбило
E325: ATTENTION
Found a swap file by the name «/etc/.ipsec.secrets.swp»
owned by: root dated: Sat Dec 3 19:02:35 2016
file name: /etc/ipsec.secrets
modified: YES
user name: root host name: fedya-STOLL
process ID: 4344
While opening file «/etc/ipsec.secrets»
dated: Tue Apr 5 15:44:54 2016

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от Linkolness 03.12.16 20:12:55 MSK

Нашло временный файл от другой инстанции. Может в соседнем окне не закрыли ви из под рута?
Сейчас можете просто удалить его sudo rm -f /etc/.ipsec.secrets.swp, на будущее хорошо бы английский подучить, да разобраться с тем как работает используемый редактор.

mogwai ★★★★

(03.12.16 20:17:01 MSK)

  • Ссылка

Ответ на:

комментарий
от Linkolness 03.12.16 20:12:55 MSK

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

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от Linkolness 03.12.16 20:17:16 MSK

Именно.

или ZZ (две заглавные Z).
vi — сложнее обычного редактора. Установи vim и запусти vimtutor — интерактивный самоучитель по vim/vi.

mogwai ★★★★

(03.12.16 20:20:01 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от mogwai 03.12.16 20:20:01 MSK

не получается выйти, то что я сейчас вижу в окне терминала, выглядит вот так. буквы А, B -реакция на попытку перемещения курсора влево или вправо
ZZ

B:q
:q
A
B
B
B

B
udo rm -f /etc/.ipsec.secrets.swp, This file holds shared secrets or RSA private keys for authentication.

# RSA private key for this host, authenticating it to any other host
# which knows the public part.

~
~
~
~
~
~

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от Linkolness 03.12.16 20:17:16 MSK

незная как выйти

в этом и был повох ) про vi даже онекдот есть

anonymous

(03.12.16 20:37:02 MSK)

  • Ссылка

Ответ на:

комментарий
от Linkolness 03.12.16 20:30:59 MSK

Просто удали этот .swp файл. И перед тем как использовать vim/vi потрать 30 минут на vimtutor

mogwai ★★★★

(03.12.16 20:37:42 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от mogwai 03.12.16 20:37:42 MSK

все, удалил, ввел sudo edit…/ipsec.secrets
открылось «окно» редактора, как я понял vi
но не могу допереть куда нужно вписать нужные мне данные, никакие символы не вводятся, выглядит все как-то так:
# This file holds shared secrets or RSA private keys for authentication.

# RSA private key for this host, authenticating it to any other host
# which knows the public part.

~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от Linkolness 03.12.16 20:49:47 MSK

короче суть вот в чем мне нужно сделать вот это
To enter your credentials you need to edit /etc/ipsec.secrets file. You should add one line in the following format. Replace YOUR_USERNAME with your hide.me username and YOUR_PASSWORT with your hide.me password. Notice the whitespace after YOUR_USERNAME, after «:» and after «EAP

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

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от Linkolness 03.12.16 20:53:05 MSK

Не надо не vi не vim. Это сложный редактор и с наскока в нём чёрт ногу сломит.

Используйте nano. Он похож на обычный редактор:

sudo nano /etc/ipsec.secrets

Внесите изменения в файл. Затем нажмите Ctrl-X. Потом Y (если спросит, Y значит yes). Затем enter.

lexazloy

(03.12.16 21:16:40 MSK)

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от lexazloy 03.12.16 21:16:40 MSK

открыть через nano получилось, но с редактированием та же проблема, символы не вводятся
выглядит все так:
File /etc/ipsec.secrets is being edited (by root with VIM 7.4, PID 4862); continue?
ниже как вы и писали предложения с вариантами Y, N но даже это не вводится

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от Linkolness 03.12.16 21:25:47 MSK

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

  • Ссылка

Ответ на:

комментарий
от Linkolness 03.12.16 20:05:41 MSK

Откуда ты можешь это знать, если ты даже не знаешь что такое права в контексте файловой системы?
Если бы тебе и правда надо было бы отредактировать файл для решения задачи — ты бы уже знал всё что надо про файлы.
Но ты не знаешь. А значит и задачу ты придумал себе без представления о контексте её выполнения. А значит задача некорректна изначально.

Goury ★★★★★

(03.12.16 23:33:54 MSK)

  • Ссылка

Ответ на:

комментарий
от lexazloy 03.12.16 21:16:40 MSK

export EDITOR=nano
sudoedit /etc/ipsec.secrets

anonymous

(08.12.16 00:53:12 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от anonymous 08.12.16 00:53:12 MSK

1. Автору вопроса эта дефолтный консольный редактор не нужен.

2. Мало кому нужна муть с временным файлом.

Мой вим помнит историю изменений и чтобы откатиться мне достаточно одной команды.

lexazloy

(08.12.16 14:07:13 MSK)

  • Ссылка

Ответ на:

комментарий
от saahriktu 08.12.16 01:04:39 MSK

Ответ на:

комментарий
от lexazloy 08.12.16 14:11:45 MSK

Ситуации разные бывают. Если это на работе, то вообще подозрительно, что юзеру дали sudo. Если же специфика работы другая, и всем 3,5 человек спокойно раздают sudo, то можно попробовать договориться с админом на смену root’ового пароля на новый уникальный известный юзеру. Чтобы он спокойно у себя редактировал настройки в /etc, но при этом этот пароль не подходил к другим машинам. А может человек и сам есть админ, и редактирует свои настройки в /etc в серверной, или вообще у себя дома. И зачем тогда себя ограничивать?

saahriktu ★★★★★

(08.12.16 14:18:21 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от saahriktu 08.12.16 14:18:21 MSK

Если им раздают sudo, то договариваться о паролях не надо. Для этого sudo и придумали.

sudo это современный, функциональный инструмент, который покрывает необходимый функционал.

А вам просто больше нравится su и вы ищете оправдания его использования. ;)

lexazloy

(08.12.16 14:28:14 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от EXL 03.12.16 19:49:06 MSK

Ответ на:

комментарий
от lexazloy 08.12.16 14:28:14 MSK

Может и так, но всё равно подозрительно. Если юзеру не доверяют, то как ему можно доверить sudo? Мало ли что он натворит, вдруг его машина, например, внезапно начнёт DDoS’исить всю локальную сеть организации, и она понесёт убытки? А если юзеру доверять можно, то ему можно и root’овый пароль вручить. А sudo — ни рыба, ни мясо. Вроде как и доверяют, но не совсем.

saahriktu ★★★★★

(08.12.16 14:47:13 MSK)



Последнее исправление: saahriktu 08.12.16 14:48:20 MSK
(всего

исправлений: 1)

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от saahriktu 08.12.16 14:47:13 MSK

sudo — доверяй, но проверяй. :)

Это не только вопрос доверия, но и удобства. Взять тот же пароль:

1. нам не надо помнить оба, достаточно одного своего;

2. если пользователь лишается прав, не надо стирать ему память менять пароль;

2. руту не обязательно иметь пароль вообще.

lexazloy

(08.12.16 15:44:59 MSK)

  • Показать ответы
  • Ссылка

Ответ на:

комментарий
от lexazloy 08.12.16 15:44:59 MSK

sudo — угроза безопасности, если комп похакали извне с правами юзера (через браузер например).

praseodim ★★★★★

(08.12.16 16:00:04 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от praseodim 08.12.16 16:00:04 MSK

sudo не исключает наличие пароля.

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

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

Не стоит забывать и о логирование sudo. Мониторинг входа конкретного пользователя в конкретный временной период поможет устранить вероятные проблемы и возможный ущерб нанесённый недоброжелателем.

lexazloy

(08.12.16 16:50:32 MSK)

  • Ссылка

Ответ на:

комментарий
от lexazloy 08.12.16 15:44:59 MSK

Ну, в современном мире много лишних сущностей. Можно и с ними, но можно и без них. Ну, и всем удобно разное, да.

Тот же Ричард Столлман вспоминал как хакеры прежних лет в первых юниксах вообще не торопились вводить права и пароли. Не хотели предоставлять системным администраторам инструменты контроля за ними. А когда всё-таки начались подвижки в этом направлении, то им стало интересно найти способ сбрасывать пароли на пустые. И они таки это делали. После чего отправляли этим людям сообщения наподобие: «Пожалуйста, не надо устанавливать пароль! В следующий раз просто нажмите Enter — так всем проще!».

А сейчас… Пароли, шифрование, информационная безопасность,…

saahriktu ★★★★★

(08.12.16 17:02:19 MSK)

  • Показать ответ
  • Ссылка

Ответ на:

комментарий
от saahriktu 08.12.16 17:02:19 MSK

Так компьютер у них был большой, а окружение товарищей маленькое, да ещё и сплочённое общим интересом. К тому же всякая интеллектуальная студентота топовых мировых вузов. Раньше в МТИ и Беркли дураков даже за деньги не брали, это сейчас всякие gender studies.

Моей семье и друзьям, например, ключи от моей квартиры не нужны — приходите. Но вот я всё равно запираю потому что мир не ограничивается моим кругом.

Ужасный век, ужасные сердца. :)

lexazloy

(09.12.16 03:05:50 MSK)

  • Ссылка

Ответ на:

комментарий
от saahriktu 08.12.16 14:47:13 MSK

Обычно sudo используют вместо su. Но в /etc/sudoers можно довольно тонко настроить права, что кому можно, а что нельзя. См. man sudoers. Кроме того, можно настроить так, чтоб при выполнении любой команды sudo, root получал сообщение о том, кто какую команду выполнил. Правда, обходится это просто: sudo bash и дальше любые команды (правда это предположение, не проверял). Ну и просто позволяет избежать частых ошибок, когда человек выполняет su для привилегированных операций, а выйти забывает, оставаясь под рутом, что опасно. В sudo же за раз выполняется одна команда, но и пароль каждый раз вводить не надо. Наконец, sudoers можно настроить так, чтоб sudo запрашивала пароль рута, а не пользователя. В общем, очень гибкая команда, просто мало кто об этом знает и всем этим пользуется.

  • Ссылка

опытом работы с линукс в 1 день
etc/ipsec.secrets

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

Deleted

(09.12.16 03:47:33 MSK)

  • Ссылка

Ответ на:

комментарий
от saahriktu 08.12.16 14:47:13 MSK

сорри, слегка ошибся

Кроме того, можно настроить так, чтоб при выполнении любой команды sudo, root получал сообщение о том, кто какую команду выполнил. Правда, обходится это просто: sudo bash и дальше любые команды (правда это предположение, не проверял).

Небольшая ошибочка. Рут (или судо-пользователь) получает сообщения в /var/mail/root|user в случае неудачной попытки выполнить sudo (3 раза неверный пароль), и настраивать для этого ничего не надо. В случае неудачной попытки выполнить su ничего не приходит (по крайней мере у меня).

А все команды sudo могут писаться в лог, но для этого надо настроить /etc/sudoers таким образом:

Defaults logfile=/var/log/sudolog

И да, при выполнении sudo bash все дальнейшие команды, вводимые из привилегированной bash, как я и предполагал, в этот лог не попадают.

  • Ссылка

накладывай патч на этапе сборки того пакета, в котором содержится этот файл. Единственный Ъ-вей

anonymous

(11.12.16 03:30:57 MSK)

  • Ссылка

Ответ на:

комментарий
от EXL 03.12.16 19:49:06 MSK

совсем новичек

sudo vi /etc/ipsec.secrets

слышу твой дикий гогот за кадром.

Deleted

(11.12.16 03:42:37 MSK)

  • Ссылка

Ответ на:

комментарий
от saahriktu 08.12.16 01:04:39 MSK

И koi

Deleted

(14.12.16 14:57:50 MSK)

  • Ссылка

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.

Понравилась статья? Поделить с друзьями:
  • Linux как изменить размер разделов
  • Linux как изменить размер home
  • Linux как изменить приоритет процесса
  • Loyalty error ржд что это
  • Loyalty error приложение ржд