вход в систему с помощью команды su в одной строке

Как мне войти в систему с помощью команды su в одной строке терминала? Я знаю, что это может сделать команда sudo :

echo [password] | sudo -S [command]

Но когда я пытаюсь подразумевать это в команде su :

echo [password] | su [username]

, я получаю ошибку en:

стандартно в должно быть tty

У меня нет доступа к учетной записи sudo (поэтому я не могу получить доступ к файлу sudoers и отредактировать его).

Я знаю, что в основном правильный синтаксис:

su [имя пользователя]

Я хочу добавить команду su к псевдонимам без необходимости вводить пароль каждый раз

0
07.07.2016, 10:45
3 ответа

Синтаксис выглядит так: su [имя пользователя] . Нажмите ввод, и теперь он запросит пароль для пользователя [имя пользователя]

0
28.01.2020, 04:50

Правильный ответ:
ЭТО ОПАСНО! НЕ ДЕЛАЙТЕ ЭТОГО ! ЭТО ПОЛНОСТЬЮ НАРУШАЕТ ВАШУ БЕЗОПАСНОСТЬ!!!

Но...
Если вас не волнует безопасность, вы можете сделать это так:

  • Создать файл main.cс содержимым:
#include <stdlib.h>
#include <unistd.h>

int main() {
  setuid(0);
  system("/bin/bash"); //you can replace bash by another shell if wanted
  return 0;
}
  • Скомпилируйте этот код и преобразуйте его в оболочку suid с помощью:
gcc main.c -o mysuidshell
sudo chown root mysuidshell && sudo chmod u+s mysuidshell

Теперь вы можете создать псевдоним, который вы упомянули в комментарии к ответу LXGA:

alias switch="/path/to/mysuidshell".

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

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

Но вы будете в основном повторно -изобретать колесо(suи sudo), но менее безопасно.

0
20.07.2020, 22:10

Это именно то, для чего был разработан Expect. Первоначально он был написан для Tcl/Tk, но я не очень в курсе этого языка, так что вот он на Python:

#!/usr/bin/python3
import os,sys,pexpect

child = pexpect.spawn("sudo head /etc/shadow")

# Give it a list of expected responses (only one here)    
Result = child.expect([" password for"])

# Did we find the zeroth answer in our list?
if Result==0:
    # Yes, then send the password
    child.sendline('<your password>')
    # Output its response
    print(child.read())
else:
    print("Didn't get expected response")

Вам придется отредактировать его в соответствии с вашими целями, надеюсь, этого достаточно для начала.

0
21.07.2020, 10:47

Теги

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