Linux sudo command

Security Notes

sudo tries to be safe when executing commands. Variables that control how dynamic loading and binding is done can be used to subvert the program that sudo runs. To combat this, some system-specific environment variables are removed from the environment that is passed on to the commands that are executed. Other variables that sudo removes from the environment include:

  • IFS
  • ENV
  • BASH_ENV
  • KRB_CONF
  • KRBCONFDIR
  • KRBTKFILE
  • KRB5_CONFIG
  • LOCALDOMAIN
  • RES_OPTIONS
  • HOSTALIASES
  • NLSPATH
  • PATH_LOCALE
  • TERMINFO
  • TERMINFO_DIRS
  • TERMPATH

as they too can pose a threat. If the TERMCAP variable is set and is a pathname, it too is ignored. Additionally, if certain variables contain the or % characters, they will be ignored.

If sudo has been compiled with SecurID support, the VAR_ACE, USR_ACE and DLC_ACE variables are cleared as well. The list of environment variables that sudo clears is contained in the output of sudo -V when run as root.

To prevent command spoofing, sudo checks «.» and «» (both denoting current directory) last when searching for a command in the user‘s PATH (if one or both are in the PATH). Note, however, that the actual PATH environment variable is not modified and is passed unchanged to the program that sudo executes.

For security reasons, if your OS supports shared libraries and does not disable user-defined library search paths for setuid programs (most do), you should either use a linker option that disables this behavior or link sudo statically.

sudo will check the ownership of its timestamp directory (/var/run/sudo by default) and ignore the directory’s contents if it is not owned by root and only writable by root. On systems that allow non-root users to give away files via chown, if the timestamp directory is located in a directory writable by anyone (e.g.: /tmp), it is possible for a user to create the timestamp directory before sudo is run. However, because sudo checks the ownership and mode of the directory and its contents, the only damage that can be done is to «hide» files by putting them in the timestamp dir. This is unlikely to happen since once the timestamp dir is owned by root and inaccessible by any other user the user placing files there would be unable to get them back out. To get around this issue you can use a directory that is not world-writable for the timestamps (/var/adm/sudo for instance) or create /var/run/sudo with the appropriate owner (root) and permissions (0700) in the system startup files.

sudo will not honor timestamps set far in the future. Timestamps with a date greater than current_time + 2 * TIMEOUT will be ignored and sudo will log and complain. This is done to keep a user from creating his/her own timestamp with a bogus date on systems that allow users to give away files.

Please note that sudo will only log the command it explicitly runs. If a user runs a command such as «sudo su» or «sudo sh«, subsequent commands run from that shell will not be logged, nor will sudo‘s access control affect them. The same is true for commands that offer shell escapes (including most editors). Because of this, care must be taken when giving users access to commands via sudo to verify that the command does not inadvertently give the user an effective root shell.

su

The command substitutes the current user in use by the system in the shell. You can switch to any user by taking and adding a username by it. This will tell the system to switch (and essentially log out of) the current user to the one specified. Alternatively, the command can gain root access by entering without specifying anything after the command.

“su” is best used when a user wants direct access to the root account on the system. It doesn’t go through  or anything like that. Instead, the root user’s password has to be known and used to log in with. Furthermore, other ways of gaining root do not have the benefit of getting access to the root home directory and root environment.

sudo su

This command is essentially the same as just running in the shell. Instead of telling the system to “switch users” directly, you’re telling it to run the “su” command as root. When is run, “.profile,” “.bashrc” and “/etc/profile” will be started, much like running (or ). This is because if any command is run with in front of it, it’s a command that is given root privileges.

Though there isn’t very much difference from “su,”  is still a very useful command for one important reason: When a user is running “su” to gain root access on a system, they must know the root password. The way root is given with is by requesting the current user’s password. This makes it possible to gain root without the root password which increases security.

How To Give a User Sudo Privileges

The most common operation that users want to accomplish when managing permissions is to grant a new user general access. This is useful if you want to give an account full administrative access to the system.

The easiest way of doing this on a system set up with a general purpose administration group, like the Ubuntu system in this guide, is actually to add the user in question to that group.

For example, on Ubuntu 20.04, the group has full admin privileges. We can grant a user these same privileges by adding them to the group like this:

