скопление (2) по сравнению с fcntl (2) по NFS

Основные две возможности командной строки:

  • Использовать su и введите пароль root при запросе.
  • Поместить sudo перед командой, и вводят Ваш пароль при запросе.

Выполнение оболочки управляет как корень

sudo (предпочтенный если не выполнение графического дисплея)

Это - предпочтительный метод для большинства систем, включая Ubuntu, Linux Mint, (возможно) Debian и других. Если Вы не знаете отдельного пароля root, используйте этот метод.

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

Пример:

sudo service apache restart

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

$ sudo -i
# command 1
# command 2
...
# exit

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

Для получения дополнительной информации посмотрите sudo веб-сайт или тип man sudo в Вашей системе. Sudo очень настраивается; например, это может быть настроено, чтобы позволить определенному пользователю только выполнить определенные команды как корень. Читайте sudoers страница справочника для получения дополнительной информации; использовать sudo visudo отредактировать sudoers файл.

su

su команда существует в большинстве подобных Unix систем. Это позволяет Вам выполнить команду как другому пользователю, если Вы знаете что пароль пользователя. Когда выполнено без пользователя указал, su примет значение по умолчанию в корневую учетную запись.

Пример:

su -c 'service apache restart'

Команда для выполнения должна быть передана с помощью -c опция. Обратите внимание необходимость в кавычках так, чтобы команда не была проанализирована оболочкой, но передана неповрежденная корневой оболочке это su выполнения.

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

$ su
# command 1
# command 2
...
# exit

В некоторых системах необходимо быть в группе номер 0 (названный wheel) использовать su. (Точка должна ограничить повреждение, если пароль root случайно пропущен кому-то.)

Вход в систему как корень

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

Однопользовательский режим

Однопользовательский режим или уровень выполнения 1, также дает Вам полномочия пользователя root. Это предназначается, прежде всего, для ситуаций с экстренным техобслуживанием, где начальная загрузка на многопользовательский уровень выполнения не возможна. Можно загрузиться в однопользовательский режим путем передачи single или emergency на командной строке ядра. Обратите внимание, что начальная загрузка в однопользовательский режим не является тем же как начальной загрузкой системы обычно и входом в систему как корень. Скорее система только запустит сервисы, определенные для уровня выполнения 1. Как правило, это - самое маленькое количество сервисов, требуемых иметь применимую систему.

Можно также добраться до однопользовательского режима при помощи команды telinit: telinit 1; однако, эта команда требует, чтобы Вы уже получили права пользователя root с помощью некоторого другого метода, для выполнения.

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

Другие программы

Calife

Calife позволяет Вам команды выполнения как другой пользователь путем ввода собственного пароля, если авторизовано. Это подобно намного более широко распространенному sudo (см. выше). Calife более легок, чем sudo, но также и менее настраивается.

Op

Op позволяет Вам команды выполнения как другой пользователь, включая корень. Это не полноценный инструмент для выполнения произвольных команд: Вы вводите op сопровождаемый мнемосхемой, настроенной системным администратором для выполнения определенной команды.

Супер

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

Выполнение графической команды как корень

См. также Википедию.

PolicyKit (предпочел при использовании GNOME),

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

Посмотрите man pkexec для получения дополнительной информации.

KdeSu, KdeSudo (предпочел при использовании KDE),

kdesu и kdesudo графические фронтенды к su и sudo соответственно. Они позволяют Вам запускать программы X Window как корень без преград. Они - часть KDE. Ввести

kdesu -c 'command --option argument'

и введите пароль root или тип

kdesudo -c 'command --option argument'

и введите свой пароль (если авторизовано для выполнения sudo). Если Вы проверяете, “сохраняют пароль” опцией в KdeSu, необходимо будет только ввести пароль root однажды на сессию входа в систему.

Другие программы

Ktsuss

Ktsuss (“сохраняют su простое, глупое”) является графической версией su.

Beesu

Beesu является графическим фронтендом к команде su, которая заменила Gksu в основанных на Red Hat операционных системах. Это было разработано главным образом для RHEL и Fedora.

Устаревшие методы

gksu

и gksudo

gksu и gksudo графические фронтенды к su и sudo соответственно. Они позволяют Вам запускать программы X Window как корень без преград. Они - часть Gnome. Ввести

gksu command --option argument

и введите пароль root или тип

gksudo command --option argument

и введите свой пароль (если авторизовано для выполнения sudo).

gksu и gksudo являются устаревшими. Они были заменены PolicyKit в GNOME, и много дистрибутивов (таких как Ubuntu) больше не устанавливают их по умолчанию. Вы не должны зависеть от них являющийся доступным или работающий правильно.

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

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

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

Редактирование файла как корень

Посмотрите, Как я редактирую файл как корень?

20
07.11.2010, 23:49
4 ответа

Lennart Poettering недавно сделал некоторое рытье в поведение при блокировании файловой системы Linux, которое не красит особенно розовое изображение для блокировки по NFS (особенно продолжение, с которым он связывается в нижней части сообщения).

http://0pointer.net/blog/projects/locking.html

3
27.01.2020, 19:44
  • 1
    Это - точный тип информации, которую я искал.Спасибо! После нескольких недель расследования это - очень похожее разрешение, в которое я приехал, но замечательно прочитать статью, которая подтверждает мои подозрения (и предлагает других). Ссылка, из которой комментарии страницы была также хорошая ссылка, и хорошая статья о POSIX и его история): samba.org/samba/news/articles/low_point/tale_two_stds_os2.html –  Jmoney38 14.09.2010, 05:07

