Теперь, прежде всего, -
означает, что вы хотите использовать оболочку для входа. Первое утверждение означает, что вы хотите, чтобы корень (следовательно, sudo
) хотел, чтобы он отображался, когда вы вошли в систему как john
. Где-то он настроен на то, что пользователь, с которым вы в настоящий момент зарегистрирован, имеет права делать sudo без использования пароля.
Что происходит в первую очередь в том, что вы выполняете одну команду su - john
(что означает «войти меня в качестве john
), и вы делаете это как корень (так как вы положили sudo
первый). Ваш текущий пользователь имеет Sudo-без пароля -rights и root имеют право стать любым пользователем.
Вторая попытка неправильная. Вы не можете использовать su
для выполнения команды таким образом, и если вы хотите, чтобы su выполнял одну команду, я вижу нет причины сделать это оболочкой для входа.
В третьем варианте вы (как в настоящее время вошедший пользователь) хотите «стать» john
для одной команды, вам понадобится пароль john
. (Когда вы сделаете это, как root
, однако, вам не нужен пароль.)
Чтобы заставить его работать, вероятно, можно попробовать
sudo su --command="/usr/share/script_to_run.pl" john
или, возможно, даже более экзотические глядя
sudo sudo -u john /usr/share/script_to_run.pl
Проверьте содержимое файла/etc/sudoers; есть, вероятно, запись, читающая что-то вроде: 'user NOPASSWD: su - john', что означает, что вы можете выдать команду, но не можете использовать параметры. Это больше вопрос суперпользователя, хотя – Petesh