Ограничение разных пользователей на одном компьютере для разных подключений

3

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

Пользователь 1 будет подключаться через Ethernet через фильтрованную сеть, все остальные подключения отключены, что нормально работает.

Пользователь 2 должен подключиться к нефильтрованному Wi-Fi, но не иметь доступа ни к каким другим подключениям.

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

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

С точки зрения безопасности это не идеально, но если я смогу заставить все это работать, я бы хотел назначить соединение Wi-Fi гостевому пользователю, чтобы он мог перемещаться без фильтров. Тогда у обычного пользователя будет Ethernet, и он не сможет переключать местоположения или включать Wi-Fi.

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

Это возможно с простой OSX, или мне понадобится внешнее программное обеспечение / сценарии?

Ник
источник
Сетевая маршрутизация находится на уровне ОС и не позволяет дифференцировать пользователей. Что вы можете сделать, это заставить всех пользователей прокси-сервер через шлюз, который контролирует доступ на основе аутентификации пользователя. Но выполнение этого будет зависеть либо от определения сетевого прокси в используемом вами приложении, либо от маршрутизации всего трафика через такой шлюз. (для приложений, в которых нет положений о проксировании)
Тим Б
Да, вы можете форсировать трафик через прокси в сетевых панелях, возможно, с помощью прокси-сервера SOCKS, который я мог бы настроить для аутентификации, но на самом деле я бы предпочел иметь возможность назначать пользователям различные профили сети. Поскольку вы можете настроить запуск программ при запуске / входе в систему (даже демонах) и многие другие параметры, меня просто удивляет, что вы не можете сделать что-то подобное в сетевом бите ..
Nick
Кстати, я нашел способ (я надеюсь) с помощью loginHooks, я запускаю скрипт, который выполняет /Users/$1/network.sh ($ 1 - это короткое имя пользователя), и в контексте User1 я запускаю 'networksetup -setairportpower airport off' в I пользователя user2 запустите 'networksetup -setairportpower airport'; ifconfig en0 down 'и, надеюсь, это должно включить и отключить нужные мне порты.
Ник
Ах, вам не нужно, чтобы эти два состояния сети были одновременными. Это не было ясно в вашем вопросе. Я предполагал, что вы хотите другое поведение одновременно, хотя мое предположение зависело от удаленных / неконсольных пользователей, что может быть необычным случаем.
Тим Б
Иногда я забываю, что люди не могут читать мои мысли: P Спасибо за помощь, хотя!
Ник

Ответы:

2

Ну, я взломал его, это был не loginHooks, которые мне были нужны, а launchctl.

По сути, создайте два скрипта (исполняемый, конечно, вы можете сделать их тоже только root):

User1.sh

! / bin / bash ifconfig en0 up; ifconfig en1 down;

User2.sh

! / bin / bash ifconfig en1 up; ifconfig en0 down;

Это, конечно, предполагает, что вы используете imac, en0 - это enthernet, en1 - это WiFi.

Затем создайте файл plist (с правами суперпользователя, 644), мой был такой:

Пользователь1 зашел в /Users/user1/Library/LaunchAgents/org.user1.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>org.user1.plist</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/user1/bin/User1.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

User2 в /Users/user2/Library/LaunchAgents/org.user2.plist

 <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key>
        <string>org.user2.plist</string>
        <key>ProgramArguments</key>
        <array>
            <string>/Users/user2/bin/User2.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
    </plist>

После этого запуска

sudo launchctl load -w /Users/user1/Library/LaunchAgents/org.user1.plist

а также

sudo launchctl load -w /Users/user2/Library/LaunchAgents/org.user2.plist

как каждый пользователь.

Вот и все, это быстро, просто, и если вы устанавливаете владельца сценариев как кого-то другого (и по другому пути), это довольно безопасно (не пуленепробиваемо, но в данный момент это не входит в мои задачи).

Ник
источник
Там, где прогоны launchctlописываются как «… как каждый пользователь…», предлагаемое использование sudoэтих прогонов кажется мне странным.
Грэм Перрин