Sudo (Українська) - ArchWiki

Jump to content

# Sudo (Українська)

From ArchWiki

This article is being considered for redirection to sudo.

Notes: Translation stalled. (Discuss in Talk:Sudo (Українська))

Цю стаття чи розділ ще не перекладено. Дивіться також Команда перекладу ArchWiki українською.

Причина: Partial translation was started 2021-12-12. (Обговорення в Talk:Sudo (Українська)#)

Повʼязані статті

- Users and groups
- su
- doas

Sudo дозволяє системному адміністратору передавати різним користувачам чи групам користувачів повноваження запускати команди від імені користувача „root“ чи будь-якого іншого користувача. Окрім цього, команда веде часопис використаних команд та їх аргументів.

Інший спосіб запускати команди як root — su. От тільки, якщо su відкриває root консоль в якій можна вводити багато команд, то sudo дає право виконати лише одну команду. Завдяки цьому, зменшується ймовірність виконати команду з помилкою й поламати свою систему.

Із Sudo ще й можна запускати команди від імені інших користувачів. А використані команди та невдалі спроби отримати доступ записуються до журналу, для перевірки безпеки.

## Встановлення

Встановіть пакунок sudo.

## Використання

Перед використанням, `sudo` потрібно налагодити. Прочитайте #Налагодження.

Щоб скористатися sudo, просто додайте `sudo` поперед команди та її аргументів:

    $ sudo команда

Наприклад, для pacman:

    $ sudo pacman -Syu

Прочитайте sudo(8) щоб дізнатися більше.

## Налагодження

This article or section needs expansion.

Reason: Create an intro discussing `Defaults`, perhaps with a table that lists common settings (Discuss in Talk:Sudo (Українська))

### Defaults skeleton

sudoers(5) § SUDOERS OPTIONS lists all the options that can be used with the `Defaults` command in the `/etc/sudoers` file.

See [1] for a list of options (parsed from the version 1.8.7 source code) in a format optimized for `sudoers`.

See sudoers(5) for more information, such as configuring the password timeout.

### Переглянути наявні налаштування

Запустіть `sudo -ll` щоб вивести налаштування, прийняті на даний момент. Щоб дізнатися налаштування для певного користувача, запустіть `sudo -lU ім'я_користувача`.

### Використання visudo

Налаштування для sudo знаходяться у файлі `/etc/sudoers`. Його можна редагувати тільки через команду visudo(8). Вона блокує оригінальний файл, створює тимчасову копію і перевіряє його на наявність помилок, переди тим як скопіювати його назад до `/etc/sudoers`.

Попередження

- Ви зобов'язані написати `sudoers` без помилок! Будь-яка помилка зробить sudo непридатним для використання. Завжди використовуйте visudo щоб запобігти утворенню помилок.
- visudo(8) warns that configuring visudo to honor the user environment variables for their editor of choice may be a security hole, since it allows the user with visudo privileges to run arbitrary commands as root without logging simply by setting that variable to something else.

visudo використовує vi для редагування тексту. The sudo package is compiled with `--with-env-editor` and honors the use of the `SUDO_EDITOR`, `VISUAL` and `EDITOR` variables. `EDITOR` is not used when `VISUAL` is set.

To establish nano as the visudo editor for the duration of the current shell session, export `EDITOR=nano`; to use a different editor just once simply set the variable before calling visudo:

    # EDITOR=nano visudo

Крім того, ви можете відредагувати копію файлу `/etc/sudoers` і перевірити її за допомогою команди `visudo -c “”/copy/of/sudoers'“`. Це може стати в нагоді, якщо ви хочете уникнути блокування файлу командою visudo.

To change the editor permanently, see Environment variables#Per user. To change the editor of choice permanently system-wide only for visudo, add the following to `/etc/sudoers` (assuming nano is your preferred editor):

    # Reset environment by default
    Defaults      env_reset
    # Set default EDITOR to nano, and do not allow visudo to use EDITOR/VISUAL.
    Defaults      editor=/usr/bin/nano, !env_editor

### Приклади записів

Щоб дозволити користувачу повні привілеї root, коли вони виконують `sudo` додайте наступний рядок:

    USER_NAME   ALL=(ALL) ALL

Щоб дозволити користувачу виконувати команди від імені будь-якого користувача, але тільки на машині з ім'ям `HOST_NAME`:

    USER_NAME   HOST_NAME=(ALL) ALL

Щоб дозволити користувачам з групи wheel привілеї sudo:

    %wheel      ALL=(ALL) ALL

Порада Під час створення нових адміністраторів часто доцільно надати доступ до sudo для групи `wheel` та додати до неї користувача, оскільки за замовчуванням Polkit розглядає членів групи `wheel` як адміністраторів. Якщо користувач не є членом `wheel`, програмне забезпечення, що використовує Polkit, може вимагати автентифікації за допомогою пароля root замість пароля користувача.

Щоб вимкнути запит пароля для користувача `USER_NAME`:

Попередження Це дозволить будь-якому процесу використовувати sudo без запиту пароля.

    Defaults:USER_NAME      !authenticate

Дозволити лише явно визначені команди для користувача `USER_NAME` на хості `HOST_NAME`:

    USER_NAME HOST_NAME=/usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu

Note The most customized option should go at the end of the file, as the later lines overrides the previous ones. In particular such a line should be after the `%wheel` line if your user is in this group.

Дозволити лише явно визначені команди для користувача `USER_NAME` на хості `HOST_NAME` без запиту пароля:

    USER_NAME HOST_NAME= NOPASSWD: /usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu

Детальний приклад `sudoers` доступний за шляхом `/usr/share/doc/sudo/examples/sudoers`. Додаткову інформацію див. у sudoers(5).

### Sudoers default file permissions

The owner and group for the `sudoers` file must both be 0. The file permissions must be set to 0440. These permissions are set by default, but if you accidentally change them, they should be changed back immediately or sudo will fail.

    # chown -c root:root /etc/sudoers
    # chmod -c 0440 /etc/sudoers

## Корисні поради

### Вимкнути термін очікування при введенні паролю

Найдратівливіша ситуація: тривалий процес, що працює десь на тлі, із нормальними дозволами, та піднімається лише за потреби. В такому разі, він потребує паролю для sudo. Якщо його не помітити, то він застаріває й процес, в найкращому випадку, вилітає. Щоби справитись із цим, радимо вимкнути пароль для sudo або збільшити його термін очікування. Можна взагалі вимкнути термін очікування паролю, та як воно взагалі не підвищує рівень безпеки, для цього встановіть його рівним нулю:

    Defaults passwd_timeout=0

### Add terminal bell to the password prompt

To draw attention to a sudo prompt in a background terminal, users can simply make it echo a bell character:

    Defaults passprompt="^G[sudo] password for %p: "

Note the `^G` is a literal bell character. E.g. in vim, insert using the sequence `Ctrl+v` `Ctrl+g`, or in nano, `Alt+v` `Ctrl+g`.

### Передача аліасів

Якщо ви використовуєте багато аліасів ви могли помітити, що вони не переносяться в root при використанні sudo. Проте є простий спосіб змусити їх працювати. Просто додайте наступний рядок до вашого `~/.bashrc` або `/etc/bash.bashrc`:

    alias sudo='sudo '

### Вимкнення авторизації для кожного окремого терміналу

Попередження Це дозволить будь-якому процесу використовувати вашу sudo сесію.

Якщо вас дратує використовувати пароль для sudo кожного разу коли відкриваєте новий термінал, вкажіть `timestamp_type` значення `global`:

    Defaults timestamp_type=global

### Зменшення частоти введення пароля

Якщо вас дратує необхідність повторно вводити пароль кожні 5 хвилин (за замовчуванням), ви можете змінити це, встановивши більше значення для параметра `timestamp_timeout` (у хвилинах):

    Defaults timestamp_timeout=10

Якщо ви використовуєте багато команд sudo поспіль, логічніше оновлювати час очікування при кожному використанні, ніж просто збільшувати `timestamp_timeout`. Оновити тайм-аут можна за допомогою `sudo -v` (тоді як `sudo -K` негайно анулює його).

Щоб автоматизувати цей процес, ви можете додати наступний рядок до вашого `.bashrc`:

    alias sudo='sudo -v; sudo '

Також можна використовувати функцію Bash; детальніше дивіться тут: stackexchange.

### Змінні середовища

If you have a lot of environment variables, or you export your proxy settings via `export http_proxy="..."`, when using sudo these variables do not get passed to the root account unless you run sudo with the `-E` option.

    $ sudo -E pacman -Syu

Рекомендований спосіб збереження змінних середовища — додати їх до списку `env_keep`:

    /etc/sudoers

    Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"

### Пароль root

Користувачі можуть налаштувати `sudo` так, щоб система запитувала пароль root замість пароля користувача. Для цього потрібно додати параметр `targetpw` (пароль цільового користувача, за замовчуванням — root) або `rootpw` до рядка Defaults у файлі `/etc/sudoers`:

    Defaults targetpw

Щоб уникнути розголошення пароля root серед користувачів, ви можете обмежити доступ до нього певною групою:

    Defaults:%wheel targetpw
    %wheel ALL=(ALL) ALL

### Вимкнення входу під користувачем root

Користувачі можуть забажати вимкнути вхід під обліковим записом root. Без доступу до root зловмисники повинні спочатку вгадати ім'я користувача, налаштованого як sudoer, а також його пароль. Дивіться, наприклад, OpenSSH#Deny.

Warning

- Be careful, you may lock yourself out by disabling root login. Sudo is not automatically installed and its default configuration allows neither passwordless root access nor root access with your own password. Ensure a user is properly configured as a sudoer before disabling the root account!
- If you have changed your sudoers file to use rootpw as default, then do not disable root login with any of the following commands!
- Якщо ви вже втратили доступ, дивіться статтю Password recovery для отримання допомоги.

Обліковий запис можна заблокувати за допомогою `passwd`:

    # passwd -l root

Аналогічна команда розблоковує root.

    $ sudo passwd -u root

Як альтернатива, відредагуйте файл `/etc/shadow` і замініть зашифрований пароль root на «!»:

    root:!:12345::::::

Щоб знову увімкнути вхід root:

    $ sudo passwd root

Порада Щоб перейти до інтерактивного командного рядка користувача root, навіть після вимкнення "root", скористайтеся командою `sudo -i`.

#### kdesu

`kdesu` може використовуватися в середовищі KDE для запуску графічних (GUI) застосунків із привілеями root. За замовчуванням `kdesu` може намагатися використовувати `su`, навіть якщо обліковий запис root вимкнено. На щастя, можна вказати `kdesu` використовувати `sudo` замість `su`. Для цього створіть або відредагуйте файл `~/.config/kdesurc`:

    [super-user-command]
    super-user-command=sudo

Або скористайтеся наступною командою:

    $ kwriteconfig5 --file kdesurc --group super-user-command --key super-user-command sudo

### Harden with sudo example

Let us say you create 3 users: admin, devel, and joe. The user "admin" is used for journalctl, systemctl, mount, kill, and iptables; "devel" is used for installing packages, and editing config files; and "joe" is the user you log in with. To let "joe" reboot, shutdown, and use netctl we would do the following:

Edit `/etc/pam.d/su` and `/etc/pam.d/su-l`. Require user be in the wheel group, but do not put anyone in it.

    #%PAM-1.0
    auth            sufficient      pam_rootok.so
    # Uncomment the following line to implicitly trust users in the "wheel" group.
    #auth           sufficient      pam_wheel.so trust use_uid
    # Uncomment the following line to require a user to be in the "wheel" group.
    auth            required        pam_wheel.so use_uid
    auth            required        pam_unix.so
    account         required        pam_unix.so
    session         required        pam_unix.so

Limit SSH login to the 'ssh' group. Only "joe" will be part of this group.

    # groupadd -r ssh
    # gpasswd -a joe ssh
    # echo 'AllowGroups ssh' >> /etc/ssh/sshd_config

Restart `sshd.service`.

Add users to other groups.

1. for g in power network ;do ;gpasswd -a joe $g ;done

    # for g in network power storage ;do ;gpasswd -a admin $g ;done

Налаштуйте права доступу до файлів конфігурації, щоб розробники могли їх редагувати.

    # chown -R devel:root /etc/{http,openvpn,cups,zsh,vim,screenrc}

    Cmnd_Alias  POWER       =   /usr/bin/shutdown -h now, /usr/bin/halt, /usr/bin/poweroff, /usr/bin/reboot
    Cmnd_Alias  STORAGE     =   /usr/bin/mount -o nosuid\,nodev\,noexec, /usr/bin/umount
    Cmnd_Alias  SYSTEMD     =   /usr/bin/journalctl, /usr/bin/systemctl
    Cmnd_Alias  KILL        =   /usr/bin/kill, /usr/bin/killall
    Cmnd_Alias  PKGMAN      =   /usr/bin/pacman
    Cmnd_Alias  NETWORK     =   /usr/bin/netctl
    Cmnd_Alias  FIREWALL    =   /usr/bin/iptables, /usr/bin/ip6tables
    Cmnd_Alias  SHELL       =   /usr/bin/zsh, /usr/bin/bash
    %power      ALL         =   (root)  NOPASSWD: POWER
    %network    ALL         =   (root)  NETWORK
    %storage    ALL         =   (root)  STORAGE
    root        ALL         =   (ALL)   ALL
    admin       ALL         =   (root)  SYSTEMD, KILL, FIREWALL
    devel	    ALL         =   (root)  PKGMAN
    joe	    ALL         =   (devel) SHELL, (admin) SHELL

За таких налаштувань вам майже ніколи не доведеться входити в систему як Root.

«joe» може підключитися до свого Wi-Fi.

    $ sudo netctl start home
    $ sudo poweroff

«joe» не може користуватися netctl, як і будь-який інший користувач.

    $ sudo -u admin -- netctl start home

Коли «joe» потрібно скористатися командою journalctl або завершити процес, що вийшов з-під контролю, він може перейти до цього користувача.

    $ sudo -i -u devel
    $ sudo -i -u admin

Але «joe» не може переключитися на root.

    $ sudo -i -u root

Якщо "joe" хоче запустити сесію gnu-screen як адміністратор, він може зробити це так:

    $ sudo -i -u admin
    [admin]$ chown admin:tty `echo $TTY`
    [admin]$ screen

### Налаштування sudo за допомогою файлів у каталозі /etc/sudoers.d

“'sudo”' аналізує файли, що містяться в каталозі `/etc/sudoers.d/`. Це означає, що замість редагування файлу `/etc/sudoers` ви можете змінювати налаштування в окремих файлах і розміщувати їх у цьому каталозі. Це має дві переваги:

- Немає потреби редагувати файл `sudoers.pacnew`;
- Якщо з новим записом виникла проблема, ви можете видалити файл, що спричиняє проблему, замість того, щоб редагувати `/etc/sudoers` (але дивіться попередження нижче).

Формат записів у цих файлах такий самий, як і у самому `/etc/sudoers`. Щоб редагувати їх безпосередньо, використовуйте `visudo -f /etc/sudoers.d/“'somefile”'`. Дивіться sudoers(5) § Включення інших файлів із sudoers для детальної інформації.

Файли в каталозі `/etc/sudoers.d/` аналізуються в лексикографічному порядку, імена файлів, що містять `.` або `~`, пропускаються. Щоб уникнути проблем із сортуванням, імена файлів повинні починатися з двох цифр, наприклад `01_foo`.

Примітка Порядок записів у файлах-додатках є важливим: переконайтеся, що оператори не замінюють один одного.
Попередження Файли в `/etc/sudoers.d/` так само вразливі, як і сам `/etc/sudoers`: будь-який файл з неправильним форматуванням завадить роботі `sudo`. Тому з тієї ж причини настійно рекомендується використовувати `visudo`

### Редагування файлів

`sudo -e` or `sudoedit` lets you edit a file as another user while still running the text editor as your user.

This is especially useful for editing files as root without elevating the privilege of your text editor, for more details read sudo(8) § e.

Note that you can set the editor to any program, so for example one can use meld to manage pacnew files:

    $ SUDO_EDITOR=meld sudo -e /etc/file{,.pacnew}

### Увімкнути лайки

Ви можете увімкнути лайки в sudo. Для цього додайте цей рядок до файлу `sudoers` використовуючи `visudo`:

    /etc/sudoers

    Defaults insults

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

## Troubleshooting

### SSH problem without TTY

This article or section is a candidate for merging with #Configuration.

Notes: please use the second argument of the template to provide more detailed indications. (Discuss in Talk:Sudo (Українська))

SSH does not allocate a tty by default when running a remote command. Without an allocated tty, sudo cannot prevent the password from being displayed. You can use ssh's `-t` option to force it to allocate a tty.

The `Defaults` option `requiretty` only allows the user to run sudo if they have a tty.

    # Disable "ssh hostname sudo <cmd>", because it will show the password in clear text. You have to run "ssh -t hostname sudo <cmd>".
    #
    #Defaults    requiretty

### Permissive umask

This article or section is a candidate for merging with #Configuration.

Notes: please use the second argument of the template to provide more detailed indications. (Discuss in Talk:Sudo (Українська))

Sudo will union the user's umask value with its own umask (which defaults to 0022). This prevents sudo from creating files with more open permissions than the user's umask allows. While this is a sane default if no custom umask is in use, this can lead to situations where a utility run by sudo may create files with different permissions than if run by root directly. If errors arise from this, sudo provides a means to fix the umask, even if the desired umask is more permissive than the umask that the user has specified. Adding this (using `visudo`) will override sudo's default behavior:

    Defaults umask = 0022
    Defaults umask_override

This sets sudo's umask to root's default umask (0022) and overrides the default behavior, always using the indicated umask regardless of what umask the user as set.

Categories:

- Security (Українська)
- Commands (Українська)

Hidden categories:

- Pages flagged with Template:Redirect
- Pages or sections flagged with Template:Translateme (Українська)
- Pages or sections flagged with Template:Expansion
- Pages or sections flagged with Template:Merge

Sudo (Українська)
Add topic