Bash 所有监狱里都有谁
寻找一个脚本什么将显示所有登录用户按他们登录的FreeBSD监狱排序。因此,需要在所有当前运行的FreeBSD监狱和主主机中运行Bash 所有监狱里都有谁,bash,freebsd,jail,Bash,Freebsd,Jail,寻找一个脚本什么将显示所有登录用户按他们登录的FreeBSD监狱排序。因此,需要在所有当前运行的FreeBSD监狱和主主机中运行who命令 我要这样做: 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很痛苦 这里还有其他简单的方法吗?FreeBS
who
命令
我要这样做:
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很痛苦
这里还有其他简单的方法吗?FreeBSD中的
who
命令知道一个文件
参数,从该参数读取有关登录用户的信息,默认值为/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:.*::' )
步骤:
- 显示所有正在运行的jail的“根文件系统”路径
- 为给定监狱的
运行who/var/run/utx.active
- 跳过jls中的标题行,-因此第一个输出将是主机
ps
输出或类似的方式
注释:您通常不想使用类似于
command |的构造,而读取
-管道分叉新的shell,并且您丢失了在循环内部设置的变量值,done<您可以在系统中启用sudo,只需稍微更改脚本即可:
sudo jexec$jid who
然后,您的srcipt可以作为普通用户运行
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