Bash - перезагрузить профиль или bashrc при переключении на root [duplicate]

Я уже читал это из руководства, но я не вижу разницы ..

su - изменить идентификатор пользователя или стать суперпользователем

sudo -s [command]

-s ( shell) задает оболочку, указанную переменной окружения SHELL, если она установлена ​​или оболочка, указанная в passwd (5). Если задана команда, она передается оболочке для выполнения. В противном случае выполняется интерактивная оболочка.

sudo -i исчезает описание в ручном режиме

133
задан 8 May 2015 в 10:57

15 ответов

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

su (что означает «подставить пользователя» или «переключить пользователя») - делает именно это, он запускает другой экземпляр оболочки с привилегиями целевого пользователя. Чтобы убедиться, что у вас есть права на это, он запрашивает у вас пароль целевого пользователя. Итак, чтобы стать root, вам нужно знать пароль root. Если на вашем компьютере есть несколько пользователей, которым необходимо запускать команды от имени root, все они должны знать пароль root - обратите внимание, что это будет тот же пароль. Если вам нужно отменить права администратора от одного из пользователей, вам нужно изменить пароль root и рассказать об этом только тем людям, которым необходимо сохранить доступ - беспорядочно.

sudo (что означает «подставить пользователя» или «переключить пользователя») полностью отличается. Он использует файл конфигурации (/ etc / sudoers), в котором перечислены, какие пользователи имеют права на определенные действия (запускать команды как root и т. Д.). При вызове запрашивает целевого пользователя - для обеспечения человек на терминале действительно тот же «joe», который указан в /etc/sudoers. Чтобы отменить права администратора от человека, вам просто нужно отредактировать файл конфигурации (или удалить пользователя из группы, указанной в этом конфиге). Это приводит к значительно более эффективному управлению привилегиями.

В результате этого во многих системах на базе Debian root у пользователя нет установленного пароля - т. Е. Невозможно войти в систему как root напрямую.

Кроме того, /etc/sudoers позволяет указать некоторые дополнительные параметры - то есть пользователь X может выполнять только программу Y и т. д.

Часто используемая комбинация sudo su работает следующим образом: сначала sudo ] запрашивает ваш пароль, и, если вам это разрешено, вызывает следующую команду (su) в качестве суперпользователя. Поскольку su вызывается root, вам не требуется вводить пароль целевого пользователя. Таким образом, sudo su позволяет открывать оболочку как другой пользователь (включая root), если вам разрешен доступ суперпользователя файлом /etc/sudoers.

103
ответ дан 18 July 2018 в 14:59

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

su (что означает «подставить пользователя» или «переключить пользователя») - делает именно это, он запускает другой экземпляр оболочки с привилегиями целевого пользователя. Чтобы убедиться, что у вас есть права на это, он запрашивает у вас пароль целевого пользователя. Итак, чтобы стать root, вам нужно знать пароль root. Если на вашем компьютере есть несколько пользователей, которым необходимо запускать команды от имени root, все они должны знать пароль root - обратите внимание, что это будет тот же пароль. Если вам нужно отменить права администратора от одного из пользователей, вам нужно изменить пароль root и рассказать об этом только тем людям, которым необходимо сохранить доступ - беспорядочно.

sudo (что означает «подставить пользователя» или «переключить пользователя») полностью отличается. Он использует файл конфигурации (/ etc / sudoers), в котором перечислены, какие пользователи имеют права на определенные действия (запускать команды как root и т. Д.). При вызове запрашивает целевого пользователя - для обеспечения человек на терминале действительно тот же «joe», который указан в /etc/sudoers. Чтобы отменить права администратора от человека, вам просто нужно отредактировать файл конфигурации (или удалить пользователя из группы, указанной в этом конфиге). Это приводит к значительно более эффективному управлению привилегиями.

В результате этого во многих системах на базе Debian root у пользователя нет установленного пароля - т. Е. Невозможно войти в систему как root напрямую.

Кроме того, /etc/sudoers позволяет указать некоторые дополнительные параметры - то есть пользователь X может выполнять только программу Y и т. д.

Часто используемая комбинация sudo su работает следующим образом: сначала sudo ] запрашивает ваш пароль, и, если вам это разрешено, вызывает следующую команду (su) в качестве суперпользователя. Поскольку su вызывается root, вам не требуется вводить пароль целевого пользователя. Таким образом, sudo su позволяет открывать оболочку как другой пользователь (включая root), если вам разрешен доступ суперпользователя файлом /etc/sudoers.

106
ответ дан 24 July 2018 в 20:31

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

