man credentials
хороший источник информации в этом случае. См. также этот questiin на ТАК. Поскольку историческое объяснение видит это заархивированное сообщение.
Вместо того, чтобы звонить "устанавливает UID" и "эффективный UID" механизм, целое понятие UIDs нужно назвать этим. Объяснение для существования различного UIDs является различными проблемами с разделением полномочия. Даже постоянные (непривилегированные) пользователи иногда должны делать вещи (ресурсы доступа), что только привилегированные пользователи могут. Для достижения этого легко программы могут изменить свой UIDs. Существует 3 типа их:
реальный UID - UID, который владеет процессом
эффективный UID - UID, который процесс в настоящее время выполняет как - это определяет фактические возможности процесса в какой-то конкретный момент. Это также что ps
шоу Вы в поле USER.
сохраненный устанавливает UID - заполнитель, используемый для переключения назад и вперед между реальным и эффективным UIDs
Потребность в последней возникает из факта, который обычные пользователи могут только переключить между этими тремя, и ничто иное и setuid программа обычно не должны знать так или иначе, кто был пользователем, который загрузился, это (плюс реальный UID не должен быть изменен, так как это создало бы еще большую путаницу).
Чтобы сервер выполнил двоичный файл ELF (как интерпретатор Python) в одном из его процессов, он должен смочь к mmap это в памяти. Это может только сделать это, если файл находится в виртуальной файловой системе и если файловая система, служащая ему, поддерживает его.
Так, необходимо или скопировать это python
исполняемый файл (и его зависимости) через к серверу в одной из смонтированных файловых систем Вы имеете доступ для записи к или монтируете файловую систему Вашей машины монетного двора на сервере по своего рода сетевой файловой системе как sshfs, nfs или cifs.
Для монтирования файловой системы Вам нужны полномочия суперпользователя, или по крайней мере некоторые из тех полномочий нужно предоставить Вам (через некоторый suid исполняемый файл как fusermount
). Администратор того сервера только допустил бы, что полномочие доверяемым пользователям, поскольку достаточно способно быть злоупотребленным и получить дальнейшее право.
Если бы Вы не можете смонтировать файловые системы, другая опция состояла бы в том, чтобы запустить программное обеспечение в эмулированной ОС как использование qemu
. Вопрос, который я задал бы сначала, хотя: почему необходимо выполнить это на сервере? Какой ресурс сервера, к которому программа должна иметь доступ? Разве Вы не могли выставить те ресурсы своей машине монетного двора и запустить программное обеспечение туда вместо этого. Необходимо было бы сделать что-то как этот также, если бы программа должна была работать на VM на сервере.
Для запуска qemu VM на сервере как копия Вас чеканят машину, предполагая, что Вы используете LVM на машине монетного двора и что существует только одна файловая система (корневая файловая система) там на /dev/mint_VG/root
, Вы могли сделать:
Возьмите снимок LVM /dev/mint_VG/root
который станет корневой файловой системой VM на сервере:
sudo lvcreate -s -L10G -n root_vm_on_server mint_VG/root
Экспортируйте его как сетевое блочное устройство:
sudo nbd-server -C /dev/null 12345 /dev/mint_VG/root_vm_on_server
передайте свое ядро и изображения initrd к серверу:
scp /boot/{vmlinux,initrd.img}-"$(uname -r)" server:
На сервере, выполненном qemu
как (возможно, в screen
или tmux
):
qemu -drive file=nbd:mint-machine:12345,if=virtio -m 4096 \
-kernel vmlinuz-xxx -initrd initrd.img-xxx \
-append 'root=/dev/vda ro init=/bin/bash' -monitor stdio -vnc :4 \
-smp 8,core=8
(здесь работающий с 8 виртуальными центральными процессорами и 4 ГБ или RAM, и как запуск, просто работающий bash
в VM).
Получите графическую консоль со средством просмотра VNC один server-machine:4
, или Вы могли использовать последовательную консоль вместо этого, если Вам не нужна графика.
Если можно убедить системного администратора на сервере позволять Вам использовать kvm
(дайте Вам доступ для записи к /dev/kvm
), это сделает это намного более эффективным.
Насколько я знаю, что это не может быть сделано без Корневого доступа :(
ОБОСНОВАНИЕ: БЕЗОПАСНОСТЬ: Каково было бы различие программы, работающей локально на сервере или другом компьютере под управлением программное обеспечение, расположенное на Вашем компьютере к серверу.
Если бы это могло бы быть сделано, это был бы ботнет.
Так как я СПУСКАЮСЬ проголосовавший: (Очень печальный, как быстро это происходит) Он желает, чтобы программа на его компьютере LinuxMint работала на сервере БЕЗ него устанавливающий программу на СЕРВЕРЕ. Как я могу запустить свои программы на моем локальном компьютере к другим серверам только с пользовательским доступом?