Разрешить выполнение приложений с sudo в определенном каталоге на Linux

Thank you for reading this post, don't forget to subscribe!

как раз­ре­шить поль­зо­ва­те­лю запус­кать все про­грам­мы в ката­ло­ге через sudo и запре­тить ему запус­кать про­грам­мы в дру­гих ката­ло­гах в Linux и Unix-подоб­ных системах.

В Linux суще­ству­ет мно­же­ство спо­со­бов огра­ни­чить поль­зо­ва­те­ля в выпол­не­нии опре­де­лен­ных действий.

Вы може­те раз­ре­шить поль­зо­ва­те­лю выпол­нять толь­ко опре­де­лен­ные коман­ды и задачи.

Вы може­те запре­тить поль­зо­ва­те­лям изме­нять пере­мен­ные сре­ды или пере­хо­дить в ката­ло­ги дру­гих пользователей.

В этом руко­вод­стве мы соби­ра­ем­ся раз­ре­шить поль­зо­ва­те­лям выпол­нять толь­ко опре­де­лен­ные команды.

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

Поль­зо­ва­тель смо­жет выпол­нять толь­ко опре­де­лен­ные коман­ды вме­сте с sudo, а коман­ды из дру­гих мест не сможет.

Запуск всех программ в каталоге вместе с Sudo

Для демон­стра­ции я соби­ра­юсь создать тесто­во­го поль­зо­ва­те­ля с име­нем “user1” от root.

useradd user1

Уста­но­вим пароль для поль­зо­ва­те­ля user1 с помо­щью команды:

passwd user1

Затем отре­дак­ти­руй­те файл /etc/sudoers с помо­щью команды:

  visudo

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

Напри­мер:

В соот­вет­ствии с при­ве­ден­ной выше стро­кой, поль­зо­ва­тель user1 может запус­кать про­грам­мы ТОЛЬКО из ката­ло­га /usr/bin/.

Сохра­ни­те файл и закрой­те его.

Вый­ди­те из сеан­са root и сно­ва вой­ди­те в систе­му под име­нем user1.

Из сес­сии user1 запу­сти­те любую про­грам­му от име­ни root из раз­ре­шен­но­го ката­ло­га, т.е. /usr/bin/:

sudo -u root /usr/bin/touch itsecforu.txt

При­ве­ден­ная выше коман­да долж­на сра­бо­тать нор­маль­но и создать тек­сто­вый файл с име­нем itsecforu.txt в теку­щем каталоге.

Обра­ти­те вни­ма­ние, что поль­зо­ва­тель user1 может запус­кать коман­ды ТОЛЬКО из ката­ло­га /usr/bin/.

Он даже не может запус­кать про­грам­мы из под­ка­та­ло­га ката­ло­га /usr/bin/.

Далее про­верь­те, может ли user1 запус­кать коман­ды из дру­гих дирек­то­рий через sudo:

sudo -u root /usr/local/bin/yt-dlp --help

Вы уви­ди­те сле­ду­ю­щую ошибку:

Вот

Поль­зо­ва­те­лю user1 не раз­ре­ше­но выпол­нять коман­ды в ката­ло­ге /usr/local/bin/.

Как уже было ска­за­но, поль­зо­ва­тель user1 име­ет пра­во запус­кать любые коман­ды толь­ко из ката­ло­га /usr/bin/, но не из под­ка­та­ло­га /usr/bin/ и дру­гих каталогов.

Так­же сто­ит ска­зать, что этот совет эффек­ти­вен толь­ко в том слу­чае, если user1 выпол­ня­ет коман­ды от име­ни поль­зо­ва­те­ля root через sudo.

user1 может выпол­нять все коман­ды из любой точ­ки систем­но­го пути.

Напри­мер, он может выполнить:

yt-dlp --help

Но не от поль­зо­ва­те­ля root:

sudo -u root /usr/local/bin/yt-dlp --help

Здесь исполь­зу­ет­ся про­грам­ма yt-dlp для демонстрации.

Вы може­те исполь­зо­вать любую про­грам­му по сво­е­му выбору.

Что­бы вер­нуть­ся к пер­во­на­чаль­ным настрой­кам по умол­ча­нию, про­сто уда­ли­те стро­ку, кото­рую вы доба­ви­ли в файл /etc/sudoers.

Авторизация пользователей для выполнения команд через Sudo из пользовательской директории

Вы так­же може­те создать поль­зо­ва­тель­ский ката­лог и хра­нить в нем все испол­ня­е­мые дво­ич­ные файлы.

Напри­мер, я соби­ра­юсь создать сле­ду­ю­щую дирек­то­рию под поль­зо­ва­те­лем root:

mkdir /home/user1/programs

Ско­пи­руй­те все бинар­ные испол­ня­е­мые фай­лы, кото­рые вы хоти­те запус­кать от име­ни user1.

Затем добавь­те пол­ный путь к ката­ло­гу в файл /etc/sudoers:

Вый­ди­те из сеан­са root и сно­ва вой­ди­те в систе­му как user1 и про­верь­те, може­те ли вы запус­кать какие-либо про­грам­мы из дру­гих ката­ло­гов через sudo.

Поль­зо­ва­тель user1 не может запус­кать про­грам­мы через sudo из дру­гих ката­ло­гов, кро­ме раз­ре­шен­но­го ката­ло­га /home/user1/programs/.