Shell знает, работает ли minecraft или нет

Я уверен, что есть много решений для этого, и многие более надежные, чем тот, который я предлагаю. Однако этого может быть достаточно для ваших нужд. Чтобы сделать это, я предполагаю, что пользователь может выполнить проверку подлинности на основе ssh (putty или любой unix ssh должен поддерживать это).

Добавить пользователя, как обычно ('adduser' или любой другой инструмент) Создайте пользователей .ssh dir и .ssh / authorized_keys
your_user $ sudo -Hu ssh_forwarder /bin/bash

ssh_forwarder $ cd ~
ssh_forwarder $ mkdir .ssh
ssh_forwarder $ ( umask 066 && cat > .ssh/authorized_keys ) <<EOF
no-agent-forwarding,no-X11-forwarding,command="read a; exit" ssh-rsa AAAB3NzaC1y....2cD/VN3NtHw== smoser@brickies
EOF
Добавьте пользователя, как обычно («adduser» или любой другой инструмент) [ ! d6]
your_user $ sudo usermod --lock ssh_forwarder

Теперь единственный способ, которым пользователь может попасть в вашу систему, - это доступ к правильному ssh-ключу, и ssh будет запускать «/ bin / bash -c» читать «» для них, нет что они пытаются запустить. «read a» будет просто читать до новой строки, а затем оболочка выйдет, поэтому пользователю просто нужно нажать «enter», чтобы убить соединение.

Есть много других вещей, которые вы могли бы сделать в 'команда ='. См. [F6] и найдите команду «command» для получения дополнительной информации.

Если вам не нравится тот факт, что попадание в игру убивает соединение, вы можете использовать для записи «command =» что-то вроде следующего:

command="f=./.fifo.$$ && mkfifo $f && trap \"rm -f $f\" EXIT && read a <$f && echo $a; exit;"

Это просто создает временный fifo в домашнем каталоге пользователей, а затем пытается прочитать его. Ничто не будет писать в этот файл, так что это будет длиться бесконечно. Кроме того, если вы хотите принудительно прекратить это соединение, вы можете сделать что-то вроде:

 your_user$ echo GOODBYE | sudo tee ~ssh_forwarder/.fifo.*

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

sleep 1h; echo You have been here too long. Good bye.

Я не видел, как вы можете позволить удаленному пользователю (ssh -R), но ограничить (ssh -L). Возможно, можно использовать «разрешительный аппарат». Гуглинг не очень помог. Казалось бы, что-то вроде «no-port-forwarding, allowremoteopen = 10001» было бы полезно, чтобы разрешить ssh -R 6901:localhost:6901.

Это решение. Он может быть определенно улучшен, и любое открытие удаленных портов должно быть тщательно изучено. Если бы моя цель состояла в том, чтобы позволить моей бабушке подключиться к моей локальной сети, чтобы я мог использовать vnc для просмотра ее экрана, и доступ к этим ключам был ограничен ею, я лично чувствовал бы себя достаточно безопасным. Если это было для предприятия, потребуется более тщательное расследование. Одна вещь, о которой нужно знать, - ssh -N, вообще не запрашивает оболочку, поэтому код «command =» не выполняется.

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

0
задан 5 May 2017 в 21:08

6 ответов

Во-первых, когда выполняется minecraft, запустите

pgrep -a java

Теперь найдите что-то уникальное, возможно, это просто minecraft.

Вы получите свой pid, запустив [!d2 ]

pgrep -f minecraft
1
ответ дан 22 May 2018 в 22:53
  • 1
    это делает трюк pgrep -f minecraft, и это обманчиво просто. если отлично работает как условие для оператора if без какой-либо корректировки. – tatsu 6 May 2017 в 01:40
  • 2
    Счастлив, я мог бы помочь. – davidbaumann 7 May 2017 в 19:40

Во-первых, когда выполняется minecraft, запустите

pgrep -a java

Теперь найдите что-то уникальное, возможно, это просто minecraft.

Вы получите свой pid, запустив

pgrep -f minecraft
1
ответ дан 18 July 2018 в 13:45

Во-первых, когда выполняется minecraft, запустите

pgrep -a java

Теперь найдите что-то уникальное, возможно, это просто minecraft.

Вы получите свой pid, запустив

pgrep -f minecraft
1
ответ дан 24 July 2018 в 20:15

На самом деле лучший способ сделать это - записать PID в файл при запуске через скрипт оболочки. Затем вы можете отправить сигнал 0 на pid, чтобы увидеть, работает ли он в настоящий момент.

kill -0 $(cat /run/minecraft.pid)

Это вернет 0, если он запущен, & lt; 0, если это не так. [ ! d2]

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

0
ответ дан 22 May 2018 в 22:53

На самом деле лучший способ сделать это - записать PID в файл при запуске через скрипт оболочки. Затем вы можете отправить сигнал 0 на pid, чтобы увидеть, работает ли он в настоящий момент.

kill -0 $(cat /run/minecraft.pid)

Это вернет 0, если он запущен, & lt; 0, если это не так. [ ! d2]

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

0
ответ дан 18 July 2018 в 13:45

На самом деле лучший способ сделать это - записать PID в файл при запуске через скрипт оболочки. Затем вы можете отправить сигнал 0 на pid, чтобы увидеть, работает ли он в настоящий момент.

kill -0 $(cat /run/minecraft.pid)

Это вернет 0, если он запущен, & lt; 0, если это не так. [ ! d2]

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

0
ответ дан 24 July 2018 в 20:15

Другие вопросы по тегам:

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