Как получить подсказку разного цвета в зависимости от сервера?

  1. Я понятия не имею, как это работает наверняка (в основном потому, что я никогда не видел применения такой конфигурации ). Я предполагаю, что это не имеет значения, потому что SUID фактически помещает вызов seteuid()в самый конец процесса запуска (прямо перед передачей выполнения самой программе ), что будет после файл загружается для выполнения, и, следовательно, после того, как проверка также произошла (, проверка происходит (по крайней мере в Linux )до того, как какие-либо данные будут загружены в память ).

  2. Это зависит от того, что вы подразумеваете под значимым. Функционально это ничего не делает, так как владелец может просто установить исполняемый бит самостоятельно (, не предполагая никаких дополнительных обязательных -средств управления доступом -, которые мешают им это сделать ), так что в этом отношении не совсем так. Что касается того, имеет ли это смысл в смысле полезности, я не могу придумать ни одной ситуации, в которой владельцу было бы разумно не иметь разрешения на выполнение, а другие пользователи имеют, поэтому я бы тоже сказал нет.

1
15.04.2020, 21:40
1 ответ

Примерно так:

set_color_prompt() {
    _colorcombos() {
    PERL_HASH_SEED=109 perl -MB -e '
        use B;
        # color combinations that are readable (e.g. no red on red)
        @c =(map { "$_\n0\n" }
             6..7,9..11,13..15,40..51,75..87,113..123,147..159,171..231,249..254),
            (map { "$_\n231\n" }
             1..9,12..13,16..45,52..81,88..116,124..151,153,160..180,
             182..185,187..189,196..214,232..252,255..254);
        for(@ARGV) {
            print @c[hex(B::hash($_)) % $#c];
        }
        ' "$@"
    }
    local col=($(_colorcombos `whoami` `hostname` "`id`"))
    # (bg1,fg1)=user, (bg2,fg2)=host, (bg3,fg3)=path
    PS1='${debian_chroot:+($debian_chroot)}\[\033[48;5;'${col[0]}';38;5;'${col[1]}'m\]\u\[\033[00m\]\[\033[48;5;'${col[2]}';38;5;'${col[3]}'m\]@\h\[\033[00m\]:\[\033[48;5;'${col[4]}';38;5;'${col[5]}'m\]\w\[\033[00m\]\$ '
}

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color)
    set_color_prompt
    ;;
xterm-256color)
    set_color_prompt
    ;;
*)
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
    ;;
esac

Будет установлена ​​цветная подсказка на основе whoami, hostnameи id, поэтому цвет также будет другим, если вы войдете в систему как другой пользователь.

whoami, hostnameи idхешируются, и на основе значения хэша выбирается цветовая комбинация. Комбинации тестируются, чтобы убедиться, что они удобочитаемы.

Измените PERL_HASH_SEED=109, чтобы получить разные цвета (, например. если два важных сервера дают одинаковое значение ).

1
19.03.2021, 02:28

Теги

Похожие вопросы