su (что означает «подставить пользователя» или «переключить пользователя») - делает именно это, он запускает другой экземпляр оболочки с привилегиями целевого пользователя. Чтобы убедиться, что у вас есть права на это, он запрашивает у вас пароль целевого пользователя. Итак, чтобы стать root, вам нужно знать пароль root. Если на вашем компьютере есть несколько пользователей, которым необходимо запускать команды от имени root, все они должны знать пароль root - обратите внимание, что это будет тот же пароль. Если вам нужно отменить права администратора от одного из пользователей, вам нужно изменить пароль root и рассказать об этом только тем людям, которым необходимо сохранить доступ - беспорядочно.

sudo (что означает «подставить пользователя» или «переключить пользователя») полностью отличается. Он использует файл конфигурации (/ etc / sudoers), в котором перечислены, какие пользователи имеют права на определенные действия (запускать команды как root и т. Д.). При вызове запрашивает целевого пользователя - для обеспечения человек на терминале действительно тот же «joe», который указан в /etc/sudoers. Чтобы отменить права администратора от человека, вам просто нужно отредактировать файл конфигурации (или удалить пользователя из группы, указанной в этом конфиге). Это приводит к значительно более эффективному управлению привилегиями.

В результате этого во многих системах на базе Debian root у пользователя нет установленного пароля - т. Е. Невозможно войти в систему как root напрямую.

Кроме того, /etc/sudoers позволяет указать некоторые дополнительные параметры - то есть пользователь X может выполнять только программу Y и т. д.

Часто используемая комбинация sudo su работает следующим образом: сначала sudo ] запрашивает ваш пароль, и, если вам это разрешено, вызывает следующую команду (su) в качестве суперпользователя. Поскольку su вызывается root, вам не требуется вводить пароль целевого пользователя. Таким образом, sudo su позволяет открывать оболочку как другой пользователь (включая root), если вам разрешен доступ суперпользователя файлом /etc/sudoers.

106
ответ дан 31 July 2018 в 23:33

Этот ответ является обманом моего ответа на обман этого вопроса, поставленный здесь на канонический ответ, чтобы люди могли его найти!

Основное различие между sudo -i и sudo -s :

sudo -i дает вам корневую среду, т. е. ваш ~/.bashrc игнорируется. sudo -s дает вам среду пользователя, поэтому ваш ~/.bashrc соблюдается.

Вот пример, вы можете видеть, что у меня есть приложение lsl в моем каталоге ~/.bin/, доступное через sudo -s, но недоступное с sudo -i. Обратите внимание также, что приглашение Bash изменяется так же, как с sudo -i, но не с sudo -s:

dotancohen@melancholy:~$ ls .bin lsl dotancohen@melancholy:~$ which lsl /home/dotancohen/.bin/lsl dotancohen@melancholy:~$ sudo -i root@melancholy:~# which lsl root@melancholy:~# exit logout dotancohen@melancholy:~$ sudo -s Sourced .bashrc dotancohen@melancholy:~$ which lsl /home/dotancohen/.bin/lsl dotancohen@melancholy:~$ exit exit

Хотя sudo -s удобен для предоставления вам среды, с которой вы знакомы, Этот ответ является обманом моего ответа на обман этого вопроса, поставленный здесь на канонический ответ, чтобы люди могли его найти! по двум причинам:

Наглядное напоминание о том, что вы находитесь в «корневой» сессии. Корневая среда гораздо реже будет отравлена ​​вредоносными программами, такими как строка изгоев в .bashrc.
23
ответ дан 18 July 2018 в 14:59

su запрашивает пароль пользователя «root».

sudo запрашивает ваш собственный пароль (а также проверяет, разрешено ли вам запускать команды с правами root, которые настроены через /etc/sudoers - по умолчанию всем учетным записям пользователей, принадлежащим к группе «admin», разрешено использовать sudo).

sudo -s запускает оболочку как root, но не меняет ваш рабочий каталог , sudo -i имитирует вход в корневую учетную запись: ваш рабочий каталог будет /root, а root .profile и т. д. будут получены, как при входе в систему.

6
ответ дан 18 July 2018 в 14:59

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

sudo -s запускает оболочку с привилегиями root. sudo -i также получает среду корневого пользователя.

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

Здесь больше обсуждается этот точный вопрос.

47
ответ дан 18 July 2018 в 14:59

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

Например, если я исправляю свою систему с live CD / USB, я буду часто монтируйте мой жесткий диск и другие необходимые вещи и chroot в систему. В этом случае моя первая команда обычно:

su - myuser # Note the '-'. It means to act as if that user had just logged in.

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

2
ответ дан 18 July 2018 в 14:59

Этот ответ является обманом моего ответа на обман этого вопроса, поставленный здесь на канонический ответ, чтобы люди могли его найти!

Основное различие между sudo -i и sudo -s :

