Go Back   Armenian Knowledge Base > Technical sections > Operating Systems > Unix

Reply
 
Thread Tools

SSH с ограниченным набором команд
Old 05.12.2006, 10:19   #1
Guru Apprentice
 
Join Date: 02 2002
Location: /dev/null
Age: 47
Posts: 524
Rep Power: 0
Default SSH с ограниченным набором команд

Коллеги, возник такой вопрос: потребовали от меня создать CVS repositories для студентов (так чтобы каждый руководитель вместе со своими студентами решали какие репозотории создавать и что там хранить). Давать всем этим студентам полный SSH доступ к серверу не хочется, среди них попадаются "особо умные", которые ну точно постараются намудрить чего-нибудь нестандартного.

Теперь собственно вопрос: можно ли и как настроить сервер чтобы он а) в принципе пускал бы этих юзеров по ССШ, но б) позволял только выполнять команду cvs и ничего другого.

В сети нашел вариант подменить их shell на скрипт, который проверяет если выполняется cvs - то пустить, если нет - но послать, но хочется узнать мнение массы.

Old 05.12.2006, 13:23   #2
Младенец
 
Aramo's Avatar
 
Join Date: 09 2006
Location: Yerevan
Age: 42
Posts: 16
Rep Power: 0
Default

Pochemu bi ne soedenitsia s serverom priamo iz workstation-ov?
TortoiseCVS, WinCVS.

Old 05.12.2006, 16:47   #3
4294967296
 
Boyov's Avatar
 
Join Date: 03 2002
Location: /proc/1
Age: 39
Posts: 379
Rep Power: 0
Default

Как вариант можно синсталлировать CVS в отдельную директорию, сделать PATH=$CVS_INSTALL_DIR/bin и использовать rbash (man bash).

Old 05.12.2006, 16:50   #4
Guru Apprentice
 
Join Date: 02 2002
Location: /dev/null
Age: 47
Posts: 524
Rep Power: 0
Default

Quote:
Originally Posted by Aramo View Post
Pochemu bi ne soedenitsia s serverom priamo iz workstation-ov?
TortoiseCVS, WinCVS.
Чтобы соединиться с сервером из workstation-а у юзера должен быть ssh account на сервере... Если юзер умный - он может и каким-нибудь putty залезть на тот-же сервер. Использовать cvs-овский pserver не катит так как он пароли не кодирует...

Old 05.12.2006, 16:56   #5
Guru Apprentice
 
Join Date: 02 2002
Location: /dev/null
Age: 47
Posts: 524
Rep Power: 0
Default

Quote:
Originally Posted by Boyov View Post
Как вариант можно синсталлировать CVS в отдельную директорию, сделать PATH=$CVS_INSTALL_DIR/bin и использовать rbash (man bash).
и chroot их туда? по моему с chroot надо много чего внутрь этой директории пихать, или линки содавать. например что случается с /home директорией юзера?

вопрос по rbash - а он позволяет ограничивать набор разрешенных команд? (сеогндя уже RTFM не получится, других дел навалилось).

Old 05.12.2006, 17:08   #6
4294967296
 
Boyov's Avatar
 
Join Date: 03 2002
Location: /proc/1
Age: 39
Posts: 379
Rep Power: 0
Default

Quote:
Originally Posted by Ektich View Post
и chroot их туда? по моему с chroot надо много чего внутрь этой директории пихать, или линки содавать. например что случается с /home директорией юзера?

вопрос по rbash - а он позволяет ограничивать набор разрешенных команд? (сеогндя уже RTFM не получится, других дел навалилось).
rbash не позволяет менять $PATH, делать cd итд. Т.е. в принципе можно залить все нужные команды в одну директорию, и сделать PATH=/allowed/bin LD_LIBRARY_PATH=/allowed/lib а в /etc/passwd поставить /bin/rbash. Я так понял что можно вполне обойтись без chroot - a.

вот кусок из 'man bash'

RESTRICTED SHELL

... It behaves identically to bash with the exception that the following are disallowed or not performed:

* changing directories with cd
* setting or unsetting the values of SHELL, PATH, ENV, or BASH_ENV
* specifying command names containing /
* specifying a file name containing a / as an argument to the . builtin command
* specifying a filename containing a slash as an argument to the -p option to the hash builtin command
* importing function definitions from the shell environment at startup
* parsing the value of SHELLOPTS from the shell environment at startup
* redirecting output using the >, >|, <>, >&, &>, and >> redirection operators
* using the exec builtin command to replace the shell with another command
* adding or deleting builtin commands with the -f and -d options to the enable builtin command
__________________
Free your mind and your OS will follow

