Syntax highlighting of linux/users

# Users & Groups

[TOC]

## Теория

Почти все операционные системы Linux — многопользовательские. Администратор Linux должен уметь создать и настраивать пользователей.
В Linux есть 3 группы пользователей:

 * '''Администраторы''' — привелегированные пользователи с полным доступом к системе. По умолчанию в ОС есть такой пользователь — root
 * '''Локальные пользователи''' — их учётные записи создаёт администратор, их права ограничены. Администраторы могут изменять права локальных пользователей
 * '''Системные пользователи''' — учетный записи, которые создаются системой для внутрениих процессов и служб. Например пользователь — nginx

У каждого пользователя есть свой уникальный идентификатор — '''UID'''. 
Чтобы упростить процесс настройки прав для новых пользователей, их объединяют в группы. Каждая группа имеет свой набор прав и ограничений. Любой пользователь, создаваемый или добавляемый в такую группу, автоматически их наследует. Если при добавлении пользователя для него не указать группу, то у него будет своя, индивидуальная группа — с именем пользователя. Один пользователь может одновременно входить в несколько групп.
Информацию о каждом пользователе сервера можно посмотреть в файле /etc/passwd

Для более точных настроек пользователей можно использовать подключаемые модули аутентификации (PAM).

'''PAM''' (Pluggable Authentication Modules - подключаемые модули аутентификации) — набор библиотек, которые позволяют интегрировать различные методы аутентификации в виде единого API.
PAM решает следующие задачи: 
 * '''Аутентификация''' — процесс подтверждения пользователем своей подлиности. Например: ввод логина и пароля, ssh-ключ и т д. 
 * '''Авторизация''' — процесс наделения пользователя правами
 * '''Отчетность''' — запись информации о произошедших событиях

PAM может быть реализован несколькоми способами: 
 * Модуль ''pam_time'' — настройка доступа для пользователя с учётом времени
 * Модуль ''pam_exec'' — настройка доступа для пользователей с помощью скириптов


## Как это сделать

### Отключаем пароль для sudo

[source1](https://security.stackexchange.com/questions/9308/sudo-password-when-authenticating-via-passwordless-ssh)
[source2](https://www.digitalocean.com/community/questions/disable-password-ssh-works-ubuntu)
[source3](https://askubuntu.com/questions/894237/disabling-ssh-password-login-for-ubuntu/894244)
[source4](https://askubuntu.com/questions/869945/how-to-disable-password-and-root-ssh)

Устанавливаем vim как редактор для конфигурация

```bash
sudo update-alternatives --config editor
```

Отключаем ввод пароля sudo
```bash
sudo visudo

# Меняем строку
%sudo  ALL=(ALL:ALL) ALL
# на строку
%sudo ALL=NOPASSWD: ALL
```

### Отключаем пароль sudo для пользователя

Отключаем пароль sudo для конкретного пользователя - https://losst.ru/otklyuchaem-parol-sudo-v-linux
Добавляем в конце файла
```bash
# ...
zoid	ALL=(ALL) NOPASSWD: ALL
```

Отключаем возможность авторизации через пароль
```bash
sudo vim /etc/ssh/sshd_config

PermitRootLogin no
ChallengeResponseAuthentication no
PasswordAuthentication no
```
```bash
sudo service ssh restart
```

### Отключаем пароль sudo для команд

[source](https://stackoverflow.com/a/45071759/4498602)

```bash
# --- create specific file with username
sudo visudo -f /etc/sudoers.d/myuser
# --- add line
myuser ALL=(ALL) NOPASSWD: /usr/sbin/service nginx start,/usr/sbin/service nginx stop,/usr/sbin/service nginx restart
# --- close and test (maybe re-login)
sudo /usr/sbin/service nginx stop # no password needed
```