Как мне войти в систему с помощью команды su
в одной строке терминала? Я знаю, что это может сделать команда sudo
:
echo [password] | sudo -S [command]
Но когда я пытаюсь подразумевать это в команде su
:
echo [password] | su [username]
, я получаю ошибку en:
стандартно в должно быть tty
У меня нет доступа к учетной записи sudo (поэтому я не могу получить доступ к файлу sudoers и отредактировать его).
Я знаю, что в основном правильный синтаксис:
su [имя пользователя]
Я хочу добавить команду su
к псевдонимам без необходимости вводить пароль каждый раз
Синтаксис выглядит так: su [имя пользователя]
. Нажмите ввод, и теперь он запросит пароль для пользователя [имя пользователя]
Правильный ответ:
ЭТО ОПАСНО! НЕ ДЕЛАЙТЕ ЭТОГО ! ЭТО ПОЛНОСТЬЮ НАРУШАЕТ ВАШУ БЕЗОПАСНОСТЬ!!!
Но...
Если вас не волнует безопасность, вы можете сделать это так:
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;
}
gcc main.c -o mysuidshell
sudo chown root mysuidshell && sudo chmod u+s mysuidshell
Теперь вы можете создать псевдоним, который вы упомянули в комментарии к ответу LXGA:
alias switch="/path/to/mysuidshell"
.
Хотя это по-прежнему ужасная идея с точки зрения безопасности, -у вас также есть чрезвычайно маленькое преимущество, заключающееся в том, что ваш пароль нигде не виден в открытом тексте.
В зависимости от того, что вы хотите сделать, вы можете изменить код, чтобы он мог измениться для других пользователей, кроме root, запускать разные оболочки,...
Но вы будете в основном повторно -изобретать колесо(su
и sudo
), но менее безопасно.
Это именно то, для чего был разработан 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")
Вам придется отредактировать его в соответствии с вашими целями, надеюсь, этого достаточно для начала.