Old 05.12.2006, 18:00   #7
Guru Apprentice
 
Join Date: 02 2002
Location: /dev/null
Age: 47
Posts: 524
Rep Power: 0
Default

Quote:
Originally Posted by Boyov View Post
rbash не позволяет менять $PATH, делать cd итд. Т.е. в принципе можно залить все нужные команды в одну директорию, и сделать PATH=/allowed/bin LD_LIBRARY_PATH=/allowed/lib а в /etc/passwd поставить /bin/rbash. Я так понял что можно вполне обойтись без chroot - a.

вот кусок из 'man bash'

RESTRICTED SHELL

... It behaves identically to bash with the exception that the following are disallowed or not performed:

* changing directories with cd
* setting or unsetting the values of SHELL, PATH, ENV, or BASH_ENV
* specifying command names containing /
* specifying a file name containing a / as an argument to the . builtin command
* specifying a filename containing a slash as an argument to the -p option to the hash builtin command
* importing function definitions from the shell environment at startup
* parsing the value of SHELLOPTS from the shell environment at startup
* redirecting output using the >, >|, <>, >&, &>, and >> redirection operators
* using the exec builtin command to replace the shell with another command
* adding or deleting builtin commands with the -f and -d options to the enable builtin command

А, да, спасибо, похоже на то, что нужно...
Хотя есть у меня идея при которой не надо трогать /etc/passwd.
сервер получает инфо о юзерах не из /etc/passwd а с центрального LDAP-a. Подменять bash в LDAP нельзя, юзеров в лабах в юникс не пустит, а дергать локальный /etc/passwd каждый раз когда создаются/стираются юзера в LDAP-e - точно разсинхронизируемся очень быстро.

Завтра проверю, если получится - доложу здесь!

Old 06.12.2006, 11:51   #8
4294967296
 
Boyov's Avatar
 
Join Date: 03 2002
Location: /proc/1
Age: 39
Posts: 379
Rep Power: 0
Default

Quote:
Originally Posted by Ektich View Post
А, да, спасибо, похоже на то, что нужно...
Хотя есть у меня идея при которой не надо трогать /etc/passwd.
сервер получает инфо о юзерах не из /etc/passwd а с центрального LDAP-a. Подменять bash в LDAP нельзя, юзеров в лабах в юникс не пустит, а дергать локальный /etc/passwd каждый раз когда создаются/стираются юзера в LDAP-e - точно разсинхронизируемся очень быстро.

Завтра проверю, если получится - доложу здесь!
Насчет LDAP-а, а может стоит поставить PAM, включить модуль который делает authentication через LDAP и забыть об /etc/passwd ?

Old 06.12.2006, 14:58   #9
4294967296
 
Boyov's Avatar
 
Join Date: 03 2002
Location: /proc/1
Age: 39
Posts: 379
Rep Power: 0
Default

Quote:
Originally Posted by Boyov View Post
Насчет LDAP-а, а может стоит поставить PAM, включить модуль который делает authentication через LDAP и забыть об /etc/passwd ?
Я предыдущий пост невнимательно прочел, т.е. то что я предлагаю явно в этом случае (когда нельзя менять shell в LDAP) непокатит.

Может сделать slave LDAP сервер (специально для CVS машины), который будет синхронизироватся с центральным, но будет имет rbash к качестве shell-a ?

Old 06.12.2006, 16:21   #10
Guru Apprentice
 
Join Date: 02 2002
Location: /dev/null
Age: 47
Posts: 524
Rep Power: 0
Default

Quote:
Originally Posted by Boyov View Post
Я предыдущий пост невнимательно прочел, т.е. то что я предлагаю явно в этом случае (когда нельзя менять shell в LDAP) непокатит.

Может сделать slave LDAP сервер (специально для CVS машины), который будет синхронизироватся с центральным, но будет имет rbash к качестве shell-a ?
Про PAM - у меня как раз так и работает все. А /etc/passwd используется если надо перехитрить LDAP, например имя пользователя поменять или как раз shell. На паре серверов shell как раз так и подменяется на scp-only (на эти сервера юзера только sftp делают).

Про slave LDAP - можно в основном LDAP -е на дереве сделать ветку, в которой будут сидеть юзера с подмененным shell-ом, и PAM на CVS сервере настроить так чтобы он только на эту ветку смотрел. Но опять же надо следить за их синхронизацией...

