Bash с несколькими командами, в белый список нескольких встроенных команд - PullRequest
0 голосов
/ 20 апреля 2019

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

Опробованные параметры командной строки, такие как ограничение -r, но не дают ожидаемого результата. Также пробовал shopt & unset команды.

bash --noprofile --noediting --verbose --version --init-file test.sh

unset ls

shopt -u -o history

Запустите оболочку bash, используя всего несколько встроенных команд. Например, только cd, ls, cat. Использование такой оболочки предназначено только для чтения для целей навигации по каталогам, просмотра списков и просмотра файлов

1 Ответ

0 голосов
/ 20 апреля 2019

Вы можете взять список всех встроенных функций и объявить функции с одинаковым именем.

Я сделал это так:

Файл bash_limited.sh:

#!/bin/bash


export PATH=
eval "$(
echo '
:
.
[
alias
bg
bind
break
builtin
caller
cd
command
compgen
complete
compopt
continue
declare
dirs
disown
echo
enable
eval
exec
exit
export
fc
fg
getopts
hash
help
history
jobs
kill
let
local
logout
mapfile
popd
printf
pushd
pwd
read
readarray
readonly
return
set
shift
shopt
source
test
times
trap
type
typeset
ulimit
umask
unalias
unset
wait
' |
while IFS= read -r line; do
    case "$line" in
    ''|ls|cat|cd|return|printf) continue; ;; 
    esac

    printf "%s\n" "function $line () { /bin/printf -- 'bash: $line: Command not found.\n' >&2; return 127; }"
done

echo 'function ls() { /bin/ls "$@"; }'
echo 'function cat() { /bin/cat "$@"; }'

)" ## eval

Затем я открываю новую оболочку и выполняю:

$ source bash_limited.sh

, после этого просто:

$ .
bash: .: Command not found.
$ :
bash: :: Command not found.
$ source
bash: source: Command not found.
$ declare
bash: declare: Command not found.

Вы также можете использовать некоторые техники chroot с некоторыми другими ограничениями PATH, и это будеттрудно выйти.

...