Обмежити користувача у виконанні селективних команд (Linux)


14

Як я можу обмежити свого користувача лише виконувати вибіркові команди. У мене є користувач tomc в групі tomc. Мені потрібен цей користувач, щоб бути користувачем sudo, а потім мати обмежений bash. Я спробував наступний код у /etc/sudoersфайлі, але він не працює, оскільки користувач може виконувати інші команди, наприклад mkdir,rm

%tomc ALL=/bin/bash,/usr/bin/vim /*

3
Хоча використання судо може бути обмежено певними командами, це може бути складним і вимагає певної довіри. Якщо ви не довіряєте користувачеві, то надання їм доступу до sudo - це погана ідея. Це або надасть їм привілеї root, або надасть їм цілеспрямоване додаток для атаки, щоб отримати привілеї root. Дозволити комусь працювати sudo bash, у більшості способів рівнозначно паролю root. З sudo bashоболонки вони можуть запускати будь-яку команду адміністратора, встановлювати або видаляти програмне забезпечення, видаляти користувачів та каталоги тощо
Пол

@Paul Чи можете ви запропонувати мені кращі та практичні варіанти для цього?

По-перше, це поза темою переповнення стека. Кращими місцями для запитання є суперусер або askubuntu, або linux & unix. Спочатку з’ясуйте, що саме ви хочете дозволити tomc робити. tomc має бути дозволено робити _____, але не ________. Тоді запитайте. Судо призначений для команд, для яких потрібен root (admin) priv. Він може запускати bash вже без запуску його як root.
Пол,

Відповіді:


18

Ви можете йти цим неправильним шляхом. Замість того, щоб надавати користувачеві обмежену оболонку bash, ви повинні лише надати їм доступ до тих команд, які вони повинні виконувати як root. Наприклад, у вашому файлі sudoers:

tomc ALL=(root) /usr/bin/vim /etc/myapp.conf
tomc ALL=(root) /usr/bin/less /var/log/myapp/*.log

Будьте обережні, дозволяючи користувачам запускати vim як root. Vim має багато вбудованих функцій, як втеча до оболонки та можливість запускати команди зсередини vim. Залежно від вашого розповсюдження, ви можете мати sudoeditдоступні. Це працює так само, як і звичайний Vim, за винятком того, що він призначений для обробки втеч оболонки і подібних.


7
Жодна з цих ліній не є безпечною. Як ви вже згадували,vimможна виконувати довільні команди оболонки. І другий рядок, мабуть, дозволитьless /var/log/myapp/../../../etc/shadow! Згідно з моїми експериментами, безпечне використання судо важко ! Але якщо ви можете уникнути*s та використовуватиsudoeditзамістьvimцього, ви, можливо, все в порядку.
joeytwiddle

Уникати *недостатньо! Опинившись lessяк rootкористувач, спробуйте ввести текст !tail /var/log/secure. Як це відчуваєте? Вивчіть NOEXECтег. Але прийміть до серця повідомлення @ joeytwiddle: безпека судо справді складна.
Бруно Броноський

3

На моїй Synology Diskstation, що працює з DSM 6, лише користувачі адміністратора можуть послідовно ssh (користувачі, які не є адміністратором, мають оболонку як / sbin / nologin в / etc / passwd - ви можете встановити це в / bin / sh, щоб тимчасово дозволити ssh, але при перезавантаженні файл / etc / passwd скидається). З цієї причини для облікового запису, який інакше існує лише для виконання, наприклад, / sbin / poweroff, потрібне якесь обмеження sudo. Наступні рядки в / etc / sudoers працювали для мене:

# Allow guestx user to remote poweroff
guestx ALL=(ALL) !ALL
guestx ALL=NOPASSWD: /sbin/poweroff

Переклад: заборонити всі команди, а потім дозволити лише бажану команду (не вимагаючи пароля в цьому випадку).

При такій конфігурації sudo запитує пароль, а потім не відповідає командам, відмінним від білого:

guestx@ds:~$ sudo su -
Password: 
Sorry, user guestx is not allowed to execute '/bin/su -' as root on ds.
guestx@ds:~$ 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.