The command can also be used:

These will both accomplish the same thing.

On CentOS, this is usually the group instead of the group:

Or, using :

On CentOS, if adding the user to the group does not work immediately, you may have to edit the file to uncomment the group name:

/etc/sudoers

What is Visudo?

The command is configured through a file located at .

Warning: Never edit this file with a normal text editor! Always use the command instead!

Because improper syntax in the file can leave you with a broken system where it is impossible to obtain elevated privileges, it is important to use the command to edit the file.

The command opens a text editor like normal, but it validates the syntax of the file upon saving. This prevents configuration errors from blocking operations, which may be your only way of obtaining root privileges.

Traditionally, opens the file with the text editor. Ubuntu, however, has configured to use the text editor instead.

If you would like to change it back to , issue the following command:

Select the number that corresponds with the choice you would like to make.

On CentOS, you can change this value by adding the following line to your :

Source the file to implement the changes:

After you have configured , execute the command to access the file:

Настройка

Использование visudo

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

Важно:

Крайне важно, чтобы файл был без синтаксических ошибок! Любая ошибка делает sudo неработоспособным
Всегда редактируйте его только с помощью для предотвращения ошибок.
Из : Обратите внимание, что это дыра в безопасности, поскольку позволяет пользователю запускать любую программу, какую он захочет, просто прописав её в VISUAL или EDITOR.. visudo использует в качестве текстового редактора по умолчанию
В core репозитории sudo скомпилирована с по умолчанию и использует переменные и

не используется, если задана переменная .

visudo использует в качестве текстового редактора по умолчанию. В core репозитории sudo скомпилирована с по умолчанию и использует переменные и . не используется, если задана переменная .

Чтобы сделать nano редактором visudo в течение текущего shell сеанса, задайте и экспортируйте переменную перед тем, как выполнять visudo.

Он будет использован, если вы не определили другой редактор, установив переменные окружения или (используемые в таком порядке) в качестве желаемого редактора, например . Выполните команду с правами суперпользователя:

# EDITOR=nano visudo

Для изменения редактора на постоянной основе для текущего пользователя, прочтите . Для того, чтобы установить выбранный редактор на постоянной основе для всей системы, но только для , добавьте следующее в (предположим, что вы предпочитаете в качестве редактора):

# Сброс окружения
Defaults      env_reset
# Установка nano в качестве редактора по умолчанию и запрет visudo использовать EDITOR/VISUAL.
Defaults      editor=/usr/bin/nano, !env_editor

Примеры настроек

Настройка sudo осуществляется добавлением записей в файл . Чтобы дать пользователю привилегии суперпользователя, когда он вводит перед командой, добавьте следующую строку:

имя_пользователя   ALL=(ALL) ALL

Разрешить пользователю выполнять все команды от любого пользователя, но только на машине с определенным названием хоста:

имя_пользователя   название_хоста=(ALL) ALL

Предоставить членам группы доступ sudo:

%wheel      ALL=(ALL) ALL

Чтобы не спрашивать пароль у пользователя:

Defaults:имя_пользователя      !authenticate

Разрешить выполнять только конкретные команды и только пользователю на определенном хосте:

имя_пользователя название_хоста=/usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu

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

Разрешить выполнять конкретно определённые команды только для пользователя на определенном хосте и без пароля:

имя_пользователя название_хоста= NOPASSWD: /usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu

Права доступа к файлам sudoers по умолчанию

Файл должен иметь владельца root и группу root (0). Права доступа всегда должны быть установлены как (0440). Эти права установлены по умолчанию, однако если вы случайно измените их, они должны быть немедленно изменены обратно, иначе sudo не будет работать.

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

Время действия введённого пароля

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

Defaults:имя_пользователя timestamp_timeout=время_в_минутах

Например, чтобы установить тайм-аут на 20 минут:

Defaults:имя_пользователя timestamp_timeout=20

Совет: Если вы хотите чтобы sudo всегда требовал ввод пароля, установите равным 0. Чтобы срок действия пароля никогда не истекал, установите любое отрицательное значение.

Пользовательские переменные

