Весь DHCP базировался, MAC, базирующиеся, и основанные на IP решения для управления доступом могут быть легко побеждены путем спуфинга их и следовательно наименее эффективные.
Создание VLAN является дешевым методом для ограничения доступа к сети. Это имеет свои собственные ограничения и слабые места.
802.1x аутентификация является основанным на переключателе методом управления портами и будет работать на небольшие организации большую часть времени. Это однако перестало бы работать в случаях, где человек начинает использовать, говорят, что порт коммутатора принтера, который обычно оставляют открытым.
В последние несколько лет новый вид устройств/устройств/решений вышел на рынок, которые реализуют NAC (Управление доступом к сети), и некоторые из них действительно используют 802.1x. Эти устройства/решения требуют, чтобы пользователь прошел проверку подлинности, и также ограничивает доступ пользователей только к ресурсам, которые требуются, чтобы делать их ежедневное задание. Принтер не сказал бы, получают доступ SSH к серверу. Поэтому порт принтера имеет меньше ценности для пользователя теперь.
Не предоставляйте пользователю веб-сервера sudo доступ, Вы просто напрашиваетесь на неприятности. Изучите бит setuid вместо этого:
chmod u+s some_file_that_needs_executing_as_another_user.pl
Каждый раз, когда тот файл выполняется, он будет эффективно выполняться пользователем, который создал его.
На ноте стороны я вполне уверен, Вы не можете передать пароль по каналу в sudo или passwd.
Во-первых, я не понимаю, что sudo управляют, чтобы Вы работали. sudo -u username
как предполагается, позволяет Вам, как пользователь один, к sudo команда как пользователь два, путем высказывания (как пользователь один, в этом примере, выполняет команду ls):
sudo -u usertwo ls
Я приношу извинения, попытались ли Вы санировать свои команды выше путем замены username
для реального имени пользователя, но я не могу быть уверен, что Вы сделали, таким образом, я должен поднять этот вопрос сначала.
Во-вторых, sudo должен быть настроен, чтобы позволить пользователю выполнить диапазон команд как другой пользователь. Давайте запустимся путем разрешения www-данных sudo команда ls, поскольку пользователь бездельничает; Вы могли протестировать это путем помещения
www-data ALL = (fribble) NOPASSWD: ls
в Вашем sudoers файле (заменяющий реальным пользователем, как бездельничают). Затем попытайтесь делать, скажем, ls -la /tmp
из Вашего Сценария PHP и видят, получаете ли Вы список каталогов.
Я соглашаюсь с James Lawrie, что это не хорошая идея позволить www-пользователю-данных sudo произвольным командам, как произвольные пользователи, passwordlessly, но если Вы разъясняете то, что управляет, чтобы Вы попытались заставить www-данные работать, это может быть разумным способом сделать это.
Править:
Вы попробовали ls в sudoers файле и sudo -u user2 ls -al /tmp
в Сценарии PHP, и Вы получаете список каталогов, который убедительно предполагает, что sudo хорошо работает с PHP.
Безусловно, могли Вы позволять /bin/touch
в sudoers файле, помещенном sudo -u user2 touch /tmp/TESTFILE
в Сценарии PHP затем выполните это? Если файл /tmp/TESTFILE
кажется, принадлежавшим user2, мы можем быть уверены, что sudo и PHP хорошо работают togther.
Я должен признаться, что, если я знал, что Вы пробовали к sudo Java, я никогда не буду отвечать на исходный вопрос, потому что я думаю, что Java является гигантским непредсказуемым мешком дерьма, которое ведет себя как полный ребенок, если это не получает среду, это требует (и sudo справедливо строго санирует среду). Но по крайней мере тест выше должен помочь Вам быть уверенным, что, независимо от того, что проблема здесь, это не проблема с PHP и sudo, не играя приятно вместе.
Если Вы хотите дать специальные полномочия процессу веб-сервера, работающему как www-пользователь-данных, можно выполнить одно из следующих действий:
1-Добавляют www-данные к sudoers файлу, так, чтобы это могло выполнить необходимую команду/сценарий, не прося пароль.
2-Включают suexec апачский модуль. Это позволяет Вам изменить пользователя от www-данных до некоторого другого привилегированного пользователя на хост virutal. Так, Вы не должны изменять пользователя для целого сервера.