Я вполне уверен, что Вы смотрите на проблемы прежней версии. Вспомните, что руководство Perl5 было выпущено в 1994 и что это было просто редактирование руководства Perl4 с 1991. В те дни можно было, вероятно, сказать о часто названной Файловой системе Кошмара, что "это не, как хорошо танцы переноса, который поражает, но что это танцует вообще".

NFS2 в эпоху 1991 года был медленно сканирования из Sun в другие платформы и был относительно сыр. Модель обеспечения безопасности чрезвычайно не существовала (корень на клиентской машине мог читать, полное содержание NFS монтируется), и блокирующий - через nfs.lockd - была эта сторона экспериментальных. Вы были бы глупы ожидать, что семантика скопления будет работать правильно если вообще между двумя различными предположительно совместимыми реализациями. Коаксильный кабель был доминирующим Ethernet PHY, в то время, когда который у многих пользователей сети никогда не было неудовольствия использования (что Вы подразумеваете, что забыли ставить 50 нагрузочных резисторов?), если это дает Вам лучшую власть на состоянии интранет затем.

У Larry Wall и команды были все основания сделать пессимистические предположения о правильности блокировок NFS в то время, и это - вид безопасного программирования, которое будущие жокеи кода, ненавидят для удаления, потому что настолько трудно доказать отсутствие дефекта путем удаления старого кода, который повторно введен в совместимости с унаследованной системой, о которой Вы даже не слышали.

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

Все вышеупомянутое было заперто из памяти и могло, вероятно, быть доказано посредством исследования (например, http://nfs.sourceforge.net/), но доказательство - как они говорят - находится в блокировке, и если Вы не протестировали его, это считается поврежденным.

16
27.01.2020, 19:44
  • 1
    , Это - большой анализ. На самом деле я пришел к тому же заключению до сих пор. Я перечитал по nfs страницу SourceForge снова после регистрации той ссылки, и я наконец нашел то, что я ищу! Вот глубокий анализ непосредственно из первых уст! –  Jmoney38 08.09.2010, 15:49
  • 2
    ой, я совершил нападки, входят... переходят к nfs.sourceforge.net, раздел D10 к нижней части обсуждает этот вопрос подробно. –  Jmoney38 08.09.2010, 15:50

Другой, прямо от Linux-NFS FAQ: nfs.sf.net

Я пытаюсь использовать скопление ()/BSD блокировки для блокировки файлов, используемых на нескольких клиентах, но файлы становятся поврежденными. Каким образом? Скопление A. ()/BSD блокирует действие только локально на Linux клиенты NFS до 2.6.12. Используйте fcntl () / блокировки POSIX, чтобы гарантировать, что блокировки файла видимы другим клиентам.

Вот некоторые способы сериализировать доступ к файлу NFS.

Используйте fcntl () / POSIX, блокирующий API. Этот тип блокировки обеспечивает блокировку диапазона байта через несколько клиентов по протоколу NLM, или по NFSv4. Используйте отдельный lockfile и создайте жесткие ссылки на него. См. описание в разделе O_EXCL создавания (2) страница справочника. Стоит отметить, что до рано 2,6 ядра, O_EXCL создает, не были атомарными на Linux клиенты NFS. Не используйте O_EXCL, создает, и ожидайте атомарное поведение среди нескольких клиента NFS, если Вы не выполняете ядро, более новое, чем 2.6.5.

Это - известная проблема, что Perl использует скопление ()/BSD блокирующий по умолчанию. Это может повредить программы, портированные от других операционных систем, таких как Солярис, которые ожидают, что блокировки flock/BSD будут работать как блокировки POSIX.

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

Клиент NFS в 2.6.12 оказывает поддержку для скопления ()/BSD, соединяет файлы NFS путем эмуляции блокировок BSD-стиля с точки зрения блокировок диапазона байта POSIX. Другие клиенты NFS, которые используют тот же механизм эмуляции или то использование fcntl () / блокировки POSIX, будут затем видеть те же блокировки, которые видит клиент NFS Linux.

В локальных файловых системах Linux блокировки POSIX и блокировки BSD невидимы друг для друга. Таким образом, из-за этой эмуляции, приложения, работающие на сервере NFS Linux, будут все еще видеть файлы, заблокированные клиентами NFS, как заблокированными с fcntl () / блокировка POSIX, использует ли приложение на клиенте BSD-стиль или блокировку стиля POSIX. Если серверное приложение будет использовать скопление () блокировки BSD, то оно не будет видеть блокировки, которые используют клиенты NFS.

3
27.01.2020, 19:44
  • 1
    Также - два клиента NFS рабочее ядро 3.13.* посмотрите скопление друг друга () s? –  reinierpost 17.08.2016, 19:11
  • 2
    Если я понимаю правильно, ответ нет. Если я не пропустил что-то, flock не имеет, не делает и не заблокирует через nfs, монтируется. –  Daniel Farrell 25.10.2017, 03:34
  • 3
    Это делает, по крайней мере, на NFS4. пар –  rjh 21.03.2018, 11:31

Сейчас это устарело. NFS4 поддерживает блокировку внутри протокола(демон lockd или механизм обратного вызова RPC не требуются )и метод Perl flock()отлично работает -мы используем его в производстве.

Очень старые версии ядра реализовывалиflock(системный вызов )как операцию «нет» -в NFS, и другие вещи, такие как блокировка диапазона байтов, не поддерживались должным образом. Отсюда и истерика.

5
27.01.2020, 19:44

Теги

Похожие вопросы