В чем разница между входом в систему как пользователем и изменением пользователей, использующих su через root?

Если у вас есть какой-либо сервер, вы можете получить к нему доступ, например, через ssh user1@ip, и вы также можете сделать ssh root@ip, чтобы перейти к своему корневому пользователю с su привилегиями, а затем перейти к su user1. По моему мнению, оба эти способа должны привести меня к одной и той же пользовательской среде (в данном случае, «user1»), но в моем собственном опыте это не так, потому что в ssh user1@ip установлены вещи, которые в su user1 не существуют .

Почему это так?

17
задан 8 June 2016 в 14:06

2 ответа

SSH запускает оболочку входа в систему. su, по умолчанию не делает.

В частности, это означает что ~/.profile (или подобный файл), поскольку тот пользователь не получен. Так изменения, внесенные в ~/.profile не вступит в силу. Могло бы также иметь место что:

  • даже при запуске оболочки входа в систему различные изменения были внесены в корне ~/.profile, который мог бы загрязнить среду пользователя.
    • /etc/profile и /etc/profile.d/* может применить настройки по-другому для различных пользователей (не по умолчанию, хотя)
  • могли бы быть различные настройки для различных пользователей в конфигурации SSH.
  • Конфигурация PAM отличается. Например, /etc/pam.d/ssh имеет:

    session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale
    

    тогда как /etc/pam.d/su имеет:

    session       required   pam_env.so readenv=1 envfile=/etc/default/locale
    

    Это означает загрузки SSH ~/.pam_environment, но su не делает. Это - большое с тех пор ~/.pam_environment независимое от оболочки место для переменных среды, и оно применяется, если Вы входите в систему от GUI, TTY или SSH.

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

su - <username>
sudo -iu <username>

Пример:

# su muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
# su - muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /home/muru/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
# sudo -iu muru sh -c 'echo $HOME $PATH'
/home/muru /home/muru/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# sudo -u muru sh -c 'echo $HOME $PATH'
/root /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# ssh muru@localhost 'echo $HOME $PATH'
/home/muru /home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Даже с SSH при выполнении команды вместо того, чтобы запустить оболочку оболочка входа в систему не будет выполнена (отметьте отсутствие ~/bin в тесте SSH, который присутствует в su - и sudo -i). Для получения истинного результата я выполню свою оболочку как оболочку входа в систему:

# ssh muru@localhost '$SHELL -ilc "echo \$HOME \$PATH"'
/home/muru /home/muru/bin:/home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Это также почему sudo su и sudo -s дрянные способы получить корневую оболочку. Оба этих пути загрязнены средой.


Похожие страницы:

15
ответ дан 8 June 2016 в 14:06

В общем и целом это - главным образом стратегическое различие.

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

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

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

-1
ответ дан 8 June 2016 в 14:06

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

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