Другое голосование за OpenVPN здесь. Мы использовали его в моем предыдущем задании, и это было горное тело, и у нас было меньше проблем с ним по сравнению с PPTP и туннелями VPN IPSEC, которые мы используем в моем текущем задании. Также трудно разбить гибкость, которую предлагает OpenVPN. Но OpenVPN действительно имеет одно слабое место, по-моему. Это в настоящее время не поддерживается многими смартфонами. На самом деле я не знаю ни о ком, которые делают. Я действительно знаю, что существуют люди, пытающиеся портировать его на iPhone, но я не уверен, где тот проект.
Вы не упоминали, какие клиенты Ваше vpn решение должно было поддерживать. Таким образом с этим в памяти, если необходимо избежать сторонних клиентов или нуждаться в поддержке смартфона затем, PPTP может быть лучшим соответствием. Windows, OSX и много смартфонов у всех есть собственные клиенты PPTP. Poptop является проектом Linux, который реализует PPTP.
Ваш вопрос должен быть:
Я не доверяю своим пользователям. Немые видят что-то в Интернете и испытывают его, не понимая то, что он делает. Окольным нравится шпионить вокруг и смотреть на другие файлы народов и красть их идеи. И ленивое, не запускайте меня на ленивых.
Как я защищаю свою систему и своих пользователей от моих пользователей?
Во-первых, Unix имеет очень очень всестороннюю систему полномочий файловой системы. Это, кажется, достойное учебное руководство на полномочиях файловой системы Unix. Суть этого - то, что каталоги могут быть установлены таким образом, что пользователь может войти в каталог и может запустить программы из того каталога, но не может просмотреть содержание того каталога. Если Вы делаете это, например, на / домой, если пользователь выполняет ls на / домой, они добираются, разрешение отклонило ошибку.
Если Вы действительно боитесь своих пользователей и хотите засунуть их в супермакс. тип ограниченной среды, используйте что-то как тюрьмы freebsd или зоны solaris - каждый пользователь получает их собственную адаптацию, сделанную средой. Поскольку добавленные точки используют ZFS, таким образом, можно взять снимок среды, когда они входят в систему поэтому, если они удаляют свои файлы, можно просто вытащить их из снимка.
Ну, можно установить оболочку пользователя на программу, Вы записали, что только позволяет им выполнить определенные сценарии оболочки.
Конечно, это только было бы столь же безопасно как программа и сценарии оболочки; на практике этот вид ограниченной оболочки обычно не безопасен против умного взломщика.
Не пытайтесь ограничить команды, ограничить полномочия файла. Вы не можете практически ограничить доступ людей к syscalls, таким образом, все, что кто-то должен сделать, предоставляют их собственную копию любых "опасных" команд, которые Вы не хотите, чтобы они выполнили, и Вы наполнены.
Если Вы хотите, чтобы пользователь только смог выполнить определенные сценарии/двоичные файлы, можно использовать ограниченную оболочку. Это (поскольку статья Wikipedia упоминает) не абсолютно безопасно, но если можно гарантировать, что никакое приложение не позволило работать, может выполнить новую оболочку затем, это - хорошая альтернатива.
Для установки, пользователи ограничили оболочку, набор /bin/rbash
(или подобный, большинство оболочек переходит к ограниченному режиму, когда двоичный файл называют r *** именем*) как пользовательская оболочка. Затем редактирование **.bashrc (или эквивалентный) и набор $PATH
к каталогу, где все позволенные двоичные файлы/сценарии хранятся.
Да, это возможно, но на практике потребовалась бы большая работа и планирование. Можно создать сценарии и сделать, чтобы они работали как привилегированное использование, затем удалили все полномочия от рассматриваемого пользователя. Или, можно установить оболочку пользователя на что-то вроде собственного создания, которое позволяет им сделать только, что Вы явно позволяете.
Однако стандартные полномочия в Linux делают почти невозможным для обычного пользователя "вредить системе". Какой вред Вы пытаетесь предотвратить? Это тривиально для предотвращения пользователей от способности установить программное обеспечение или запустить программы за пределами их корневого каталога, и можно использовать chroot для блокировки вниз системы еще больше.
Можно хотеть попробовать [lshell][1] (ограниченная оболочка).
lshell является оболочкой, кодированной в Python, который позволяет Вам ограничить среду пользователя ограниченными наборами команд, принять решение позволить/запретить любую команду по SSH (например, SCP, SFTP, rsync, и т.д.), зарегистрировать команды пользователя, ограничение синхронизации реализации, и т.д.
[1]: http://lshell.ghantoos.org/Overview lshell
Чтобы полностью выполнить то, что вы просите, необходимо наличие трех вещей:
Ремень, подтяжки и скобяной пистолет для хорошей меры. Здесь сложно ошибиться.
AppArmor интересен тем, что MAC для конкретного исполняемого файла наследуется всеми его дочерними элементами. Задайте для входа пользователя значение / bin / bash-bob
, установите профиль AppArmor для этого конкретного двоичного права, и единственный способ выйти из тюрьмы разрешений - использовать эксплойты ядра. Если какой-то сценарий ленивой установки оставил / var / opt / vendor / tmp
доступным для глобальной записи по какой-то глупой причине, пользователь, использующий / bin / bash-bob
в качестве своей оболочки , выиграет Не могу писать туда . Установите профиль bash-bob, чтобы разрешить запись только в их домашний каталог и / tmp
, и такие ошибки разрешения не могут быть использованы. Даже если они каким-то образом найдут пароль root, профиль AppArmor для / bin / bash-bob
будет по-прежнему применяться даже после того, как они su
после su
и bash
процесс, который он порождает, является дочерним по отношению к / bin / bash-bob
.
Сложнее всего построить этот профиль AppArmor.
/ bin / bash-bob
будет по-прежнему применяться даже после того, как они su
с момента появления su
и процесса bash
, которые он порождает являются дочерними по отношению к / bin / bash-bob
.
Сложнее всего построить этот профиль AppArmor.
/ bin / bash-bob
будет по-прежнему применяться даже после того, как они su
с момента появления su
и процесса bash
, которые он порождает являются дочерними по отношению к / bin / bash-bob
.
Сложнее всего построить этот профиль AppArmor.
Самое сложное - это создание профиля AppArmor.
Самое сложное - это создание профиля AppArmor.
На мой взгляд, вам нужны только шаги 2 и 3, поскольку в комбинации они оба предотвращают возможность делать что-либо вредное за пределами тщательно сконструированного блока, который вы установили на обоих этих шагах.
The way I usually implement this kind of restrictions requires that several conditions are met, otherwise the restriction can be easily circumvented:
wheel
group, the only one authorized to use su
(enforced via PAM).The user is given a properly secured rbash
with a read-only PATH
pointing to a private ~/bin
, this ~/bin/
directory contains links to simple utilities:
$ ll ~/bin
total 0
lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
lrwxrwxrwx. 1 root dawud 7 Sep 17 08:58 df -> /bin/df*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
lrwxrwxrwx. 1 root dawud 8 Sep 17 08:58 env -> /bin/env*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
lrwxrwxrwx. 1 root dawud 9 Sep 17 08:58 grep -> /bin/grep*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
the user is given a restricted, read-only environment (think of stuff like LESSSECURE
, TMOUT
, HISTFILE
variables).
staff_u
and given rights to execute commands as other user as required via sudo
.the user's /home
, /tmp
and possibly /var/tmp
are polyinstantiated via /etc/security/namespace.conf
:
/tmp /tmp/.inst/tmp.inst-$USER- tmpdir:create root
/var/tmp /tmp/.inst/var-tmp.inst-$USER- tmpdir:create root
$HOME $HOME/$USER.inst/ tmpdir:create root
Also, /etc/security/namespace.init
makes all skeletal files readonly for the user and owned by root
.
This way you can choose whether $USER
can execute any command on his/her own behalf (via a link in the private ~/bin
directory, provisioned via /etc/skel
, as explained above), on behalf of other user (via sudo
) or none at all.