Сделать кто во всех тюрьмах

Ищем сценарий, который покажет всех зарегистрированных пользователей, отсортированных по тюрьмам FreeBSD, где они вошли в систему. Итак, нужно запустить команду who во всех запущенных в настоящее время тюрьмах FreeBSD, а также на главном хосте.

Я делаю это:

who    #main host
jls | grep -v JID | while read jid ip host path
do
    echo $jid $host
    jexec $jid who
done

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

Есть ли другой простой способ?


person novacik    schedule 07.11.2013    source источник


Ответы (2)


Команда who во FreeBSD знает аргумент file, откуда считывается информация о вошедших в систему пользователях, по умолчанию это /var/run/utx.active, и файл обычно доступен для чтения всем...

Наверное будет достаточно следующего скрипта:

#!/usr/local/bin/bash

while read  jpath
do
    echo JWHO: ${jpath:-$(hostname)}
    who "${jpath}/var/run/utx.active"
done < <( jls -h path | sed '1s:.*::' )

пример вывода:

JWHO: marvin.example.com
smith              pts/0     7 nov 20:55 (adsl2343-some-another.example.com)
JWHO: /jails/jail1
JWHO: /jails/testjail
root              pts/2     7 nov 20:55 (someother.example.com)
JWHO: /jails/dbjail

шаги:

  • показать путь к "корневой файловой системе" для всех запущенных джейлов
  • запустите who для /var/run/utx.active для данной тюрьмы
  • пропустите строку заголовка из jls, так что 1-й вывод будет хостом.

Может быть, кто-то знает гораздо более простое решение, например. путем сортировки вывода ps или что-то вроде...

Комментарии: обычно вы не хотите использовать конструкции типа command | while read - канал разветвляет новую оболочку и вы теряете значения переменных, установленных внутри цикла, done < <( commands ) обычно лучше...

person jm666    schedule 07.11.2013

Вы можете включить sudo в своей системе, немного изменив свой скрипт, чтобы:

sudo jexec $jid who

Затем ваш скрипт может работать как обычный пользователь.

person Jimmy Koerting    schedule 22.12.2013