OXIESEC PANEL
- Current Dir:
/
/
snap
/
core20
/
2582
/
usr
/
sbin
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
04/29/2025 04:07:52 PM
rwxr-xr-x
📄
aa-remove-unknown
3 KB
03/06/2024 06:40:00 PM
rwxr-xr-x
📄
aa-status
8.63 KB
03/06/2024 06:40:00 PM
rwxr-xr-x
📄
aa-teardown
139 bytes
06/17/2019 11:55:38 PM
rwxr-xr-x
📄
add-shell
860 bytes
12/07/2019 02:13:44 AM
rwxr-xr-x
📄
addgroup
36.9 KB
04/16/2020 02:12:53 PM
rwxr-xr-x
📄
adduser
36.9 KB
04/16/2020 02:12:53 PM
rwxr-xr-x
📄
agetty
67.38 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
apparmor_parser
1.46 MB
03/06/2024 06:40:00 PM
rwxr-xr-x
📄
apparmor_status
8.63 KB
03/06/2024 06:40:00 PM
rwxr-xr-x
📄
arpd
78.27 KB
02/13/2020 05:21:59 PM
rwxr-xr-x
📄
arptables
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
arptables-nft
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
arptables-nft-restore
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
arptables-nft-save
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
arptables-restore
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
arptables-save
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
badblocks
34.32 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
blkdeactivate
14.49 KB
02/13/2020 09:21:51 PM
rwxr-xr-x
📄
blkdiscard
34.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
blkid
118.26 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
blkzone
70.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
blockdev
66.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
bridge
102.3 KB
02/13/2020 05:21:59 PM
rwxr-xr-x
📄
capsh
30.3 KB
02/20/2025 04:01:08 PM
rwxr-xr-x
📄
cfdisk
102.59 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
chcpu
46.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
chgpasswd
66.2 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
chmem
62.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
chpasswd
58.2 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
chroot
42.34 KB
09/05/2019 10:38:40 AM
rwxr-xr-x
📄
cpgr
60.34 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
cppw
60.34 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
cryptdisks_start
1.51 KB
02/04/2020 01:11:12 PM
rwxr-xr-x
📄
cryptdisks_stop
844 bytes
02/04/2020 01:11:12 PM
rwxr-xr-x
📄
cryptsetup
135.54 KB
01/29/2025 06:37:57 PM
rwxr-xr-x
📄
cryptsetup-reencrypt
105.32 KB
01/29/2025 06:37:57 PM
rwxr-xr-x
📄
ctrlaltdel
38.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
debugfs
225.8 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
delgroup
16.11 KB
04/16/2020 02:12:53 PM
rwxr-xr-x
📄
deluser
16.11 KB
04/16/2020 02:12:53 PM
rwxr-xr-x
📄
depmod
146.18 KB
07/28/2020 02:46:39 PM
rwxr-xr-x
📄
devlink
150.47 KB
02/13/2020 05:21:59 PM
rwxr-xr-x
📄
dhclient
508.98 KB
01/31/2023 10:10:35 PM
rwxr-xr-x
📄
dhclient-script
15.92 KB
01/31/2023 10:10:35 PM
rwxr-xr-x
📄
dmsetup
171.02 KB
02/13/2020 09:21:51 PM
rwxr-xr-x
📄
dmstats
171.02 KB
02/13/2020 09:21:51 PM
rwxr-xr-x
📄
dosfsck
58.08 KB
05/12/2018 10:59:39 PM
rwxr-xr-x
📄
dosfslabel
54.08 KB
05/12/2018 10:59:39 PM
rwxr-xr-x
📄
dumpe2fs
30.38 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
e2freefrag
18.38 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
e2fsck
327.21 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
e2image
42.38 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
e2label
106.55 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
e2mmpstatus
30.38 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
e2scrub
7.13 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
e2scrub_all
5.27 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
e2undo
22.38 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
e4crypt
30.38 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
e4defrag
34.3 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
ebtables
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ebtables-nft
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ebtables-nft-restore
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ebtables-nft-save
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ebtables-restore
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ebtables-save
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
faillock
14.15 KB
01/10/2024 01:55:08 PM
rwxr-xr-x
📄
fatlabel
54.08 KB
05/12/2018 10:59:39 PM
rwxr-xr-x
📄
fdformat
34.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
fdisk
150.27 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
filefrag
18.33 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
findfs
14.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
fsck
54.27 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
fsck.cramfs
38.26 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
fsck.ext2
327.21 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
fsck.ext3
327.21 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
fsck.ext4
327.21 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
fsck.fat
58.08 KB
05/12/2018 10:59:39 PM
rwxr-xr-x
📄
fsck.minix
122.25 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
fsck.msdos
58.08 KB
05/12/2018 10:59:39 PM
rwxr-xr-x
📄
fsck.vfat
58.08 KB
05/12/2018 10:59:39 PM
rwxr-xr-x
📄
fsfreeze
14.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
fstab-decode
14.3 KB
02/13/2020 06:38:21 PM
rwxr-xr-x
📄
fstrim
70.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
genl
82.29 KB
02/13/2020 05:21:59 PM
rwxr-xr-x
📄
getcap
14.3 KB
02/20/2025 04:01:08 PM
rwxr-xr-x
📄
getpcaps
14.3 KB
02/20/2025 04:01:08 PM
rwxr-xr-x
📄
getty
67.38 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
groupadd
90.95 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
groupdel
86.77 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
groupmems
62.24 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
groupmod
94.86 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
grpck
62.18 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
grpconv
58.05 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
grpunconv
58.05 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
halt
178.08 KB
03/02/2023 12:58:02 PM
rwxr-xr-x
📄
hwclock
102.35 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
iconvconfig
30.4 KB
01/29/2025 02:41:47 PM
rwxr-xr-x
📄
init
1.54 MB
03/02/2023 12:58:02 PM
rwxr-xr-x
📄
insmod
146.18 KB
07/28/2020 02:46:39 PM
rwxr-xr-x
📄
installkernel
2.58 KB
12/07/2019 02:13:44 AM
rwxr-xr-x
📄
integritysetup
60.23 KB
01/29/2025 06:37:57 PM
rwxr-xr-x
📄
invoke-rc.d
16.64 KB
06/21/2019 06:56:55 PM
rwxr-xr-x
📄
ip
545.12 KB
01/26/2021 01:33:08 PM
rwxr-xr-x
📄
ip6tables
96.97 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ip6tables-apply
6.89 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ip6tables-legacy
96.97 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ip6tables-legacy-restore
96.97 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ip6tables-legacy-save
96.97 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ip6tables-nft
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ip6tables-nft-restore
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ip6tables-nft-save
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ip6tables-restore
96.97 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ip6tables-restore-translate
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ip6tables-save
96.97 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
ip6tables-translate
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
iptables
96.97 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
iptables-apply
6.89 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
iptables-legacy
96.97 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
iptables-legacy-restore
96.97 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
iptables-legacy-save
96.97 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
iptables-nft
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
iptables-nft-restore
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
iptables-nft-save
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
iptables-restore
96.97 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
iptables-restore-translate
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
iptables-save
96.97 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
iptables-translate
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
isosize
30.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
killall5
26.38 KB
02/13/2020 06:38:21 PM
rwxr-xr-x
📄
ldattach
34.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
ldconfig
387 bytes
01/29/2025 02:41:47 PM
rwxr-xr-x
📄
ldconfig.real
1 MB
01/29/2025 02:41:47 PM
rwxr-xr-x
📄
logsave
14.16 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
losetup
110.34 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
lsmod
146.18 KB
07/28/2020 02:46:39 PM
rwxr-xr-x
📄
luksformat
3.32 KB
02/04/2020 01:11:12 PM
rwxr-xr-x
📄
mkdosfs
34.5 KB
05/12/2018 10:59:39 PM
rwxr-xr-x
📄
mke2fs
134.62 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
mkfs
14.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
mkfs.bfs
34.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
mkfs.cramfs
42.16 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
mkfs.ext2
134.62 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
mkfs.ext3
134.62 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
mkfs.ext4
134.62 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
mkfs.fat
34.5 KB
05/12/2018 10:59:39 PM
rwxr-xr-x
📄
mkfs.minix
106.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
mkfs.msdos
34.5 KB
05/12/2018 10:59:39 PM
rwxr-xr-x
📄
mkfs.vfat
34.5 KB
05/12/2018 10:59:39 PM
rwxr-xr-x
📄
mkhomedir_helper
22.17 KB
01/10/2024 01:55:08 PM
rwxr-xr-x
📄
mklost+found
14.3 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
mkswap
106.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
modinfo
146.18 KB
07/28/2020 02:46:39 PM
rwxr-xr-x
📄
modprobe
146.18 KB
07/28/2020 02:46:39 PM
rwxr-xr-x
📄
netplan
798 bytes
06/28/2024 04:59:34 PM
rwxr-xr-x
📄
newusers
98.8 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
nfnl_osf
18.3 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
nologin
14.3 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
pam-auth-update
19.86 KB
09/17/2021 06:05:34 AM
rwxr-xr-x
📄
pam_extrausers_chkpwd
42.16 KB
01/10/2024 01:55:08 PM
rwxr-xr-x
📄
pam_extrausers_update
42.16 KB
01/10/2024 01:55:08 PM
rwxr-xr-x
📄
pam_getenv
2.82 KB
08/12/2020 12:15:04 AM
rwxr-xr-x
📄
pam_tally
14.16 KB
01/10/2024 01:55:08 PM
rwxr-xr-x
📄
pam_tally2
18.16 KB
01/10/2024 01:55:08 PM
rwxr-xr-x
📄
pam_timestamp_check
14.15 KB
01/10/2024 01:55:08 PM
rwxr-xr-x
📄
pivot_root
14.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
poweroff
178.08 KB
03/02/2023 12:58:02 PM
rwxr-xr-x
📄
pwck
58.17 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
pwconv
54.05 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
pwunconv
54.05 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
raw
14.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
readprofile
22.26 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
reboot
178.08 KB
03/02/2023 12:58:02 PM
rwxr-xr-x
📄
remove-shell
904 bytes
12/07/2019 02:13:44 AM
rwxr-xr-x
📄
resize2fs
66.38 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
rfkill
50.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
rmmod
146.18 KB
07/28/2020 02:46:39 PM
rwxr-xr-x
📄
rmt
58.55 KB
12/05/2023 05:16:50 AM
rwxr-xr-x
📄
rmt-tar
58.55 KB
12/05/2023 05:16:50 AM
rwxr-xr-x
📄
rtacct
48.29 KB
02/13/2020 05:21:59 PM
rwxr-xr-x
📄
rtcwake
46.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
rtmon
78.24 KB
02/13/2020 05:21:59 PM
rwxr-xr-x
📄
runlevel
178.08 KB
03/02/2023 12:58:02 PM
rwxr-xr-x
📄
runuser
66.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
service
9.04 KB
06/21/2019 06:56:55 PM
rwxr-xr-x
📄
setcap
14.3 KB
02/20/2025 04:01:08 PM
rwxr-xr-x
📄
sfdisk
138.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
shadowconfig
885 bytes
07/14/2021 10:08:18 PM
rwxr-xr-x
📄
shutdown
178.08 KB
03/02/2023 12:58:02 PM
rwxr-xr-x
📄
sshd
863.79 KB
04/11/2025 12:16:08 PM
rwxr-xr-x
📄
start-stop-daemon
47.32 KB
05/25/2022 11:14:20 AM
rwxr-xr-x
📄
sulogin
50.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
swaplabel
18.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
swapoff
22.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
swapon
50.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
switch_root
14.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
sysctl
30.23 KB
10/31/2023 11:35:56 AM
rwxr-xr-x
📄
tarcat
936 bytes
12/05/2023 05:16:50 AM
rwxr-xr-x
📄
tc
529.45 KB
02/13/2020 05:21:59 PM
rwxr-xr-x
📄
telinit
178.08 KB
03/02/2023 12:58:02 PM
rwxr-xr-x
📄
tipc
126.23 KB
02/13/2020 05:21:59 PM
rwxr-xr-x
📄
tune2fs
106.55 KB
10/09/2023 01:56:01 AM
rwxr-xr-x
📄
tzconfig
106 bytes
03/26/2025 05:32:00 PM
rwxr-xr-x
📄
unix_chkpwd
42.15 KB
01/10/2024 01:55:08 PM
rwxr-xr-x
📄
unix_update
42.15 KB
01/10/2024 01:55:08 PM
rwxr-xr-x
📄
update-ca-certificates
5.29 KB
09/24/2024 05:46:09 PM
rwxr-xr-x
📄
update-mime
9.18 KB
10/18/2019 11:05:50 PM
rwxr-xr-x
📄
update-passwd
34.56 KB
12/16/2019 11:51:51 PM
rwxr-xr-x
📄
update-rc.d
16.76 KB
06/21/2019 06:56:55 PM
rwxr-xr-x
📄
useradd
143.71 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
userdel
98.89 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
usermod
139.49 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
veritysetup
51.82 KB
01/29/2025 06:37:57 PM
rwxr-xr-x
📄
vigr
68.55 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
vipw
68.55 KB
02/06/2024 12:49:54 PM
rwxr-xr-x
📄
visudo
218.2 KB
04/04/2023 11:56:28 AM
rwxr-xr-x
📄
wipefs
46.23 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
📄
wpa_action
1.69 KB
08/13/2019 11:12:36 PM
rwxr-xr-x
📄
wpa_cli
152.22 KB
02/24/2025 08:14:55 PM
rwxr-xr-x
📄
wpa_supplicant
2.77 MB
02/24/2025 08:14:55 PM
rwxr-xr-x
📄
xtables-legacy-multi
96.97 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
xtables-monitor
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
xtables-nft-multi
215.32 KB
05/09/2023 06:39:57 PM
rwxr-xr-x
📄
zic
62.29 KB
01/29/2025 02:41:47 PM
rwxr-xr-x
📄
zramctl
114.34 KB
04/09/2024 03:34:13 PM
rwxr-xr-x
Editing: apparmor_status
Close
#! /usr/bin/python3 # ------------------------------------------------------------------ # # Copyright (C) 2005-2006 Novell/SUSE # Copyright (C) 2011 Canonical Ltd. # # This program is free software; you can redistribute it and/or # modify it under the terms of version 2 of the GNU General Public # License published by the Free Software Foundation. # # ------------------------------------------------------------------ import re, os, sys, errno, json # PLEASE NOTE: we try to keep aa-status as minimal as possible, for # environments where installing all of the python utils and python # apparmor module may not make sense. Please think carefully before # importing anything from apparmor; see how the apparmor.fail import is # handled below. # setup exception handling try: from apparmor.fail import enable_aa_exception_handler enable_aa_exception_handler() except ImportError: # just let normal python exceptions happen (LP: #1480492) pass def cmd_enabled(): '''Returns error code if AppArmor is not enabled''' if get_profiles() == {}: sys.exit(2) def cmd_profiled(): '''Prints the number of loaded profiles''' profiles = get_profiles() sys.stdout.write("%d\n" % len(profiles)) if profiles == {}: sys.exit(2) def cmd_enforced(): '''Prints the number of loaded enforcing profiles''' profiles = get_profiles() sys.stdout.write("%d\n" % len(filter_profiles(profiles, 'enforce'))) if profiles == {}: sys.exit(2) def cmd_complaining(): '''Prints the number of loaded non-enforcing profiles''' profiles = get_profiles() sys.stdout.write("%d\n" % len(filter_profiles(profiles, 'complain'))) if profiles == {}: sys.exit(2) def cmd_verbose(): '''Displays multiple data points about loaded profile set''' global verbose verbose = True profiles = get_profiles() processes = get_processes(profiles) stdmsg("%d profiles are loaded." % len(profiles)) for status in ('enforce', 'complain'): filtered_profiles = filter_profiles(profiles, status) stdmsg("%d profiles are in %s mode." % (len(filtered_profiles), status)) for item in filtered_profiles: stdmsg(" %s" % item) stdmsg("%d processes have profiles defined." % len(processes)) for status in ('enforce', 'complain', 'unconfined'): filtered_processes = filter_processes(processes, status) if status == 'unconfined': stdmsg("%d processes are unconfined but have a profile defined." % len(filtered_processes)) else: stdmsg("%d processes are in %s mode." % (len(filtered_processes), status)) # Sort by name, and then by pid filtered_processes.sort(key=lambda x: int(x[0])) filtered_processes.sort(key=lambda x: x[1]) for (pid, profile, exe) in filtered_processes: if exe == profile: profile = "" stdmsg(" %s (%s) %s" % (exe, pid, profile)) if profiles == {}: sys.exit(2) def cmd_json(pretty_output=False): '''Outputs multiple data points about loaded profile set in a machine-readable JSON format''' global verbose profiles = get_profiles() processes = get_processes(profiles) i = { 'version': '1', 'profiles': {}, 'processes': {} } for status in ('enforce', 'complain'): filtered_profiles = filter_profiles(profiles, status) for item in filtered_profiles: i['profiles'][item] = status for status in ('enforce', 'complain', 'unconfined'): filtered_processes = filter_processes(processes, status) for (pid, profile, exe) in filtered_processes: if exe not in i['processes']: i['processes'][exe] = [] i['processes'][exe].append({ 'profile': profile, 'pid': pid, 'status': status }) if pretty_output: sys.stdout.write(json.dumps(i, sort_keys=True, indent=4, separators=(',', ': '))) else: sys.stdout.write(json.dumps(i)) def cmd_pretty_json(): cmd_json(True) def get_profiles(): '''Fetch loaded profiles''' profiles = {} if os.path.exists("/sys/module/apparmor"): stdmsg("apparmor module is loaded.") else: errormsg("apparmor module is not loaded.") sys.exit(1) apparmorfs = find_apparmorfs() if not apparmorfs: errormsg("apparmor filesystem is not mounted.") sys.exit(3) apparmor_profiles = os.path.join(apparmorfs, "profiles") try: f = open(apparmor_profiles) except IOError as e: if e.errno == errno.EACCES: errormsg("You do not have enough privilege to read the profile set.") else: errormsg("Could not open %s: %s" % (apparmor_profiles, os.strerror(e.errno))) sys.exit(4) for p in f.readlines(): match = re.search("^([^\(]+)\s+\((\w+)\)$", p) profiles[match.group(1)] = match.group(2) f.close() return profiles def get_processes(profiles): '''Fetch process list''' processes = {} contents = os.listdir("/proc") for filename in contents: if filename.isdigit(): try: for p in open("/proc/%s/attr/current" % filename).readlines(): match = re.search("^([^\(]+)\s+\((\w+)\)$", p) exe = os.path.realpath("/proc/%s/exe" % filename) if match: processes[filename] = { 'profile' : match.group(1), \ 'exe': exe, \ 'mode' : match.group(2) } elif exe in profiles: # keep only unconfined processes that have a profile defined processes[filename] = { 'profile' : exe, \ 'exe': exe, \ 'mode' : 'unconfined' } except: pass return processes def filter_profiles(profiles, status): '''Return a list of profiles that have a particular status''' filtered = [] for key, value in list(profiles.items()): if value == status: filtered.append(key) filtered.sort() return filtered def filter_processes(processes, status): '''Return a list of processes that have a particular status''' filtered = [] for key, value in list(processes.items()): if value['mode'] == status: filtered.append([key, value['profile'], value['exe']]) return filtered def find_apparmorfs(): '''Finds AppArmor mount point''' for p in open("/proc/mounts","rb").readlines(): if p.split()[2].decode() == "securityfs" and \ os.path.exists(os.path.join(p.split()[1].decode(), "apparmor")): return os.path.join(p.split()[1].decode(), "apparmor") return False def errormsg(message): '''Prints to stderr if verbose mode is on''' global verbose if verbose: sys.stderr.write(message + "\n") def stdmsg(message): '''Prints to stdout if verbose mode is on''' global verbose if verbose: sys.stdout.write(message + "\n") def print_usage(): '''Print usage information''' sys.stdout.write('''Usage: %s [OPTIONS] Displays various information about the currently loaded AppArmor policy. OPTIONS (one only): --enabled returns error code if AppArmor not enabled --profiled prints the number of loaded policies --enforced prints the number of loaded enforcing policies --complaining prints the number of loaded non-enforcing policies --json displays multiple data points in machine-readable JSON format --pretty-json same data as --json, formatted for human consumption as well --verbose (default) displays multiple data points about loaded policy set --help this message ''' % sys.argv[0]) # Main global verbose verbose = False if len(sys.argv) > 2: sys.stderr.write("Error: Too many options.\n") print_usage() sys.exit(1) elif len(sys.argv) == 2: cmd = sys.argv.pop(1) else: cmd = '--verbose' # Command dispatch: commands = { '--enabled' : cmd_enabled, '--profiled' : cmd_profiled, '--enforced' : cmd_enforced, '--complaining' : cmd_complaining, '--json' : cmd_json, '--pretty-json' : cmd_pretty_json, '--verbose' : cmd_verbose, '-v' : cmd_verbose, '--help' : print_usage, '-h' : print_usage } if cmd in commands: commands[cmd]() sys.exit(0) else: sys.stderr.write("Error: Invalid command.\n") print_usage() sys.exit(1)