Почему псевдонимы пропускаются, если экранированы?

/bin/false поскольку оболочка входа пользователя не позволяет пользователю войти в систему обычными средствами. Вы не хотите менять это, так как это мера безопасности. Просто попросите другую оболочку при переключении на целевого пользователя:

sudo su -s /bin/bash jenkins

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

0
31.07.2020, 00:31
1 ответ

Суть в том, что оболочка выполняет замену псевдонимов (раздел 2.3.1 )перед применение правил Shell Grammar (, раздел 2.10 ). Первый шаг — Распознавание токена (, раздел 2.3 ):

.

2.3 Token Recognition
The token shall be from the current position in the input until a token is delimited according to one of the rules below; the characters forming the token are exactly those in the input, including any quoting characters.

(...Rules of delimiting tokens...)

Once a token is delimited, it is categorized as required by the grammar in Shell Grammar.

2.3.1 Alias Substitution
After a token has been delimited, but before applying the grammatical rules in Shell Grammar, a resulting word that is identified to be the command name word of a simple command shall be examined to determine whether it is an unquoted, valid alias name.

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

Затем выдача \lsили l\sозначает, что оболочка будет искать псевдоним с это точное буквальное имя, то есть \lsили l\s. Такие псевдонимы даже не возможно , поэтому расширение псевдонима не происходит и оболочка переходит к Правилам грамматики, в какой момент оба разрешаются нашему старому -другу ls, поскольку "<обратная косая черта>, которая не заключена в кавычки, сохраняет буквальное значение следующего символа ". Если переменная оболочки PATH является обычной, /bin/lsвыполняется без опции -l.

Это также объясняет "ls", 'ls', l""s, l''s,... пропустить псевдоним.

2
18.03.2021, 23:15

Теги

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