Интересная проблема, которая я думал бы, собирается укусить Вас в конце.
Можно сделать сценарий, который сделает следующее:
rm /tmp/hw_snapshot
touch /tmp/hw_snapshot
cat /proc/cpuinfo | grep >> /tmp/hw_snapshot
dmidecode | grep >> /tmp/hw_snapshot
lspci | grep >> /tmp/hw_snapshot
md5sum /tmp/hw_snapshot > /tmp/key
Нет у Вас есть уникальный идентификатор для Вашей аппаратной конфигурации. Проблема - то, что даже в том же модельном ряде аппаратные средства могут значительно различаться включая центральные процессоры, Сетевые платы, Количество Сетевых плат, и т.д. Так в основном, если кто-то имеет модель HP DL380 и затем добирается, другой с дополнительной сетевой платой добавил, что Ваш уникальный ключ больше не действителен.
Плюс я все еще не понимаю цели аппаратного ограничения основы на коммуникацию. Если Вы хотите управлять тем, что говорит с Вашей машиной, помещает материал, который может на частной сети с нею (если Вы можете).
perl -le 'print while $_=getpwent' | sort
Даст Вам список имен пользователей.
ps -eo user= | sort -u
Даст Вам список имен пользователей, соответствующие uids которых являются эффективными идентификаторами пользователей по крайней мере одного выполнения процесса.
who | awk '{print $1}' | sort -u
Перечислит пользователей, в настоящее время входил в систему
printf '%s\n' "$@" | sort -u
Перечислит пользователей, переданных как аргумент Вашему сценарию.
Теперь, когда у Вас есть те 4 списка, можно использовать comm
управляйте для выбора, кто из тех характерен для любых двух данных списков или появляется в одном, но не другом.
С оболочкой поддержка обрабатывает замену, можно также обойтись без создания временных файлов.
Например:
#! /bin/bash -
comm -12 <(printf '%s\n' "$@" | sort -u) \
<(ps -eo user= | sort -u)
Названный как:
./my-script root mythul stephane
сообщит, у кого из тех 3 пользователей есть рабочие процессы (предполагающий, что существуют непосредственные отношения между именем пользователя и uid в Вашей системе).