Как обсуждалось ранее, sudo удаляет потенциально опасные системные переменные.
Чтобы проверить, какие переменные сохранились, а какие были удалены,
используйте команду sudo -V.
Эта команда выведет список удаленных и сохраненных. То, что удаляется переменная
LIBPATH, конечно же, неудобно. Есть два способа обойти это:
можно написать оберточный сценарий или указать нужные переменные окружения в командной строке.
Рассмотрим сначала вариант с оберточным сценарием. Предположим, у нас есть приложение,
которое останавливает и запускает процесс
DB2

Можно написать сценарий, который будет оставлять переменные окружения невредимыми.
Обратите внимание на .
Здесь, чтобы оставить переменные окружения нетронутыми,
мы выполняем файл профиля пользователя

 . /home/$inst/sqllib/db2profile

в котором, в свою очередь, экспортируются значения переменных окружения LIBPATH и DB2.

Для законченности приведем записи, которые следует добавить в файл
sudoers, чтобы можно было выполнять данные команды, сохраняя значения
всех системных переменных окружения:

bravo     rs6000 = (dbinst4) NOPASSWD: /home/dbinst4/sqllib/adm/db2start
bravo     rs6000 = (dbinst4) NOPASSWD: /home/dbinst4/sqllib/adm/db2stop force
bravo     rs6000 = (dbinst4) NOPASSWD: /usr/local/bin/rc.db2 stop db2inst4
bravo     rs6000 = (dbinst4) NOPASSWD: /usr/local/bin/rc.db2 start db2inst4

Обратите внимание, что в этом примере пользователь «bravo»
может выполнять указанные выше команды с привилегиями пользователя «dbinst4.»
Выполняемые команды выглядят так:

sudo -u dbinst4 /usr/local/bin/rc.db2 stop db2inst4
sudo -u dbinst4 /usr/local/bin/rc.db2 start db2inst4
Листинг 1. rc.db2
#!/bin/sh
# rc.db2
# stop/start db2 instances

# проверяем, запущен ли процесс db2 
db2_running(){state=`ps -ef |grep db2sysc 
                    |grep -v grep| awk '$1=="'${inst}'" { print $1 }'`
if  
then 
    return 1 
else 
    return 0 
fi}

usage ()

{
echo "`basename $0` start | stop <instance>"
}

# останавливаем db2 
stop_db2 ()
{
echo "stopping db2 instance as user $inst" 
    if [ -f /home/$inst/sqllib/db2profile ]; then 
        . /home/$inst/sqllib/db2profile 
else 
    echo "Cannot source DB2..exiting" 
exit 1
fi 
    /home/$inst/sqllib/adm/db2stop force
}

# запускаем db2
start_db2 ()
{
echo "starting db2 instance as user $inst" 
    if [ -f /home/$inst/sqllib/db2profile ]; then 
        . /home/$inst/sqllib/db2profile 
else 
    echo "Cannot source DB2..exiting" 
exit 1
fi
/home/$inst/sqllib/adm/db2start
} 

# проверяем, что в сценарий передано 2 параметра
if 
then 
    usage 
    exit 1
fi

inst=$2 

case "$1" in 
Start|start) 
    if db2_running  
        then  
        echo "db2 instance $inst appears to be already running"
         exit 0 
    else 
        echo " instance not running as user $inst..attempting to start it" 
        start_db2 $inst

        fi
        ;; 
Stop|stop) 
    if db2_running 
        then 
        echo "instance running as $inst..attempting to stop it"
        stop_db2 $inst 
    else 
        echo "db2 instance $inst appears to be not running anyway" 
        exit 0 
    fi 
    ;; 
*) usage  
;;
esac

Другим способом сохранить системные переменные окружения является
использование директивы Defaults
!env_reset. Укажите ее в файле sudoers:

Defaults !env_reset

Затем укажите в командной строке имена и значения переменных окружения:

$ sudo LIBPATH=″/usr/lib:/opt/db2_09_05/lib64″ -u delta /usr/local/bin/datapmp

Если бы у вас не было записи !env_reset, то при выполнении этой команды sudo
выдал бы следующую ошибку:

sudo: sorry, you are not allowed to set the following environment variables: LIBPATH
(извините, вы не можете задать значения следующих переменных окружения: LIBPATH)