Все это пока - запасные варианты, я пока все никак свой основной не проверю

Old 07.12.2006, 09:06   #11
dardanian
 
aeneas's Avatar
 
Join Date: 11 2005
Location: new troy
Posts: 175
Rep Power: 0
Default

Ektich, arecir?

Solution
Old 07.12.2006, 12:59   #12
Guru Apprentice
 
Join Date: 02 2002
Location: /dev/null
Age: 47
Posts: 524
Rep Power: 0
Default Solution

Так как я хотел сделать - не получилось.
Основная загвоздка - версия sshd не самая последняя, и не поддерживает функциональностей последней версии. Компилировать новый sshd (от OpenSSH) и ставить его на сервер не хочется, я все таки предпочитаю инсталлировать на Дебиане то что уже под него скомпилировано. Думаю на FreeBSD все получилось бы как я задумывал. Но все равно в двух словах обьясню: в доках OpenSSH 4.5 сказано что в конфигурационном файле sshd.conf можно задать какую команду насильно выполнять для юзера когда он логинится (директива ForceCommand). В той же документации написано что в конфигурационном файле можно использовать директиву Match чтобы переопределить некоторые директивы для тех кто попадает под критерий этого Match (например для группы юзеров, или для всех кто приходит с одного домейна, или для конкретного юзера).
Идея была: для конкретного юзера посатвить ForceCommand некий скрипт, который проверяет если юзер пытается делать cvs - то пустить, если юзер пытается делать что-то другое - то не пустить. Таким образом а) юзеру shell никогда не открывается и b) только некоторые ограниченные команды доступны юзеру. Минусы - надо очень аккуратно писать этот самый скрипт чтобы юзер не сумел "вывалиться" в shell передавая "хитрые" символы в команде которую он пытается выполнить. (команда юзера передается через переменную SSH_ORIGINAL_COMMAND, так что все очень легко).

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

Реально что я реализовал: я нашел shell под названием rssh http://www.pizzashack.org/rssh/
этот shell позвояет ограничить юзеров выплонением одной (или всех, или любой комбинации) из комманд cvs, scp, rsync, rdist (и кажется sftp).

Все юзера у меня в LDAP-е. NSS натроен искать юзеров сначала в локальных файлах, потом в LDAP-e, PAM настроен проверять пароли точно так же. В LDAP-е у юзеров стоит нормальный shell (кому какой нравится). В локальном /etc/passwd создается запись для юзера с идентичными uid, gid, username, но с rssh вместо шелла (само собой :x: вместо пароля). В /etc/shadow ничего про этого юзера не создается. Проблема рассинхронизации остается, буду писать аккуратные скрипты создания/удаления юзеров.

Когда юзер логинится, NSS находит запись в локальном /etc/passwd про юзера, и в LDAP больше не лезит, а посему юзер получает rssh как shell. Пароль по /etc/shadow не проверяется, PAM лезет в LDAP, юзер впускается в систему. Если юзер пытается сделать что-то что ему длеать запрещено - создается лог файл и юзер выкидывается. После того как команда отработала - юзер выкидывается. При попытке сделать ssh без команды и попасть в shell - юзер выкидывается. ТortoiseCVS радостно работает в этом раскладе.

Буду ждать когда OpenSSH 4.5 попадет в Дебиан.
__________________
\/\/h47'5 1n 4 n4m3? 7h47 wh1(h w3 (4|| 4 r053,
8y 4ny 07h3r n4m3 w0u|d 5m3|| 45 5w337...

Old 07.12.2006, 16:06   #13
dardanian
 
aeneas's Avatar
 
Join Date: 11 2005
Location: new troy
Posts: 175
Rep Power: 0
Default

...isk
ssh -l usanoghlogin qoserver /bin/bash -i
dzevov miacogh usanoghneri hamar inch a anum qo server-@?

Old 11.12.2006, 14:13   #14
пАдонки идутЪ
 
ajboy's Avatar
 
Join Date: 12 2004
Location: бАбруйляндскайа аФФтаномнайа губернийа
Age: 41
Posts: 111
Rep Power: 0
Default

http://www.securityfocus.com/infocus/1575
а если почитать малость?

Old 11.12.2006, 22:16   #15
hex
Кросаффчег!
 
hex's Avatar
 
Join Date: 09 2006
Location: йа здесь
Age: 43
Posts: 1,335
Rep Power: 0
Default

поставь sudo попиши что какому юзеру что мона делать и запрети все остальное
Reply




Реклама:
реклама

All times are GMT. The time now is 14:07.
Top

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.