Как я могу заблокировать пользователя SSH и / или telnet, чтобы он запускал только настраиваемую оболочку и никаких других команд или программ?

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

Я ищу создать прототип веб-сервиса, не сталкиваясь с HTTP и другими проблемами, связанными с сетью, чтобы пользователи могли входить в систему и использовать простую программу, которая взаимодействует только через stdin и stdout.

После некоторых исследований я понял, что это и есть «оболочка». делает (т.е. он обеспечивает взаимодействие пользователя с системой через stdin и stdout), поэтому я решил, что, создав конкретного пользователя и установив его оболочку для моей программы, я могу легко создать прототип этого типа «веб-сервиса», даже потенциально позволяя многим пользователям разных пользователей для аутентификации внутри самой программы, и все используют одного и того же пользователя ssh.

Мой вопрос заключается в том, устанавливаю ли пользовательскую оболочку для моей пользовательской программы, а не вызываю какие-либо другие сценарии или программы из этой программы, этого достаточно для ограничить доступ к системе, так что • пользователи не могли напрямую читать или писать файлы, например?

Чтобы поэкспериментировать с этим, я написал специальную «оболочку», которая считывает целое число n из стандартного ввода и выводит n-е число Фибоначчи. После установки этого в качестве оболочки пользователя кажется, что sftp и запуск пользовательских команд через ssh не работают, но я недостаточно знаю о ssh или telnet, чтобы быть уверенным, что у пользователей нет другого способа расширить доступ к системе. .

В качестве примера, вот моя специальная программа «оболочки Фибоначчи»:


#include <stdio.h>

long fibonacci(int n){
   long a = 0;
   long b = 1;
   for(int i=0; i<n; ++i){
       if(i%2) a += b;
       else    b += a; 
       if(a<0 || b<0) return -1;
   }
   return (long[]){a, b}[n%2];
}

int main(int argc, char * argv[]){
   char line[1024];

   int x;
   printf("Welcome to the fibonacci shell.\n");
   printf("Type an integer n, and I will tell you the nth fibonacci number.\n");
   while(1){
       printf("> ");
       if(fgets(line, sizeof line, stdin) <= 0) break;
       int result = sscanf(line, "%d", &x);
       if(result <= 0){
           printf("fibshell: Please type a number.\n"); }
       else{
           printf("fib(%d) = %ld\n", x, fibonacci(x)); }
   }

   return 0;
}

Из-за других проблем безопасности я не буду писать свой прототип на c, но я надеялся получить некоторое представление об этом.

] Я провел некоторое исследование настройки ssh "ForceCommand", но здесь это не кажется уместным, поскольку кажется, что он вызывает команду, используя оболочку, настроенную пользователем.

Устанавливает оболочку пользователя на простую программу, которая не выполняет Не вызывать другие команды, достаточные для ограничения доступа к другим средствам, таким как sftp и т. д.? Можно ли даже безопасно сделать это в масштабе, скажем, сотнях или тысячах пользователей, с 5-10 одновременным доступом пользователей к этой программе с одним и тем же логином ssh?

Я знаю, что услуги telnet не очень хороши. обычное дело, но я видел их в паре разных контекстов. Я нашел онлайн-службу Telnet для игры в шахматы, а производственная компания, в которой я работал, некоторое время использовала службу Telnet для внутренних отчетов о состоянии заказа. Как обычно пишутся «службы telnet» или «службы ssh»? Пишет ли пользовательскую оболочку для пользователя или ограничивает иным образом права пользователя и доступ к системе, обычно как это делается?

Изменить: я должен упомянуть, что использую систему Linux, в данном случае manjaro (т.е. арку), но Я хотел бы знать в общих чертах для систем openssh и unix, есть ли способы обойти настройки оболочки пользователя и напрямую запустить другие команды или программы.

0
задан 24 November 2020 в 17:38
1 ответ

Мне кажется, что если вы используете chsh для установки оболочки пользователя в вашу программу, а затем добавляете say

Match User name
ForceCommand .

в sshd_config, вам должно быть сделано. Когда пользователь входит в систему, какую бы команду он ни попросил запустить, он будет вынужден запустить program -c . .

0
ответ дан 26 November 2020 в 01:22

Теги

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