sudo -i дает вам корневую среду, т. е. ваш ~/.bashrc игнорируется. sudo -s дает вам среду пользователя, поэтому ваш ~/.bashrc соблюдается.

Вот пример, вы можете видеть, что у меня есть приложение lsl в моем каталоге ~/.bin/, доступное через sudo -s, но недоступное с sudo -i. Обратите внимание также, что приглашение Bash изменяется так же, как с sudo -i, но не с sudo -s:

dotancohen@melancholy:~$ ls .bin lsl dotancohen@melancholy:~$ which lsl /home/dotancohen/.bin/lsl dotancohen@melancholy:~$ sudo -i root@melancholy:~# which lsl root@melancholy:~# exit logout dotancohen@melancholy:~$ sudo -s Sourced .bashrc dotancohen@melancholy:~$ which lsl /home/dotancohen/.bin/lsl dotancohen@melancholy:~$ exit exit

Хотя sudo -s удобен для предоставления вам среды, с которой вы знакомы, Этот ответ является обманом моего ответа на обман этого вопроса, поставленный здесь на канонический ответ, чтобы люди могли его найти! по двум причинам:

Наглядное напоминание о том, что вы находитесь в «корневой» сессии. Корневая среда гораздо реже будет отравлена ​​вредоносными программами, такими как строка изгоев в .bashrc.
24
ответ дан 24 July 2018 в 20:31
  • 1
    Я заметил, что sudo -s, похоже, не обрабатывает / etc / profile, или что-нибудь, что у меня есть в /etc/profile.d/ .. любая идея, почему? – meffect 23 February 2017 в 09:21

su запрашивает пароль пользователя «root».

sudo запрашивает ваш собственный пароль (а также проверяет, разрешено ли вам запускать команды с правами root, которые настроены через /etc/sudoers - по умолчанию всем учетным записям пользователей, принадлежащим к группе «admin», разрешено использовать sudo).

sudo -s запускает оболочку как root, но не меняет ваш рабочий каталог , sudo -i имитирует вход в корневую учетную запись: ваш рабочий каталог будет /root, а root .profile и т. д. будут получены, как при входе в систему.

6
ответ дан 24 July 2018 в 20:31
  • 1
    чтобы сделать ответ более полным: sudo -s почти равно su ($ HOME отличается), а sudo -i равно su - – DJCrashdummy 29 July 2017 в 03:58

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

sudo -s запускает оболочку с привилегиями root. sudo -i также получает среду корневого пользователя.

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

Здесь больше обсуждается этот точный вопрос.

47
ответ дан 24 July 2018 в 20:31
  • 1
    & quot; вы сами с привилегиями root & quot; это не то, что на самом деле происходит :) На самом деле, вы не можете быть сами с привилегиями root & quot; - либо вы корень, либо вы сами. Попробуйте ввести whoami в обоих случаях. Тот факт, что результаты cd ~ отличаются друг от друга, является результатом sudo -s, не устанавливающего переменную среды HOME. – Sergey 22 October 2011 в 12:28
  • 2
    @Sergey, whoami, он говорит, что это «root», потому что вы запускаете «whoami» cmd, как будто вы его судируете, поэтому временно (на протяжении всей этой команды) вы являетесь пользователем root, но вы все равно можете не иметь полного root в соответствии с файлом sudoers. – Octopus 7 February 2015 в 02:15
  • 3
    @Octopus: то, что я пытался сказать, это то, что в Unix процесс может иметь только один UID, и этот UID определяет разрешения процесса. Вы не можете быть «сами с привилегиями root», программа либо работает с вашим UID, либо с UID корня (0). – Sergey 7 February 2015 в 02:24
  • 4
    Что касается «вы, возможно, все еще не имеете полного доступа root в соответствии с файлом sudoers»: файл sudoers контролирует, кто может запускать эту команду в качестве другого пользователя, но это происходит до выполнения команды. Однако, как только вам разрешили запустить процесс, скажем, root - в текущем процессе есть UID корня и есть полный доступ к системе, поэтому sudo не может ограничивать это. Опять же, вы всегда либо сами, либо корень, нет «половины-половины». Таким образом, если файл sudoers позволяет запускать оболочку как root - разрешения в этой оболочке будут неотличимы от "нормального" корневая оболочка. – Sergey 7 February 2015 в 02:32

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

Например, если я исправляю свою систему с live CD / USB, я буду часто монтируйте мой жесткий диск и другие необходимые вещи и chroot в систему. В этом случае моя первая команда обычно:

su - myuser # Note the '-'. It means to act as if that user had just logged in.

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

2
ответ дан 24 July 2018 в 20:31

Этот ответ является обманом моего ответа на обман этого вопроса, поставленный здесь на канонический ответ, чтобы люди могли его найти!

