Linux - використовуйте "su -", але зберігайте поточний каталог


14

Коли я можу su -отримати корінь, мій поточний каталог встановлюється додому root. Чи все-таки зберігати поточний каталог, в якому я був, дуже схоже sudo -s. Або відповідь використовувати судо?


5
Зауважте, що я не хочу звучати грубо, але чому ця проблема не вирішується через "man su"?
Мирдин

1
@Rory, будь ласка, прочитайте коментар
Myrrdyn

Мені подобається sudo su -c "zsh", що в моєму випадку я тримає мене в поточному режимі і завантажує zsh як оболонку з користувачем root. ctrl+dпісля, і ви повернетесь до поточного користувача. Що стосується справи в каталозі, для мене працює прямо на centos, але, можливо, додавання `&& cd $ (pwd)` всередину переданої команди могло б зробити трюк.
GabLeRoux

@Myrrdyn Документації чудові, коли ти знаєш, що шукаєш. Якщо ви цього не робите, запитуйте експертів, якісь поради - це швидше і дидактичніше.
Ромен Вінсент

Відповіді:


18

Завжди краще використовувати sudo, якщо це можливо, тому що тоді вам не потрібно знати (або давати комусь) пароль root. Встановіть кореневий пароль на щось довге і жахливе, а потім зафіксуйте його в сейфі.

Якщо ви хочете позбавити комусь пізніше доступ, ви просто видаліть його доступ до sudo, а не навчити всіх інших новим кореневим паролем.

Однак - вам не потрібно використовувати параметр '-', якщо цього не потрібно. Ви отримаєте оболонку як корінь, вона просто не буде оболонкою для входу (тому вона не запустить .profile. Root)


1
У моєму випадку мені знадобився псевдонім, щоб зробити щось подібне asuser git reset --hard. Але su - <user> -m -c "git reset --hard"і sudo -u <user> git reset --hardврятують моє оточення і мерзотник б спробувати прочитати поточний GIT конфігурації користувача. Тому я просто хотів сказати, що іноді рішення користувача2020705, використовуючи su - <user> -c "cd pwd; bash", краще.
ReFruity

16

Я погоджуюся, що судо майже завжди є кращою відповіддю, але відповісти на іншу частину питання ...

Значення "-" в "su -" вказує на те, що ви хочете емулювати вхід суперпользователя, а не просто працювати з привілеями суперпользователя.

Якщо ви використовуєте звичайне "su", а не "su -", ви будете залишатися в одному каталозі; однак ви також будете працювати в тому ж середовищі, тому може знадобитися змінити шлях для доступу до деяких команд адміністратора.


9

Якщо ви користуєтесь suбез -, це має зберігати вас у вашому поточному каталозі. -, -lАбо --login сказати су , щоб:

Укажіть середовище, аналогічне тому, що очікував би користувач, якщо користувач увійде безпосередньо.

Або просто використовувати судо, це має багато інших переваг. Або клавіші ssh.


6

Ви обов'язково повинні використовувати судо.

su -m
-m (-p): не скидати змінні середовища (як правило, не рекомендується)

Це збереже вас у папці, коли ви перейдете на root.

Переваги використання судо


1
Я не бачу, чим це відрізняється від того, що він є "su" самостійно, за винятком того, що можливо не скидає середовище PATH, що є можливою проблемою безпеки.
Девід Пашлі

Наприклад, @DavidPashley, він виконує .bashrcзовнішній користувач, а не кореневий.
phil294

4

Якщо ви дійсно хочете користуватися su, є спосіб залишитися в одному каталозі.

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

Що тут відбувається:

  • su - <user> = вхід як
  • -c що означає "запустити команду в новій оболонці"
  • -c "cd `pwd`" команда, яку ми даємо, - це перейти на поточну директорию ( pwd) - але, оскільки ми використовуємо задні посилання, pwdкоманда оцінюється перед тим, як виконати suкоманду, щоб ми перейшли в каталог, у якому ми знаходимось ЗАРАЗ, як старий користувач. Єдина проблема тут полягає в тому, що нова оболонка виходить відразу після запуску команди, тому ми додаємо:
  • -c "cd `pwd`; bash" що означає "запустити bash(нова оболонка) після запуску cdкоманди, і оболонка bash не вийде, поки ми не вийдемо з неї.

1
Це фактично єдина відповідь на питання. Хороша робота!
Cacahuete Frito

Насправді, su - [user] -c "cd $(pwd); bash"може бути трохи краще (змінити задній план $()).
Cacahuete Frito

3

Використовуйте судо :). Серйозно, вам не потрібно су. "Судо" краще, оскільки ви використовуєте його лише для привілейованих команд і може допомогти уникнути помилок. Ви також отримуєте відповідальність.


2

Якщо ви використовуєте "su", це робить інтерактивну оболонку. Це те саме, що "sudo -s". "su -" створює оболонку входу, яка буде перекривати середовище. "sudo -i" - еквівалент судо. Якщо ви намагаєтеся отримати інтерактивну оболонку, ви завжди повинні використовувати форму sudo -i (або su -), інакше можливо потрапити в дивні дозволи файлів у домашній каталог користувача.


0

Ви повинні змінити джерело su, щоб виконати цю роботу. є виклик chdir в процедурі ініціалізації змінних оточення. прокоментуйте ці заяви, включені до цього заклику. і тепер ви можете робити "su -", але зберігає поточний каталог.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.