Можно ли игнорировать пользовательскую оболочку в команде «su»?

9

Если я сделаю

su - -c 'mkdir bin' user1

тогда я получаю

su: /usr/bin/ksh: No such file or directory

потому что пользовательская оболочка установлена kshв /etc/passwdи kshне установлена.

Вопрос

Как я могу выполнять команды как пользователь в таком случае?

Sandra
источник
Почему оболочка пользователя настроена на то, чего не существует?
MDMarra
1
/etc/passwdисходит из шек.
Сандра
1
Ну, это объясняет это.
MDMarra

Ответы:

18

Если вы не поставите -после, suто он не будет загружать среду этого пользователя, но команды все равно будут выполняться от имени этого пользователя.


Похоже, я неправильно понял вашу настоящую проблему. Как уже говорили другие, -sэто вариант, который вы, вероятно, на самом деле хотите.

MDMarra
источник
Он по-прежнему будет пытаться использовать оболочку, которая находится в / etc / passwd, что кажется более серьезной проблемой.
Freiheit
Оболочка помещает свой собственный идентификатор в переменную окружения $ SHELL, но / etc / passwd - это место, где su ищет, какую оболочку запустить. `-` передается вызову оболочки, говорящему, что он действует как оболочка входа в систему (bash запускает файл профиля вместо файла bashrc, меняет рабочий каталог и т. д.)
freiheit
8

Ты можешь использовать:

su -s /bin/sh -c 'mkdir bin' user1

-sВариант Су определяет оболочку для использования, отвергая все , что находится в / и т.д. / пароль.

Я удалил команду -из вашей команды, потому что, помимо загрузки профиля, он, вероятно, изменит рабочий каталог на домашний каталог пользователя для команды, поэтому вы будете создавать 'bin' в домашнем каталоге user1, а не в своем текущем каталог.

Freiheit
источник
5

Я считаю, что опция -s / - shell для su позволяет вам выбрать оболочку для использования, сохраняя при этом другие части пользовательской среды, / bin / sh определяется posix, поэтому должен быть доступен везде.

Роман А. Тайчер
источник