Если вы обнаружите, что sudo также удаляет и другие переменные окружения,
вы можете указать эти переменные в файле sudoers,
чтобы sudo сохранил эти переменные невредимыми (с помощью директивы
env_keep +=). Например, предположим, sudo удаляет
из одного из моих сценариев переменные
DSTAGE_SUP и DSTAGE_META. Чтобы защитить эти переменные, я могу добавить в файл
sudoers следующие записи:

Defaults env_keep += "DSTAGE_SUP"
Defaults env_keep += "DSTAGE_META"

Обратите внимание, что я указываю имя переменной, а не ее значение.
Значения уже содержатся в моем сценарии, например:

export DSTAGE_SUP=/opt/dstage/dsengine; export DSTAGE_META=/opt/dstage/db2

Теперь при выполнении этого сценария с помощью sudo, значения указанных выше переменных окружения
будут сохраняться.

Configuration

This article or section needs expansion.

Using visudo

The configuration file for sudo is . It should always be edited with the command. locks the file, saves edits to a temporary file, and checks that file’s grammar before copying it to .

Warning:

  • It is imperative that be free of syntax errors! Any error makes sudo unusable. Always edit it with to prevent errors.
  • From : Note that this can be a security hole since it allows the user to execute any program they wish simply by setting VISUAL or EDITOR.

The default editor for visudo is . sudo from the core repository is compiled with by default and honors the use of the and variables. is not used when is set.

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

# EDITOR=nano visudo

Alternatively you may edit a copy of the file and check it using . This might come in handy in case you want to circumvent locking the file with visudo.

