Linux - используйте «su -», но сохраняйте текущий каталог
14
Когда я делаю, su -чтобы получить root, мой текущий каталог устанавливается на домашний каталог root. Есть ли в любом случае сохранить текущий каталог, в котором я был, так же, как sudo -s. Или ответ использовать sudo?
Обратите внимание, что я не хочу показаться грубым, но почему эта проблема не решается с помощью "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.)
В моем случае мне нужен псевдоним, чтобы сделать что-то вроде 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 -», вы останетесь в том же каталоге; однако вы также будете работать в той же среде, поэтому может потребоваться изменить путь для доступа к некоторым командам администратора.
Я не вижу, чем это отличается от простого «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 не выйдет, пока мы не выйдем из нее.
На самом деле это единственный ответ на вопрос. Молодец!
Cacahuete Frito
На самом деле, su - [user] -c "cd $(pwd); bash"может быть немного лучше (измените галочки на $()).
Cacahuete Frito
3
Используйте sudo :). Серьезно, тебе не нужно su. 'sudo' лучше, так как вы используете его только для привилегированных команд и можете избежать ошибок. Вы также получаете ответственность.
Если вы используете «su», это делает интерактивную оболочку. Это то же самое, что и "sudo -s". «su -» создает оболочку входа в систему, которая переопределяет окружение. "sudo -i" равнозначно sudo. Если вы пытаетесь получить интерактивную оболочку, вы всегда должны использовать форму sudo -i (или su -), иначе возможно получить странные права доступа к файлам в домашнем каталоге пользователя.
Вы должны изменить источник su, чтобы выполнить эту работу. в процедуре инициализации переменных окружения есть вызов chdir. закомментируйте те заявления, которые включены в этот призыв. и теперь вы можете выполнить «su -», но сохранить текущий каталог.
sudo su -c "zsh"
В моем случае мне нравится использовать меня в текущем каталоге и загружать zsh как оболочку с пользователем root.ctrl+d
после и вы вернетесь к текущему пользователю. Что касается директории, для меня это работает напрямую с centos, но, возможно, добавление `&& cd $ (pwd)` внутри переданной команды может помочь.Ответы:
Всегда лучше использовать sudo, если это возможно, потому что тогда вам не нужно знать (или давать кому-то) пароль root. Установите пароль root на что-то длинное и ужасное, а затем заблокируйте его в сейфе.
Если вы хотите отказать кому-либо в доступе позже, вы просто удалите его доступ к sudo, вместо того, чтобы учить всех остальных новому паролю root.
Однако - вам не нужно использовать параметр «-», если вы не хотите. Вы получите оболочку от имени root, просто она не будет оболочкой входа в систему (поэтому она не будет запускать root .profile.)
источник
asuser git reset --hard
. Ноsu - <user> -m -c "git reset --hard"
иsudo -u <user> git reset --hard
спас бы мою среду, и git попытался бы прочитать конфигурацию git текущего пользователя. Поэтому я просто хотел сказать, что иногда решение user205705, использующее su - <user> -c "cdpwd
; bash", лучше.Я согласен, что sudo - почти всегда лучший ответ, но чтобы ответить на другую часть вопроса ...
'-' в 'su -' указывает, что вы хотите эмулировать вход в систему суперпользователя, а не просто запускать с привилегиями суперпользователя.
Если вы используете просто «su» вместо «su -», вы останетесь в том же каталоге; однако вы также будете работать в той же среде, поэтому может потребоваться изменить путь для доступа к некоторым командам администратора.
источник
Если вы используете
su
без-
, он должен держать вас в вашем текущем каталоге.-
,-l
Или--login
сказать су , чтобы:Или просто используйте sudo, у него много других преимуществ. Или SSH ключи.
источник
Вы должны определенно использовать sudo.
Это будет держать вас в папке, когда вы перейдете в root.
Преимущества использования sudo
источник
.bashrc
от внешнего пользователя, а не от пользователя root.Если вы действительно хотите использовать
su
, есть способ остаться в том же каталоге.Что тут происходит:
su - <user>
= войдите как-c
что означает «запустить команду в новой оболочке-c "cd `pwd`"
команда, которую мы даем, должна переключиться на текущий direcotory (pwd
) - но поскольку мы используем обратные метки,pwd
команда оценивается перед тем, как мы ее запустим,su
чтобы мы фактически переключились в каталог, в котором мы сейчас СЕЙЧАС, как старый пользователь. Единственная проблема здесь в том, что новая оболочка закрывается сразу после запуска команды, поэтому мы добавим:-c "cd `pwd`; bash"
что означает «запуститьbash
(новая оболочка) после выполненияcd
команды, и оболочка bash не выйдет, пока мы не выйдем из нее.источник
su - [user] -c "cd $(pwd); bash"
может быть немного лучше (измените галочки на$()
).Используйте sudo :). Серьезно, тебе не нужно su. 'sudo' лучше, так как вы используете его только для привилегированных команд и можете избежать ошибок. Вы также получаете ответственность.
источник
Если вы используете «su», это делает интерактивную оболочку. Это то же самое, что и "sudo -s". «su -» создает оболочку входа в систему, которая переопределяет окружение. "sudo -i" равнозначно sudo. Если вы пытаетесь получить интерактивную оболочку, вы всегда должны использовать форму sudo -i (или su -), иначе возможно получить странные права доступа к файлам в домашнем каталоге пользователя.
источник
Вы должны изменить источник su, чтобы выполнить эту работу. в процедуре инициализации переменных окружения есть вызов chdir. закомментируйте те заявления, которые включены в этот призыв. и теперь вы можете выполнить «su -», но сохранить текущий каталог.
источник