Как заблокировать команду, скажем, mkdir
для конкретного пользователя?
То, что я сделал, только что создал функцию только для чтения и сохранил в профиле пользователя ~/.bashrc
/bin/mkdir() {
echo "mkdir command not allow for you"
}
mkdir() {
echo "mkdir command not allow for you"
}
./mkdir() {
echo "mkdir command not allow for you"
}
readonly -f /bin/mkdir
readonly -f mkdir
readonly -f ./mkdir
Тест:
rahul@ubuntu:~$ cd /bin/
rahul@ubuntu:/bin$ ./mkdir /home/rahul/ggg
mkdir command not allow for you
rahul@ubuntu:/bin$ cd
rahul@ubuntu:~$ mkdir testing
mkdir command not allow for you
rahul@ubuntu:~$ /bin/mkdir testing
mkdir command not allow for you
Итак, мой вопрос: каким должен быть способ достижения этого? есть ли инструмент для этого?
Обновление 1 # Но если пользователь умен, он может скопировать двоичный файл mkdir, переименовать его и использовать. Так как этого добиться?
linux
security
account-restrictions
restricted-shell
Рахул Патил
источник
источник
mkdir
и переименовать его, или даже просто скопировать и переименовать существующий двоичный файл. Также есть встроенная оболочка для переопределения псевдонимов и функций.cp /bin/mkdir mkdir2
использовать его :(cp -r /usr/local/lib ggg
будет создан каталог с именемggg
(содержащий копию содержимого/usr/local/lib
, если таковое имеется, которое пользователь затем может просто удалить). Вы можете использовать,find / -type d -empty
чтобы найти пустой каталог для копирования.Ответы:
Я не знаю, как это сделать с помощью bash, но я знаю другую оболочку, которая ограничивает пользовательскую среду: lshell (ограниченная оболочка) .
Краткий обзор конфигурации
Lshell настраивается через INI-файл. По умолчанию он содержит белый список разрешенных команд, но его можно легко настроить, чтобы запретить пользователю использовать определенную команду.
Эта конфигурация (настройка по умолчанию
/etc/lshell.conf
) запрещает пользователюfoo
использоватьmkdir
:Чтобы настроить учетную запись пользователя для использования lshell по умолчанию, необходимо:
Lshell может сделать больше, например:
|
).И больше.
Обновление 1 # Добавлен результат теста:
источник
allowed = 'all' - ['mkdir']
, вы не можете просто казнитьbash
и быть неограниченным снова?dd if=$(which bash) of=my_bash && chmod u+x my_bash && ./my_bash
. Я думаю, что проблема заключается в отсутствии ограничительной политики по умолчанию, т. Е. В этом сценарии вы предоставляете разрешения по умолчанию, затем разрешения DENY на основе списка, когда это должно быть наоборот: по умолчанию DENY, затем GRANT на основе политики ,cp
двоичный файл в его / ее PATH (root
собственный каталогrx
для пользователя) иrbash
препятствует выполнению./executables
. Это отвечает на ваш вопрос?То, как я обычно реализую такого рода ограничения, требует соблюдения нескольких условий, в противном случае ограничение можно легко обойти:
wheel
группе, единственный, кому разрешено использоватьsu
(принудительно применяется через PAM).Пользователю предоставляется надлежащая защита
rbash
с доступной только для чтения переменной PATH, указывающей на частную~/bin
, этот~/bin/
каталог содержит ссылки на простые утилиты:пользователю предоставляется ограниченный, только для чтения окружающей среды (думаю такие вещи , как
LESSSECURE
,TMOUT
,HISTFILE
переменных).staff_u
и получает права на выполнение команд от имени другого пользователя в соответствии с требованиямиsudo
.пользователь
/home
,/tmp
и, возможно/var/tmp
, полинстанциированы через/etc/security/namespace.conf
:Кроме того,
/etc/security/namespace.init
делает все скелетные файлы доступными только для пользователя и принадлежащимиroot
.Таким образом, вы можете выбрать,
$USER
выполнять лиmkdir
его / ее от своего имени (через ссылку в личном~/bin
каталоге, предоставляемую через/etc/skel
, как описано выше), от имени другого пользователя (черезsudo
) или вообще ничего.источник
Добавить фиктивную группу, добавьте пользователя в эту группу,
chown root:somegroup /bin/mkdir
,chmod g-x /bin/mkdir
. Обратите внимание, что это зависит от того, что пользователь не может изменять свои группы. IIRC это верно в GNU / Linux, но не в некоторых других Unices.источник
Лучшее, что я тестировал, это использовать Profile.d лучший и самый безопасный способ
Шаг № 1 (создание файла псевдонимов)
Добавить ниже линии:
Сохранить и выйти
Шаг № 2 (Создать загрузчик профиля)
/etc/profile.d/ это место содержит файлы для завершения bash
Добавьте строки ниже под файлами, эти строки будут блокировать упомянутые команды для пользователей ниже
сохранить и выйти
Теперь выйдите и перезапустите
С уважением, -Mansur
источник
/etc/profile.d/
не дляbash
завершения , это место для размещения настроек сеанса входа для пользователей, использующих POSIX-подобные оболочки входа, так что обычно это не то место, кудаbash
пошли/etc/bash.bashrc
бы настройки псевдонимов (что было бы лучше ), и он должен иметь синтаксис оболочки POSIX (так, как правило,.
вместо изsource
и=
вместо==
).установить sudoers и попытаться настроить там, чьи пользователи и какая команда.
источник
sudo
.