как выполнить оболочку на удаленном сервере с корнем priviledge

Одно возможное объяснение могло быть iptables + dnsmasq (или другой сервер имен) уведенный жулик.

  • свяжите, dnsmasq, некоторый другой сервер имен выполняют локально ответ 192.168.1.251 ко всему, что Вы спрашиваете его.
  • iptables переписывает исходящие пакеты на udp порте 53 для окончания где-нибудь локально где глупый сервер имен listens/ansers

Обоснование позади этого существа: Вы используете, роют, чтобы диагностировать и сообщить, роют с, опция перейти непосредственно в 8.8.8.8, вырыть должна теперь проигнорировать сервер (серверы) имен, перечисленный в/etc/resolv.conf. Как роют себя, реализует сопоставитель и генерирует, запрашивает себя, затем отправляет его в 8.8.8.8 и анализирует/печатает ответы, это должно устранить что-либо броское в конфигурации сопоставителя libc на поле (который в значительной степени все остальное использует).

Это предположило бы что:

  • Google неправильно сконфигурировал их серверы имен, чтобы дать Вам поддельные ответы, который маловероятен
  • что-то по пути между Вами и 8.8.8.8 прерываниями и запросами DNS перенаправлений и генерирует поддельный ответ, однако так как Ваши другие машины в той же сети с их сопоставителем указали 8.8.8.8, получает нормальные результаты, это не вероятно также
  • что-то на этом компьютере прерывает исходящие запросы DNS и направляет их в другом месте, который генерирует глупые/неправильные ответы

Так, я проверил бы, существует ли что-нибудь в ВЫХОДНОЙ цепочке туземной таблицы, перенаправляющей трафик DNS где-нибудь, это не должно идти? (iptables-t туземный-n-v-L ВЫВОД).

Можно воспроизвести это поведение с чем-то вроде:

$ dnsmasq -p 5353 -A /#/192.168.1.251
$ iptables -t nat -I OUTPUT 1 -p udp --dport 53 -j REDIRECT --to-port 5353
# All locally generated requests outbound on udp port 53 gets sent to
# dnsmasq running on port 5353 which'll answer 192.168.1.251 to pretty much
# everything
$ dig @8.8.8.8 google.co.uk

; <<>> DiG 9.7.1-P2 <<>> @8.8.8.8 google.co.uk
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9993
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.co.uk.                  IN      A

;; ANSWER SECTION:
google.co.uk.           0       IN      A       192.168.1.251

;; Query time: 0 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jan 11 01:09:01 2011
;; MSG SIZE  rcvd: 46
3
25.04.2012, 04:37
3 ответа

Около решений с sudo, это может быть благоприятно для сценария быть настроенным (никакая дополнительная подсказка пароля для определенных команд) или setuid решения, которые не легко сделать безопасный, я предлагаю использование ssh авторизации с открытым ключом с командой = ограничение.

Для этого необходимо включить вход в систему пароля меньше пользователю root, если еще не сделано (PermitRootLogin without-password в /etc/ssh/sshd_config) и добавьте Ваш (или лучше специальное предложение для этого созданного случая) ssh открытый ключ к /root/.ssh/authorized_keys с командой = аргумент любят описанный в этом ответе.

6
27.01.2020, 21:11

Вы не должны помещать свой пароль root в сценарий.

Решение A

suid Ваш сценарий на сервере, и заставляют его читать / исполняемый файл только корнем или Вашей группой пользователей.

chmod 4750 script.sh
chgrp your_group script.sh

Не забывайте присоединяться к своему пользователю в ту группу.

И Вы делаете ssh user@XXXX '/path/to/script.sh' выполнить сценарий.

Решение B

Создайте ключ SSH и скопируйте открытый ключ в удаленный сервер. Таким образом, необходимо будет войти в систему как корень, но также и пароль меньше. (Remeber для дешифрования закрытого ключа с openssl)

Очень опасно при потере закрытого ключа.

2
27.01.2020, 21:11

Решение по сохранению без пользователей root

на клиенте генерирует ssh-key

клиента: ssh-keygen

скопируйте его на сервер

: mkdir ~/.ssh

client: scp ~/.ssh/id_rsa.pub serveruser@server:~/.ssh/authorized_keys

allow sudo without password for your user

server:

visudo
    serveruser ALL=(ALL) NOPASSWD: /usr/bin/foo /usr/sbin/bar

теперь вы можете запускать такие команды как этот

клиент: ssh serveruser@server 'sudo foo && bar'

//сколько серверов, для которых требуется ssh -t ... для использования sudo

0
27.01.2020, 21:11

Теги

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