Linux - используйте «su -», но сохраняйте текущий каталог

14

Когда я делаю, su -чтобы получить root, мой текущий каталог устанавливается на домашний каталог root. Есть ли в любом случае сохранить текущий каталог, в котором я был, так же, как sudo -s. Или ответ использовать sudo?

Рори
источник
5
Обратите внимание, что я не хочу показаться грубым, но почему эта проблема не решается с помощью "man su"?
Myrrdyn
1
@ Рори, пожалуйста, прочитайте комментарий
Myrrdyn
sudo su -c "zsh"В моем случае мне нравится использовать меня в текущем каталоге и загружать zsh как оболочку с пользователем root. ctrl+dпосле и вы вернетесь к текущему пользователю. Что касается директории, для меня это работает напрямую с centos, но, возможно, добавление `&& cd $ (pwd)` внутри переданной команды может помочь.
GabLeRoux
@Myrrdyn Документация великолепна, когда вы знаете, что ищете. Когда вы этого не сделаете, спросить экспертов несколько советов быстрее и более дидактично.
Ромен Винсент

Ответы:

18

Всегда лучше использовать sudo, если это возможно, потому что тогда вам не нужно знать (или давать кому-то) пароль root. Установите пароль root на что-то длинное и ужасное, а затем заблокируйте его в сейфе.

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

Однако - вам не нужно использовать параметр «-», если вы не хотите. Вы получите оболочку от имени root, просто она не будет оболочкой входа в систему (поэтому она не будет запускать root .profile.)

CRB
источник
1
В моем случае мне нужен псевдоним, чтобы сделать что-то вроде asuser git reset --hard. Но su - <user> -m -c "git reset --hard"и sudo -u <user> git reset --hardспас бы мою среду, и git попытался бы прочитать конфигурацию git текущего пользователя. Поэтому я просто хотел сказать, что иногда решение user205705, использующее su - <user> -c "cd pwd; bash", лучше.
ReFruity
16

Я согласен, что sudo - почти всегда лучший ответ, но чтобы ответить на другую часть вопроса ...

'-' в 'su -' указывает, что вы хотите эмулировать вход в систему суперпользователя, а не просто запускать с привилегиями суперпользователя.

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

Рассел Хиллинг
источник
9

Если вы используете suбез -, он должен держать вас в вашем текущем каталоге. -, -lИли --login сказать су , чтобы:

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

Или просто используйте sudo, у него много других преимуществ. Или SSH ключи.

Freiheit
источник
6

Вы должны определенно использовать sudo.

su -m
-m (-p): не сбрасывать переменные окружения (обычно не рекомендуется)

Это будет держать вас в папке, когда вы перейдете в root.

Преимущества использования sudo

Jindrich
источник
1
Я не вижу, чем это отличается от простого «su» само по себе, за исключением того, что возможно не сбрасывать среду PATH, что является возможной проблемой безопасности.
Дэвид Пашли
@DavidPashley, например, он выполняет .bashrcот внешнего пользователя, а не от пользователя root.
phil294
4

Если вы действительно хотите использовать su, есть способ остаться в том же каталоге.

su - <user> -c "cd `pwd`; bash"

Что тут происходит:

  • su - <user> = войдите как
  • -c что означает «запустить команду в новой оболочке
  • -c "cd `pwd`" команда, которую мы даем, должна переключиться на текущий direcotory ( pwd) - но поскольку мы используем обратные метки, pwdкоманда оценивается перед тем, как мы ее запустим, suчтобы мы фактически переключились в каталог, в котором мы сейчас СЕЙЧАС, как старый пользователь. Единственная проблема здесь в том, что новая оболочка закрывается сразу после запуска команды, поэтому мы добавим:
  • -c "cd `pwd`; bash" что означает «запустить bash(новая оболочка) после выполнения cdкоманды, и оболочка bash не выйдет, пока мы не выйдем из нее.
will.barley
источник
1
На самом деле это единственный ответ на вопрос. Молодец!
Cacahuete Frito
На самом деле, su - [user] -c "cd $(pwd); bash"может быть немного лучше (измените галочки на $()).
Cacahuete Frito
3

Используйте sudo :). Серьезно, тебе не нужно su. 'sudo' лучше, так как вы используете его только для привилегированных команд и можете избежать ошибок. Вы также получаете ответственность.

chmeee
источник
2

Если вы используете «su», это делает интерактивную оболочку. Это то же самое, что и "sudo -s". «su -» создает оболочку входа в систему, которая переопределяет окружение. "sudo -i" равнозначно sudo. Если вы пытаетесь получить интерактивную оболочку, вы всегда должны использовать форму sudo -i (или su -), иначе возможно получить странные права доступа к файлам в домашнем каталоге пользователя.

Дэвид Пашли
источник
0

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


источник