Основное различие между sudo -i и sudo -s :

sudo -i дает вам корневую среду, т. е. ваш ~/.bashrc игнорируется. sudo -s дает вам среду пользователя, поэтому ваш ~/.bashrc соблюдается.

Вот пример, вы можете видеть, что у меня есть приложение lsl в моем каталоге ~/.bin/, доступное через sudo -s, но недоступное с sudo -i. Обратите внимание также, что приглашение Bash изменяется так же, как с sudo -i, но не с sudo -s:

dotancohen@melancholy:~$ ls .bin lsl dotancohen@melancholy:~$ which lsl /home/dotancohen/.bin/lsl dotancohen@melancholy:~$ sudo -i root@melancholy:~# which lsl root@melancholy:~# exit logout dotancohen@melancholy:~$ sudo -s Sourced .bashrc dotancohen@melancholy:~$ which lsl /home/dotancohen/.bin/lsl dotancohen@melancholy:~$ exit exit

Хотя sudo -s удобен для предоставления вам среды, с которой вы знакомы, Этот ответ является обманом моего ответа на обман этого вопроса, поставленный здесь на канонический ответ, чтобы люди могли его найти! по двум причинам:

Наглядное напоминание о том, что вы находитесь в «корневой» сессии. Корневая среда гораздо реже будет отравлена ​​вредоносными программами, такими как строка изгоев в .bashrc.
24
ответ дан 31 July 2018 в 23:33
  • 1
    Я заметил, что sudo -s, похоже, не обрабатывает / etc / profile, или что-нибудь, что у меня есть в /etc/profile.d/ .. любая идея, почему? – meffect 23 February 2017 в 09:21

su запрашивает пароль пользователя «root».

sudo запрашивает ваш собственный пароль (а также проверяет, разрешено ли вам запускать команды с правами root, которые настроены через /etc/sudoers - по умолчанию всем учетным записям пользователей, принадлежащим к группе «admin», разрешено использовать sudo).

sudo -s запускает оболочку как root, но не меняет ваш рабочий каталог , sudo -i имитирует вход в корневую учетную запись: ваш рабочий каталог будет /root, а root .profile и т. д. будут получены, как при входе в систему.

6
ответ дан 31 July 2018 в 23:33
  • 1
    чтобы сделать ответ более полным: sudo -s почти равно su ($ HOME отличается), а sudo -i равно su - – DJCrashdummy 29 July 2017 в 03:58

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

sudo -s запускает оболочку с привилегиями root. sudo -i также получает среду корневого пользователя.

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

Здесь больше обсуждается этот точный вопрос.

47
ответ дан 31 July 2018 в 23:33
  • 1
    & quot; вы сами с привилегиями root & quot; это не то, что на самом деле происходит :) На самом деле, вы не можете быть сами с привилегиями root & quot; - либо вы корень, либо вы сами. Попробуйте ввести whoami в обоих случаях. Тот факт, что результаты cd ~ отличаются друг от друга, является результатом sudo -s, не устанавливающего переменную среды HOME. – Sergey 22 October 2011 в 12:28
  • 2
    @Sergey, whoami, он говорит, что это «root», потому что вы запускаете «whoami» cmd, как будто вы его судируете, поэтому временно (на протяжении всей этой команды) вы являетесь пользователем root, но вы все равно можете не иметь полного root в соответствии с файлом sudoers. – Octopus 7 February 2015 в 02:15
  • 3
    @Octopus: то, что я пытался сказать, это то, что в Unix процесс может иметь только один UID, и этот UID определяет разрешения процесса. Вы не можете быть «сами с привилегиями root», программа либо работает с вашим UID, либо с UID корня (0). – Sergey 7 February 2015 в 02:24
  • 4
    Что касается «вы, возможно, все еще не имеете полного доступа root в соответствии с файлом sudoers»: файл sudoers контролирует, кто может запускать эту команду в качестве другого пользователя, но это происходит до выполнения команды. Однако, как только вам разрешили запустить процесс, скажем, root - в текущем процессе есть UID корня и есть полный доступ к системе, поэтому sudo не может ограничивать это. Опять же, вы всегда либо сами, либо корень, нет «половины-половины». Таким образом, если файл sudoers позволяет запускать оболочку как root - разрешения в этой оболочке будут неотличимы от "нормального" корневая оболочка. – Sergey 7 February 2015 в 02:32

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

Например, если я исправляю свою систему с live CD / USB, я буду часто монтируйте мой жесткий диск и другие необходимые вещи и chroot в систему. В этом случае моя первая команда обычно:

su - myuser # Note the '-'. It means to act as if that user had just logged in.

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

2
ответ дан 31 July 2018 в 23:33

Другие вопросы по тегам:

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