В чем заключается основное различие между командами sudo su, sudo -i и sudo -s?

Здравствуйте! Я прочитал множество статей и понял, что основная разница между командами заключается в следующем: 

1. **Использование переменных окружения:**  
   - При выполнении `sudo -s`, переменные `HOME` и `PATH` устанавливаются как:  
     ```
     HOME=/home/applic  
     PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin  
     ``` 
     В этом случае читается `~/.bashrc` пользователя.  
   - При выполнении `sudo su`, переменные `HOME` и `PATH` принимают значения:  
     ```
     HOME=/root  
     PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games  
     ``` 
     Здесь читается файл `/etc/environment`, а также `/root/.bashrc`.  
   
   Однако я не нашел информации о переменных окружения для команды `sudo -i`.

2. **Логи в журнале пользователя:**  
   - Если использовать `sudo -i` или `sudo -s`, логи команд будут сохраняться в журнале пользователя, который пытается работать в оболочке суперпользователя.  
   - В случае использования `sudo su` журналы действий пользователя не будут сохраняться.

3. **Ограничения команд через sudo:**  
   - Можно ограничить пользователям доступ к определенным командам при использовании `sudo -i` или `sudo -s`.  
   - Тем не менее, если они выполнят `sudo su`, они получат полный доступ, так как фактически переключатся на учетную запись суперпользователя.

Правильно ли я понял это?

Кроме того, я не разобрался в разнице между командами `sudo su` и `sudo su -`. Могу ли я получить дополнительные разъяснения по этому вопросу? И где именно можно посмотреть логи пользователей при использовании команд `sudo -i` и `sudo -s`? В чем заключаются различия между флагами `-i` и `-s`?
  • 16 января 2025 г. 6:44
Ответы на вопрос 2
Ваши наблюдения о различиях между командами `sudo su`, `sudo -i` и `sudo -s` в целом верны, но давайте уточним некоторые моменты и разберем каждую из команд более детально.

### 1. Различия между командами `sudo su`, `sudo -i` и `sudo -s`

- **`sudo su`**:
  - Эта команда используется для переключения на пользователя `root`, однако она не сохраняет переменные окружения, доступные для обычного пользователя. При выполнении `sudo su`, текущая оболочка не будет загружаться с дополнительными настройками, и будет использована оболочка по умолчанию пользователя `root`. 
  - Переменные `HOME` и `PATH` будут установлены в `/root` и стандартные для корневого пользователя соответствующим образом.

- **`sudo -i`**:
  - Эта команда также позволяет переключаться на пользователя `root`, но при этом создает интерактивную оболочку, аналогичную входу в систему как `root`. Все настройки окружения и переменные (такие как `HOME`, `PATH`) будут установлены так, как если бы вы вошли в систему как `root`. Это включает в себя загрузку всех конфигурационных файлов, таких как `~/.bashrc`, `~/.profile` и других, что делает сеанс более "чистым" и похожим на полноценный вход как `root`.

- **`sudo -s`**:
  - Эта команда запускает командную оболочку с текущими настройками окружения пользователя, но с правами `root`. Это означает, что вы получите доступ к правам суперпользователя, но переменные окружения, такие как `HOME` и `PATH`, остаются установлены для пользователя, который использует `sudo`.

### 2. Логи действий пользователей

- Логи пользователей, использующих `sudo`, обычно записываются в файл `/var/log/auth.log` или `/var/log/secure`, в зависимости от дистрибутива Linux. Команды, запущенные с помощью `sudo -i` и `sudo -s`, будут отображаться в этих логах как выполненные от имени пользователя, который инициировал команду.

### 3. Разница между `sudo su` и `sudo su -`

- **`sudo su`**: Эта команда предоставляет доступ к оболочке `root`, однако не меняет переменные окружения. Вы остаетесь в текущей среде.

- **`sudo su -`**: Этот вариант переключает вас на пользователя `root` и загружает его среду с полными настройками, как если бы вы вошли в систему. Это приведет к настройке переменной `HOME`, `PATH` и загрузке необходимых конфигурационных файлов, что создает полноценный сеанс `root`.

### 4. Различия между флагами `-i` и `-s`

- `-i` создает интерактивную среду, аналогичную входу в систему, с полными настройками пользователя `root`. Все конфигурационные файлы и переменные окружения загружаются, как если бы вы выполнили вход в систему как `root`.
  
- `-s` сохраняет текущие переменные окружения и запускает командную оболочку от имени пользователя `root`. Это не вызывает полной конфигурации пользователя, и вы работаете в окружении с переменными текущего пользователя, но с правами `root`.

В целом, команда `sudo su -` и `sudo -i` позволяют вам работать с полностью настроенным окружением пользователя `root`, в то время как `sudo -s` и `sudo su` сохраняют среду текущего пользователя.
- Разница 1: Почти, sudo -i также меняет HOME на /root, и читает логин скрипты root юзера. 
- Разница 2: Верно, действия с sudo -i и sudo -s логгируются в журналах юзера, а sudo su - нет.
- Разница 3: Верно, sudo позволяет настраивать ограничения для команд через sudo -i и sudo -s, но не для sudo su (так как sudo su переключает юзера в root).
Еще не понял разницу между
sudo su
sudo su -

- sudo su - переключает юзера на root, но окружение при этом не является полным root окружением.
- sudo su - - эмулирует полный вход юзера root (login shell). Будут прочитаны все файлы конфигурации, которые обычно читаются при входе root (profile, .bash_profile, .bashrc и что-то там еще). Насколько я понимаю, это то, что нужно Вам при работе от имени юзера root.
И где можно смотреть логи пользаков при использовании sudo -i, sudo -s?

Viewing and monitoring log files , можно еще заюзать journalctl.
Похожие вопросы