To change the editor permanently, see . To change the editor of choice permanently system-wide only for , add the following to (assuming 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

Example entries

To allow a user to gain full root privileges when they precede a command with , add the following line:

USER_NAME   ALL=(ALL) ALL

To allow a user to run all commands as any user but only on the machine with hostname :

USER_NAME   HOST_NAME=(ALL) ALL

To allow members of group sudo access:

%wheel      ALL=(ALL) ALL

Tip: When creating new administrators, it is often desirable to enable sudo access for the group and , since by default treats the members of the group as administrators. If the user is not a member of , software using Polkit may ask to authenticate using the root password instead of the user password.

To disable asking for a password for user :

Warning: This will let any process running with your user name to use sudo without asking for permission.

Defaults:USER_NAME      !authenticate

Enable explicitly defined commands only for user on host :

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 line if your user is in this group.

Enable explicitly defined commands only for user on host without password:

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

A detailed example is available at . Otherwise, see the for detailed information.

Sudoers default file permissions

The owner and group for the 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

Создание

Синтаксис:

useradd <имя пользователя>

* опции не являются обязательными при создании пользователя.

Пример:

useradd dmosk

* в данном примере создается учетная запись dmosk.

Для учетной записи стоит сразу создать пароль:

passwd dmosk

* после ввода, система попросит ввести пароль дважды.

Ключи (опции)

Ключ Описание и примеры
-b Задает базовый каталог для домашнего каталогаuseradd dmosk -b /var/home
-c Создает комментарий для описания учетной записиuseradd dmosk -c «Пользователя для управления системой»
-d Полный путь к домашнему каталогу пользователяuseradd dmosk -d /home/newuser
-D Позволяет показать или изменить настройки по умолчанию, которые будут применяться при последующем создании пользователейuseradd dmosk -Ds /bin/bash
-e Дата, после которой учетная запись устареет.useradd dmosk -e 2017-12-31
-f Число дней, после которого учетная запись с устаревшим паролем будет заблокированаuseradd dmosk -f 0
-g Задает основную группуuseradd dmosk -g altternativegroup
-G Задает дополнительные группыuseradd dmosk -G wheel
-k Путь к источнику скелета (файлы с шаблонами для нового пользователя)useradd dmosk -k /var/skel
-m При создании пользователя создать домашний каталогuseradd dmosk -m
-M Не создавать домашний каталогuseradd dmosk -M
-N Не создавать основную группу с таким же именем, как у пользователяuseradd dmosk -N
-o Разрешает создание учетной записи с повторяющимся UIDuseradd dmosk -u 15 -o
-p Задает парольuseradd dmosk -p pass
-r Системная учетная запись (без домашнего каталога и с идентификаторами в диапазоне SYS_UID_MIN — SYS_UID_MAX из файла /etc/login.defs)useradd dmosk -r
-R Каталог, в который выполняется chrootuseradd dmosk -R /var/chroot/home
-s Путь до оболочки командной строкиuseradd dmosk -s /bin/csh
-u Задает UIDuseradd dmosk -u 666
-U Имя группы будет таким же, как у пользователяuseradd dmosk -U

Актуальный список ключей можно получить командой useradd -h.

Файл Sudoers

Команда sudo настраивается через файл, расположенный в /etc/. Он называется sudoers.

С помощью команды sudo вы предоставляете привилегии административного уровня обычным пользователям. Обычно первый пользователь, которого вы создаёте при установке Ubuntu, имеет права sudo. В среде VPS это пользователь root по умолчанию. Вы можете изменить настройки таким образом, чтобы другие пользователи также могли запускать команду sudo. Сделать это можно путём редактирования sudoers.

Важно: будьте осторожны! Редактирование файла sudoers с ошибками или неправильным синтаксисом может привести к блокировке всех пользователей в вашем дистрибутиве

Синтаксис файла Sudoers

Вы можете открыть файл в любом текстовом редакторе, который вам нравится. Мы будем использовать vi

vi /etc/sudoers

Наш файл VPS выглядит следующим образом:

Давайте рассмотрим некоторые форматы и правила, которых следует придерживаться, редактируя sudoers:

  • Все строки, начинающиеся с #, являются комментариями
  • root ALL = (ALL:ALL) ALL – эта строка означает, что пользователь root имеет неограниченные привилегии и может выполнять любую команду в системе
  • %admin ALL=(ALL) ALL  – знак % указывает группу. Любой пользователь в группе администраторов имеет те же привилегии, что и пользователь root
  • %sudo   ALL=(ALL:ALL) ALL – все пользователи в группе sudo имеют права на запуск любой команды

Ещё один интересный момент – #includedir /etc/sudoers.d, это означает, что мы можем добавить конфигурации в файл sudoers.d и связать его здесь.

Редактируем Файл Sudoers

Чтобы изменить файл /etc/sudoers, используйте следующую команду:

sudo visudo -f /etc/sudoers

Для редактирования файла sudoers рекомендуется использовать visudo. Visudo гарантирует, что sudoers редактируется только одним пользователем, а не несколькими одновременно, а также выполняет необходимые проверки синтаксиса.

Чтобы увидеть, какие пользователи входят в группу sudo, мы можем использовать команду grep (англ):

grep ‘sudo’ /etc/group

Это действие выведет список имён пользователей.

Чтобы добавить пользователя с именем Билл в группу sudo, мы используем команду adduser в командной строке, например:

adduser bill sudo

Если мы используем команду grep для проверки того, кто входит в группу, мы увидим пользователя с именем Билл.

Если вы хотите дать кому-либо привилегии root, просто добавьте их в sudo.

Чтобы удалить пользователя из sudo:

deluser bill sudo

Команда deluser удалит Билла из группы sudo.

Теперь пользователь Билл больше не сможет выполнять действия, требующие привилегий sudo.

Используем Файл Sudoers, Чтобы Настроить Определённые Привилегии

Что, если мы хотим, чтобы Билл мог запускать только определённые виды команд с привилегиями sudo, например команду, связанную с доступом к сети?

Для этого мы создаем файл конфигурации в /etc/sudoers.d/ и называем его networking. 

Используйте следующую команду для создания файла:

sudo visudo -f /etc/sudoers.d/networking

Добавьте следующий текст в файл:

Cmnd_Alias     CAPTURE = /usr/sbin/tcdump
Cmnd_Alias     SERVERS = /usr/sbin apache2ctl, /usr/bin/htpasswd
Cmnd_Alias     NETALL = CAPTURE, SERVERS
%netadmin ALL=NETALL

В приведенном выше файле мы создали группу netadmin. Пользователи в группе netadmin могут запускать команды, указанные в NETALL. NETALL, в свою очередь, включает все команды под псевдонимами CAPTURE и SERVERS. Команда tcpdump находится под псевдонимом CAPTURE, например, /usr/sbin/tcpdump.

Далее мы добавляем пользователя с именем Билл в группу netadmin:

sudo adduser bill netadmin

Теперь пользователь Билл сможет запускать команду tcpdump вместе с другими командами, связанными с сетью.

How To Modify the Sudoers File

You will be presented with the file in your selected text editor.

I have copied and pasted the file from Ubuntu 18.04, with comments removed. The CentOS file has many more lines, some of which we will not discuss in this guide.

/etc/sudoers

Let’s take a look at what these lines do.

Default Lines

The first line, “Defaults env_reset”, resets the terminal environment to remove any user variables. This is a safety measure used to clear potentially harmful environmental variables from the session.

The second line, , tells the system to mail notices of bad password attempts to the configured user. By default, this is the root account.

The third line, which begins with “Defaults secure_path=…”, specifies the (the places in the filesystem the operating system will look for applications) that will be used for operations. This prevents using user paths which may be harmful.

User Privilege Lines

The fourth line, which dictates the root user’s privileges, is different from the preceding lines. Let’s take a look at what the different fields mean:

  • The first field indicates the username that the rule will apply to (root).

  • The first “ALL” indicates that this rule applies to all hosts.

  • This “ALL” indicates that the root user can run commands as all users.

  • This “ALL” indicates that the root user can run commands as all groups.

  • The last “ALL” indicates these rules apply to all commands.

This means that our root user can run any command using , as long as they provide their password.

Group Privilege Lines

The next two lines are similar to the user privilege lines, but they specify rules for groups.

Names beginning with a indicate group names.

Here, we see the admin group can execute any command as any user on any host. Similarly, the sudo group has the same privileges, but can execute as any group as well.

Included /etc/sudoers.d Line

The last line might look like a comment at first glance:

/etc/sudoers

It does begin with a , which usually indicates a comment. However, this line actually indicates that files within the directory will be sourced and applied as well.

Files within that directory follow the same rules as the file itself. Any file that does not end in and that does not have a in it will be read and appended to the configuration.

This is mainly meant for applications to alter privileges upon installation. Putting all of the associated rules within a single file in the directory can make it easy to see which privileges are associated with which accounts and to reverse credentials easily without having to try to manipulate the file directly.

As with the file itself, you should always edit files within the directory with . The syntax for editing these files would be:

Тайм-ауты в sudo

В sudo есть система временных «билетов», которая умеет
определять, как много времени прошло с момента
выполнения последней команды sudo. В течение определенного периода времени пользователь
может «по билету» повторно выполнить команду, не вводя при этом пароль (т.е. свой собственный пароль).
По истечении этого времени пользователю при перезапуске команды снова нужно будет вводить пароль.
Если пользователь вводит правильный пароль, то выполняется команда и
отсчет времени начинается заново.
Эти тайм-ауты не используются, если в файле sudoers в записи указана опция
NOPASSWD. По умолчанию тайм-аут составляет 5 минут. Поменять значение по умолчанию можно,
добавив запись в файл sudoers. Например, задать пользователю «bravo» для выполнения всех команд тайм-аут 20 минут
можно следующим образом:

Defaults:bravo timestamp_timeout=20

Чтобы удалить билет, пользователю следует выполнить команду:

$ sudo -k

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

Не задавайте значение тайм-аута для всех пользователей, так как это может привести к проблемам,
особенно при выполнении серии задач, если по каким-либо причинам задачи выполняются дольше, чем обычно.
Чтобы выключить использование тайм-аутов, задайте переменной timestamp_timeout значение -1.
Временные билеты размещаются в директории /var/run/sudo и называются по имени соответствующего пользователя.

Установка и настройка

В ОС Ubuntu sudo включена по умолчанию, а в Debian, если в процессе установки не был выбран соответствующий пакет, скорее всего будет следующая картина:

Значит, требуется установить недостающий пакет. Обновляем информацию о репозиториях и устанавливаем sudo:

Дожидаемся окончания процесса:

После успешной установки потребуется сконфигурировать sudo, определив, какие пользователи или группы смогут использовать повышение привилегий и в каком объеме. Все эти настройки хранятся в конфигурационном файле /etc/sudoers, однако вносить в него изменения напрямую настоятельно не рекомендуется. Для этих целей используется специальная команда:

которая запускает текстовый редактор с конфигурационным файлом:

За предоставление прав здесь отвечают две строки:

Первая строка назначает права для учетной записи root, вторая устанавливает права для членов группы sudo, которая была создана при установке пакета (знак % перед названием означает, что имя относится к группе пользователей). Соответственно, у нас есть два основных способа предоставить пользовательской учетной записи право использовать sudo:

1. Добавить учетную запись пользователя (например, user) в группу sudo на сервере:

После изменения членства в группе, потребуется заново авторизоваться в этой учетной записи для применения новой конфигурации. Данный метод рекомендуется в тех случаях, когда пользователю необходимо предоставить полные права.

2. Создать в файле новую запись, например, для учетной записи user. Мы добавляем строку по аналогии с root:

Добавлять новую запись рекомендуется в тех случаях, когда список привилегий будет корректироваться (об этом чуть позднее). Если мы внесли изменения в файл, нужно их сохранить нажатием сочетания клавиш Ctrl-O и выйти из редактора — Ctrl-X.

Теперь можно проверить корректность работы:

Команда sudo запрашивает пароль текущего пользователя (в данном случае это user) — вводим его, и, если все сделано правильно, мы увидим содержание системного конфигурационного файла.

Return Values

Upon successful execution of a program, the return value from sudo will be the return value of the program that was executed.

Otherwise, sudo quits with an exit value of 1 if there is a configuration/permission problem or if sudo cannot execute the given command. In the latter case the error string is printed to stderr. If sudo cannot stat one or more entries in the user’s PATH an error is printed on stderr. (If the directory does not exist or if it is not really a directory, the entry is ignored and no error is printed.) This should not happen under normal circumstances. The most common reason for stat to return «permission denied» is if you are running an auto-mounter and one of the directories in your PATH is on a machine that is currently unreachable.

Изменение атрибутов и запрет на редактирование

Для смены атрибутов выбранного файла применяется команда chattr. Используя «+» можно добавить атрибут, а с помощью «-» наоборот его убрать. Для примера давайте возьмем:

# chattr +i /boot/grub/menu.lst

Введение такой команды приведет к тому, что файл нельзя редактировать, менять его имя или даже удалять. Установить атрибут «i» может лишь суперпользователь или процесс CAP_LINUX_IMMUTABLE. Удаление данного атрибута производится командой:

# chattr -i /boot/grub/menu.lst

Полезным является и атрибут «j». Он предназначен, чтобы вносимые в файл данные предварительно были записаны в журнал файловой системы. Функционировать такой атрибут будет только в системах, имеющих опции data=ordered или data=writeback. Если изначально использовано data=journal, то данные уже автоматически сохраняются и он ничего не изменит.

Прочие важные атрибуты:

  • А — запрещает обновление записи atime, которая фиксирует время доступа к измененному файлу;
  • с — атрибут, необходимый для сжатия содержащихся в файле данных, что удобно при необходимости экономить дисковое пространство;
  • а — позволяет исключительно добавлять новые данные;
  • D — моментальная запись информации на диск;
  • d — опция создания резервной копии программой dump;
  • u — упрощает восстановление случайно удаленного с диска файла;
  • X и Z — экспериментальные атрибуты, используемые в служебных администраторских целях.

Для установки любого атрибута можно воспользоваться chattr, а посмотреть права на папку Linux пользователя получится командой lsattr. Другие атрибуты есть в справочнике — man chattr.

Популярные услуги

Linux сервер
Высокопроизводительные VPS сервера Linux на без KVM-виртуализации идеально подходят для крупных интернет-проектов. В сочетании с этой операционной системой серверные компьютеры демонстрируют хорошую производительность, а SSD хранилища данных способствуют увеличению их быстродействия. У нас вы сможете взять в аренду VPS и VDS Linux сервера.

Виртуальный сервер (VDS/VPS)
Оптимальные тарифы для облачных решений!
Полный аналог «железного» сервера в виртуальной среде.
Реализовано на VMware.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *