Linux unitednationsplay.com 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
nginx/1.20.1
Server IP : 188.130.139.92 & Your IP : 18.220.121.27
Domains :
Cant Read [ /etc/named.conf ]
User : web
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
sbin /
Delete
Unzip
Name
Size
Permission
Date
Action
NetworkManager
2.83
MB
-rwxr-xr-x
2020-11-16 16:15
accessdb
11.55
KB
-rwxr-xr-x
2018-10-30 20:26
addgnupghome
3.05
KB
-rwxr-xr-x
2013-10-04 12:32
addpart
19.69
KB
-rwxr-xr-x
2021-02-02 16:31
adduser
134.39
KB
-rwxr-xr-x
2019-08-09 02:51
agetty
48.48
KB
-rwxr-xr-x
2021-02-02 16:31
alternatives
27.61
KB
-rwxr-xr-x
2020-10-13 15:46
anacron
35.59
KB
-rwxr-xr-x
2019-08-08 23:07
apachectl
4.19
KB
-rwxr-xr-x
2021-10-19 13:53
applygnupgdefaults
2.21
KB
-rwxr-xr-x
2013-10-04 12:32
arpd
52.98
KB
-rwxr-xr-x
2020-09-30 16:40
arping
23.19
KB
-rwxr-xr-x
2017-08-04 08:01
audispd
39.75
KB
-rwxr-xr-x
2019-08-08 12:06
auditctl
39.56
KB
-rwxr-xr-x
2019-08-08 12:06
auditd
125.65
KB
-rwxr-xr-x
2019-08-08 12:06
augenrules
3.7
KB
-rwxr-xr-x
2019-08-08 12:06
aureport
105.39
KB
-rwxr-xr-x
2019-08-08 12:06
ausearch
109.8
KB
-rwxr-xr-x
2019-08-08 12:06
authconfig
43.49
KB
-rwxr-xr-x
2017-08-04 09:05
authconfig-tui
43.49
KB
-rwxr-xr-x
2017-08-04 09:05
autrace
15.49
KB
-rwxr-x---
2019-08-08 12:06
avcstat
11.25
KB
-rwxr-xr-x
2020-04-01 03:16
badblocks
27.69
KB
-rwxr-xr-x
2020-09-30 15:58
biosdecode
24.15
KB
-rwxr-xr-x
2021-03-16 15:25
biosdevname
36.57
KB
-rwxr-xr-x
2019-08-08 23:01
blkdeactivate
15.97
KB
-r-xr-xr-x
2021-04-28 13:31
blkdiscard
23.84
KB
-rwxr-xr-x
2021-02-02 16:31
blkid
77.92
KB
-rwxr-xr-x
2021-02-02 16:31
blockdev
32.2
KB
-rwxr-xr-x
2021-02-02 16:31
bridge
77.61
KB
-rwxr-xr-x
2020-09-30 16:40
btrfs
690.59
KB
-rwxr-xr-x
2017-08-06 16:32
btrfs-convert
378.62
KB
-rwxr-xr-x
2017-08-06 16:32
btrfs-debug-tree
354.23
KB
-rwxr-xr-x
2017-08-06 16:32
btrfs-find-root
346.22
KB
-rwxr-xr-x
2017-08-06 16:32
btrfs-image
374.63
KB
-rwxr-xr-x
2017-08-06 16:32
btrfs-map-logical
350.27
KB
-rwxr-xr-x
2017-08-06 16:32
btrfs-select-super
346.2
KB
-rwxr-xr-x
2017-08-06 16:32
btrfs-zero-log
346.2
KB
-rwxr-xr-x
2017-08-06 16:32
btrfsck
690.59
KB
-rwxr-xr-x
2017-08-06 16:32
btrfstune
350.24
KB
-rwxr-xr-x
2017-08-06 16:32
build-locale-archive
860.52
KB
-rwx------
2021-10-13 18:29
cacertdir_rehash
644
B
-rwxr-xr-x
2017-08-04 09:05
capsh
19.43
KB
-rwxr-xr-x
2020-04-01 03:08
cbq
32.73
KB
-rwxr-xr-x
2020-09-30 16:40
cfdisk
71.37
KB
-rwxr-xr-x
2021-02-02 16:31
chcpu
23.7
KB
-rwxr-xr-x
2021-02-02 16:31
chgpasswd
64.1
KB
-rwxr-xr-x
2019-08-09 02:51
chkconfig
40.22
KB
-rwxr-xr-x
2020-10-13 15:46
chpasswd
55.88
KB
-rwxr-xr-x
2019-08-09 02:51
chronyd
263.08
KB
-rwxr-xr-x
2019-08-08 11:40
chroot
32.48
KB
-rwxr-xr-x
2020-11-16 22:24
clock
48.44
KB
-rwxr-xr-x
2021-02-02 16:31
clockdiff
19.04
KB
-rwxr-xr-x
2017-08-04 08:01
consoletype
6.95
KB
-rwxr-xr-x
2020-11-16 16:20
cracklib-check
7.04
KB
-rwxr-xr-x
2014-06-10 05:42
cracklib-format
246
B
-rwxr-xr-x
2014-06-10 05:42
cracklib-packer
11.06
KB
-rwxr-xr-x
2014-06-10 05:42
cracklib-unpacker
7.02
KB
-rwxr-xr-x
2014-06-10 05:42
create-cracklib-dict
990
B
-rwxr-xr-x
2014-06-10 05:42
crond
68.57
KB
-rwxr-xr-x
2019-08-08 23:07
ctrlaltdel
11.2
KB
-rwxr-xr-x
2021-02-02 16:31
ctstat
20.09
KB
-rwxr-xr-x
2020-09-30 16:40
debugfs
120.65
KB
-rwxr-xr-x
2020-09-30 15:58
delpart
19.69
KB
-rwxr-xr-x
2021-02-02 16:31
depmod
143.24
KB
-rwxr-xr-x
2020-04-01 02:58
devlink
64.72
KB
-rwxr-xr-x
2020-09-30 16:40
dhclient
414.34
KB
-rwxr-xr-x
2021-06-09 16:09
dhclient-script
30.38
KB
-rwxr-xr-x
2021-06-09 14:37
dmfilemapd
19.16
KB
-r-xr-xr-x
2021-04-28 13:32
dmidecode
120.2
KB
-rwxr-xr-x
2021-03-16 15:25
dmsetup
149.2
KB
-r-xr-xr-x
2021-04-28 13:32
dmstats
149.2
KB
-r-xr-xr-x
2021-04-28 13:32
dracut
55.83
KB
-rwxr-xr-x
2020-09-30 15:57
dumpe2fs
23.62
KB
-rwxr-xr-x
2020-09-30 15:58
e2freefrag
11.15
KB
-rwxr-xr-x
2020-09-30 15:58
e2fsck
250.55
KB
-rwxr-xr-x
2020-09-30 15:58
e2image
27.85
KB
-rwxr-xr-x
2020-09-30 15:58
e2label
69.41
KB
-rwxr-xr-x
2020-09-30 15:58
e2undo
11.32
KB
-rwxr-xr-x
2020-09-30 15:58
e4defrag
23.55
KB
-rwxr-xr-x
2020-09-30 15:58
eapol_test
1.77
MB
-rwxr-xr-x
2021-03-16 15:26
ebtables
6.85
KB
-rwxr-xr-x
2018-04-11 02:44
ebtables-restore
10.88
KB
-rwxr-xr-x
2018-04-11 02:44
ebtables-save
851
B
-rwxr-xr-x
2018-04-11 02:44
ethtool
293.87
KB
-rwxr-xr-x
2019-08-08 23:16
faillock
15.02
KB
-rwxr-xr-x
2020-04-01 04:00
fcgistarter
11
KB
-rwxr-xr-x
2021-10-19 13:54
fdformat
11.27
KB
-rwxr-xr-x
2021-02-02 16:31
fdisk
195.8
KB
-rwxr-xr-x
2021-02-02 16:31
filefrag
15.23
KB
-rwxr-xr-x
2020-09-30 15:58
findfs
11.2
KB
-rwxr-xr-x
2021-02-02 16:31
firewalld
6.87
KB
-rwxr-xr-x
2021-04-28 13:31
fixfiles
11.03
KB
-rwxr-xr-x
2020-04-01 04:04
fsck
32.12
KB
-rwxr-xr-x
2021-02-02 16:31
fsck.btrfs
1.16
KB
-rwxr-xr-x
2017-08-06 16:32
fsck.cramfs
19.57
KB
-rwxr-xr-x
2021-02-02 16:31
fsck.ext2
250.55
KB
-rwxr-xr-x
2020-09-30 15:58
fsck.ext3
250.55
KB
-rwxr-xr-x
2020-09-30 15:58
fsck.ext4
250.55
KB
-rwxr-xr-x
2020-09-30 15:58
fsck.minix
73.32
KB
-rwxr-xr-x
2021-02-02 16:31
fsck.xfs
433
B
-rwxr-xr-x
2020-09-30 17:51
fsfreeze
11.23
KB
-rwxr-xr-x
2021-02-02 16:31
fstrim
40.59
KB
-rwxr-xr-x
2021-02-02 16:31
fuser
32.34
KB
-rwxr-xr-x
2020-09-30 17:20
fxload
19.26
KB
-rwxr-xr-x
2014-06-10 04:45
gdm
430.45
KB
-rwxr-xr-x
2020-11-18 20:21
genhomedircon
23.77
KB
-rwxr-xr-x
2020-04-01 04:04
genhostid
6.94
KB
-rwxr-xr-x
2020-11-16 16:20
genl
52.81
KB
-rwxr-xr-x
2020-09-30 16:40
getcap
11.13
KB
-rwxr-xr-x
2020-04-01 03:08
getenforce
7.01
KB
-rwxr-xr-x
2020-04-01 03:16
getpcaps
7.07
KB
-rwxr-xr-x
2020-04-01 03:08
getsebool
11.13
KB
-rwxr-xr-x
2020-04-01 03:16
glibc_post_upgrade.x86_64
772.05
KB
-rwx------
2021-10-13 18:29
groupadd
85.65
KB
-rwxr-xr-x
2019-08-09 02:51
groupdel
77.38
KB
-rwxr-xr-x
2019-08-09 02:51
groupmems
55.97
KB
-rwxr-xr-x
2019-08-09 02:51
groupmod
85.66
KB
-rwxr-xr-x
2019-08-09 02:51
grpck
59.93
KB
-rwxr-xr-x
2019-08-09 02:51
grpconv
51.73
KB
-rwxr-xr-x
2019-08-09 02:51
grpunconv
51.73
KB
-rwxr-xr-x
2019-08-09 02:51
grub2-bios-setup
1.03
MB
-rwxr-xr-x
2021-10-14 00:12
grub2-get-kernel-settings
2.08
KB
-rwxr-xr-x
2021-10-14 00:12
grub2-install
1.28
MB
-rwxr-xr-x
2021-10-14 00:12
grub2-macbless
1.01
MB
-rwxr-xr-x
2021-10-14 00:12
grub2-mkconfig
7.63
KB
-rwxr-xr-x
2021-10-14 00:12
grub2-ofpathname
225.54
KB
-rwxr-xr-x
2021-10-14 00:12
grub2-probe
1.03
MB
-rwxr-xr-x
2021-10-14 00:12
grub2-reboot
4
KB
-rwxr-xr-x
2021-10-14 00:12
grub2-rpm-sort
258.52
KB
-rwxr-xr-x
2021-10-14 00:12
grub2-set-default
3.46
KB
-rwxr-xr-x
2021-10-14 00:12
grub2-setpassword
2.96
KB
-rwxr-xr-x
2021-10-14 00:12
grub2-sparc64-setup
1.03
MB
-rwxr-xr-x
2021-10-14 00:12
grubby
71.27
KB
-rwxr-xr-x
2019-08-08 23:41
gss-server
23.13
KB
-rwxr-xr-x
2021-12-02 15:32
halt
704.8
KB
-rwxr-xr-x
2022-01-13 16:54
hardlink
15.29
KB
-rwxr-xr-x
2014-06-10 06:26
htcacheclean
31.16
KB
-rwxr-xr-x
2021-10-19 13:54
httpd
511.38
KB
-rwxr-xr-x
2021-10-19 13:54
hwclock
48.44
KB
-rwxr-xr-x
2021-02-02 16:31
iconvconfig
22.16
KB
-rwxr-xr-x
2021-10-13 18:29
iconvconfig.x86_64
22.16
KB
-rwxr-xr-x
2021-10-13 18:29
ifcfg
2.99
KB
-rwxr-xr-x
2020-09-30 16:40
ifdown
1.61
KB
-rwxr-xr-x
2020-05-22 10:44
ifenslave
19.74
KB
-rwxr-xr-x
2017-08-04 08:01
ifstat
40.6
KB
-rwxr-xr-x
2020-09-30 16:40
ifup
4.89
KB
-rwxr-xr-x
2020-05-22 10:44
init
1.56
MB
-rwxr-xr-x
2022-01-13 16:54
insmod
143.24
KB
-rwxr-xr-x
2020-04-01 02:58
install-info
110.42
KB
-rwxr-xr-x
2018-04-11 01:03
installkernel
2.69
KB
-rwxr-xr-x
2019-08-08 23:41
intel-microcode2ucode
11.1
KB
-rwxr-xr-x
2021-08-09 14:00
iotop
495
B
-rwxr-xr-x
2018-10-30 22:23
ip
459.59
KB
-rwxr-xr-x
2020-09-30 16:40
ip6tables
91.52
KB
-rwxr-xr-x
2020-10-01 16:52
ip6tables-restore
91.52
KB
-rwxr-xr-x
2020-10-01 16:52
ip6tables-save
91.52
KB
-rwxr-xr-x
2020-10-01 16:52
iprconfig
394.37
KB
-rwxr-xr-x
2020-02-05 12:58
iprdbg
135.94
KB
-rwx------
2020-02-05 12:58
iprdump
123.67
KB
-rwxr-xr-x
2020-02-05 12:58
iprinit
123.64
KB
-rwxr-xr-x
2020-02-05 12:58
iprsos
2.18
KB
-rwxr-xr-x
2020-02-05 12:58
iprupdate
123.64
KB
-rwxr-xr-x
2020-02-05 12:58
ipset
7.02
KB
-rwxr-xr-x
2019-08-08 23:55
iptables
91.52
KB
-rwxr-xr-x
2020-10-01 16:52
iptables-restore
91.52
KB
-rwxr-xr-x
2020-10-01 16:52
iptables-save
91.52
KB
-rwxr-xr-x
2020-10-01 16:52
irqbalance
48.5
KB
-rwxr-xr-x
2019-08-08 23:57
kexec
166.06
KB
-rwxr-xr-x
2021-06-09 16:09
killall5
23.17
KB
-rwxr-xr-x
2014-06-09 23:16
kpartx
39.47
KB
-rwxr-xr-x
2021-08-31 14:47
lchage
15.41
KB
-rwxr-xr-x
2018-04-12 18:44
ldattach
27.93
KB
-rwxr-xr-x
2021-02-02 16:31
ldconfig
952.08
KB
-rwxr-xr-x
2021-10-13 18:29
lgroupadd
11.28
KB
-rwxr-xr-x
2018-04-12 18:44
lgroupdel
11.26
KB
-rwxr-xr-x
2018-04-12 18:44
lgroupmod
15.44
KB
-rwxr-xr-x
2018-04-12 18:44
lid
15.4
KB
-rwxr-xr-x
2018-04-12 18:44
lnewusers
15.46
KB
-rwxr-xr-x
2018-04-12 18:44
lnstat
20.09
KB
-rwxr-xr-x
2020-09-30 16:40
load_policy
10.97
KB
-rwxr-xr-x
2020-04-01 04:04
logrotate
68.61
KB
-rwxr-xr-x
2020-04-01 03:26
logsave
11.27
KB
-rwxr-xr-x
2020-09-30 15:58
losetup
82.45
KB
-rwxr-xr-x
2021-02-02 16:31
lpasswd
15.5
KB
-rwxr-xr-x
2018-04-12 18:44
lshw
895.18
KB
-rwxr-xr-x
2020-09-30 16:58
lsmod
143.24
KB
-rwxr-xr-x
2020-04-01 02:58
luseradd
15.38
KB
-rwxr-xr-x
2018-04-12 18:44
luserdel
11.3
KB
-rwxr-xr-x
2018-04-12 18:44
lusermod
19.43
KB
-rwxr-xr-x
2018-04-12 18:44
makedumpfile
376.52
KB
-rwxr-xr-x
2021-06-09 16:09
matchpathcon
11.19
KB
-rwxr-xr-x
2020-04-01 03:16
mkdict
246
B
-rwxr-xr-x
2014-06-10 05:42
mkdumprd
13.99
KB
-rwxr-xr-x
2021-06-09 16:09
mke2fs
94.08
KB
-rwxr-xr-x
2020-09-30 15:58
mkfs
11.25
KB
-rwxr-xr-x
2021-02-02 16:31
mkfs.btrfs
366.45
KB
-rwxr-xr-x
2017-08-06 16:32
mkfs.cramfs
36.16
KB
-rwxr-xr-x
2021-02-02 16:31
mkfs.ext2
94.08
KB
-rwxr-xr-x
2020-09-30 15:58
mkfs.ext3
94.08
KB
-rwxr-xr-x
2020-09-30 15:58
mkfs.ext4
94.08
KB
-rwxr-xr-x
2020-09-30 15:58
mkfs.minix
36.27
KB
-rwxr-xr-x
2021-02-02 16:31
mkfs.xfs
359.8
KB
-rwxr-xr-x
2020-09-30 17:52
mkhomedir_helper
19.05
KB
-rwxr-xr-x
2020-04-01 04:00
mklost+found
11.11
KB
-rwxr-xr-x
2020-09-30 15:58
mkswap
69.64
KB
-rwxr-xr-x
2021-02-02 16:31
modinfo
143.24
KB
-rwxr-xr-x
2020-04-01 02:58
modprobe
143.24
KB
-rwxr-xr-x
2020-04-01 02:58
mount.fuse
11.1
KB
-rwxr-xr-x
2018-10-30 21:32
netreport
10.96
KB
-rwxr-sr-x
2020-11-16 16:20
new-kernel-pkg
24.96
KB
-rwxr-xr-x
2019-08-08 23:41
newusers
93.45
KB
-rwxr-xr-x
2019-08-09 02:51
nginx
1.21
MB
-rwxr-xr-x
2021-10-18 23:58
nologin
7.01
KB
-rwxr-xr-x
2021-02-02 16:31
nstat
23.88
KB
-rwxr-xr-x
2020-09-30 16:40
ntp-keygen
100.88
KB
-rwxr-xr-x
2020-06-23 15:38
ntpd
712.59
KB
-rwxr-xr-x
2020-06-23 15:38
ntpdate
107.58
KB
-rwxr-xr-x
2020-06-23 15:38
ntpdc
170.02
KB
-rwxr-xr-x
2020-06-23 15:38
ntpq
164.36
KB
-rwxr-xr-x
2020-06-23 15:38
ntptime
73.66
KB
-rwxr-xr-x
2020-06-23 15:38
ownership
15.04
KB
-rwxr-xr-x
2021-03-16 15:25
packer
11.06
KB
-rwxr-xr-x
2014-06-10 05:42
pam_console_apply
39.69
KB
-rwxr-xr-x
2020-04-01 04:00
pam_tally2
15.05
KB
-rwxr-xr-x
2020-04-01 04:00
pam_timestamp_check
10.97
KB
-rwsr-xr-x
2020-04-01 04:00
parted
77.22
KB
-rwxr-xr-x
2020-04-01 03:58
partprobe
11.23
KB
-rwxr-xr-x
2020-04-01 03:58
partx
86.55
KB
-rwxr-xr-x
2021-02-02 16:31
pidof
23.17
KB
-rwxr-xr-x
2014-06-09 23:16
ping6
64.63
KB
-rwxr-xr-x
2017-08-04 08:01
pivot_root
11.19
KB
-rwxr-xr-x
2021-02-02 16:31
plymouth-set-default-theme
6.21
KB
-rwxr-xr-x
2020-10-01 16:53
plymouthd
84.22
KB
-rwxr-xr-x
2020-10-01 16:53
postalias
253.87
KB
-rwxr-xr-x
2020-04-01 04:09
postcat
136.08
KB
-rwxr-xr-x
2020-04-01 04:09
postconf
363.19
KB
-rwxr-xr-x
2020-04-01 04:09
postdrop
213.44
KB
-rwxr-sr-x
2020-04-01 04:09
postfix
119.17
KB
-rwxr-xr-x
2020-04-01 04:09
postkick
131.43
KB
-rwxr-xr-x
2020-04-01 04:09
postlock
127.38
KB
-rwxr-xr-x
2020-04-01 04:09
postlog
119.38
KB
-rwxr-xr-x
2020-04-01 04:09
postmap
257.69
KB
-rwxr-xr-x
2020-04-01 04:09
postmulti
135.89
KB
-rwxr-xr-x
2020-04-01 04:09
postqueue
257.94
KB
-rwxr-sr-x
2020-04-01 04:09
postsuper
139.95
KB
-rwxr-xr-x
2020-04-01 04:09
poweroff
704.8
KB
-rwxr-xr-x
2022-01-13 16:54
ppp-watch
23.2
KB
-rwxr-xr-x
2020-11-16 16:20
pwck
51.71
KB
-rwxr-xr-x
2019-08-09 02:51
pwconv
47.57
KB
-rwxr-xr-x
2019-08-09 02:51
pwhistory_helper
15.44
KB
-rwxr-xr-x
2020-04-01 04:00
pwunconv
47.59
KB
-rwxr-xr-x
2019-08-09 02:51
rdisc
23.17
KB
-rwxr-xr-x
2017-08-04 08:01
rdma
73.42
KB
-rwxr-xr-x
2020-09-30 16:40
readprofile
15.46
KB
-rwxr-xr-x
2021-02-02 16:31
reboot
704.8
KB
-rwxr-xr-x
2022-01-13 16:54
resize2fs
48.41
KB
-rwxr-xr-x
2020-09-30 15:58
resizepart
32.36
KB
-rwxr-xr-x
2021-02-02 16:31
restorecon
27.16
KB
-rwxr-xr-x
2020-04-01 04:04
rmmod
143.24
KB
-rwxr-xr-x
2020-04-01 02:58
rotatelogs
19.04
KB
-rwxr-xr-x
2021-10-19 13:54
routef
173
B
-rwxr-xr-x
2020-09-30 16:40
routel
1.59
KB
-rwxr-xr-x
2020-09-30 16:40
rsyslogd
648.43
KB
-rwxr-xr-x
2021-06-09 16:13
rtacct
41.93
KB
-rwxr-xr-x
2020-09-30 16:40
rtcwake
31.96
KB
-rwxr-xr-x
2021-02-02 16:31
rtkitctl
10.88
KB
-rwxr-xr-x
2015-03-06 05:27
rtmon
48.67
KB
-rwxr-xr-x
2020-09-30 16:40
rtpr
37
B
-rwxr-xr-x
2020-09-30 16:40
rtstat
20.09
KB
-rwxr-xr-x
2020-09-30 16:40
runlevel
704.8
KB
-rwxr-xr-x
2022-01-13 16:54
runuser
32.21
KB
-rwxr-xr-x
2021-02-02 16:31
sasldblistusers2
19.26
KB
-rwxr-xr-x
2018-04-11 04:20
saslpasswd2
15.09
KB
-rwxr-xr-x
2018-04-11 04:20
sefcontext_compile
60.53
KB
-rwxr-xr-x
2020-04-01 03:16
selabel_digest
11.17
KB
-rwxr-xr-x
2020-04-01 03:16
selabel_lookup
11.14
KB
-rwxr-xr-x
2020-04-01 03:16
selabel_lookup_best_match
11.16
KB
-rwxr-xr-x
2020-04-01 03:16
selabel_partial_match
11.09
KB
-rwxr-xr-x
2020-04-01 03:16
selinux_restorecon
15.21
KB
-rwxr-xr-x
2020-04-01 03:16
selinuxconlist
11.1
KB
-rwxr-xr-x
2020-04-01 03:16
selinuxdefcon
11.12
KB
-rwxr-xr-x
2020-04-01 03:16
selinuxenabled
6.98
KB
-rwxr-xr-x
2020-04-01 03:16
selinuxexeccon
7.09
KB
-rwxr-xr-x
2020-04-01 03:16
semanage
42.76
KB
-rwxr-xr-x
2020-04-01 04:04
semodule
23.77
KB
-rwxr-xr-x
2020-04-01 04:04
sendmail
242.11
KB
-rwxr-xr-x
2020-04-01 04:09
sendmail.postfix
242.11
KB
-rwxr-xr-x
2020-04-01 04:09
service
3.17
KB
-rwxr-xr-x
2020-11-16 16:20
sestatus
15.02
KB
-rwxr-xr-x
2020-04-01 04:04
setcap
11.13
KB
-rwxr-xr-x
2020-04-01 03:08
setenforce
7.05
KB
-rwxr-xr-x
2020-04-01 03:16
setfiles
27.16
KB
-rwxr-xr-x
2020-04-01 04:04
setsebool
14.99
KB
-rwxr-xr-x
2020-04-01 04:04
sfdisk
83.25
KB
-rwxr-xr-x
2021-02-02 16:31
shutdown
704.8
KB
-rwxr-xr-x
2022-01-13 16:54
sim_server
10.97
KB
-rwxr-xr-x
2021-12-02 15:32
sln
743.78
KB
-rwxr-xr-x
2021-10-13 18:29
smtp-sink
90.91
KB
-rwxr-xr-x
2020-04-01 04:09
smtp-source
77.79
KB
-rwxr-xr-x
2020-04-01 04:09
ss
128.44
KB
-rwxr-xr-x
2020-09-30 16:40
sshd
832.87
KB
-rwxr-xr-x
2019-08-09 01:40
sshd-keygen
3.53
KB
-rwxr-xr-x
2019-08-09 01:40
suexec
15.01
KB
-r-x--x---
2021-10-19 13:54
sulogin
40.53
KB
-rwxr-xr-x
2021-02-02 16:31
sushell
67
B
-rwxr-xr-x
2020-11-16 16:20
swaplabel
15.31
KB
-rwxr-xr-x
2021-02-02 16:31
swapoff
15.53
KB
-rwxr-xr-x
2021-02-02 16:31
swapon
53.29
KB
-rwxr-xr-x
2021-02-02 16:31
switch_root
15.35
KB
-rwxr-xr-x
2021-02-02 16:31
sys-unconfig
184
B
-rwxr-xr-x
2020-11-16 16:20
sysctl
23.57
KB
-rwxr-xr-x
2020-09-30 17:21
tc
384.66
KB
-rwxr-xr-x
2020-09-30 16:40
tcsd
300.27
KB
-rwxr-xr-x
2017-08-03 17:16
telinit
704.8
KB
-rwxr-xr-x
2022-01-13 16:54
tickadj
6.95
KB
-rwxr-xr-x
2020-06-23 15:38
tracepath
15.05
KB
-rwxr-xr-x
2017-08-04 08:01
tracepath6
15.05
KB
-rwxr-xr-x
2017-08-04 08:01
tune2fs
69.41
KB
-rwxr-xr-x
2020-09-30 15:58
tuned
3.29
KB
-rwxr-xr-x
2019-03-21 22:10
tuned-adm
5.22
KB
-rwxr-xr-x
2019-03-21 22:10
udevadm
414.27
KB
-rwxr-xr-x
2022-01-13 16:54
unix_chkpwd
35.42
KB
-rwsr-xr-x
2020-04-01 04:00
unix_update
35.42
KB
-rwx------
2020-04-01 04:00
update-alternatives
27.61
KB
-rwxr-xr-x
2020-10-13 15:46
useradd
134.39
KB
-rwxr-xr-x
2019-08-09 02:51
userdel
93.5
KB
-rwxr-xr-x
2019-08-09 02:51
usermod
130.33
KB
-rwxr-xr-x
2019-08-09 02:51
usernetctl
11.03
KB
-rwsr-xr-x
2020-11-16 16:20
uuserver
14.97
KB
-rwxr-xr-x
2021-12-02 15:32
vigr
62.54
KB
-rwxr-xr-x
2019-08-09 02:51
vipw
62.54
KB
-rwxr-xr-x
2019-08-09 02:51
virt-what
11.57
KB
-rwxr-xr-x
2021-08-31 14:47
visudo
200.89
KB
-rwxr-xr-x
2021-10-14 12:28
vmcore-dmesg
19.28
KB
-rwxr-xr-x
2021-06-09 16:09
vpddecode
15.33
KB
-rwxr-xr-x
2021-03-16 15:25
vsftpd
171.33
KB
-rwxr-xr-x
2021-06-09 16:15
weak-modules
31.9
KB
-rwxr-xr-x
2020-04-01 02:58
wipefs
28.05
KB
-rwxr-xr-x
2021-02-02 16:31
wpa_cli
128.06
KB
-rwxr-xr-x
2021-03-16 15:26
wpa_passphrase
56.79
KB
-rwxr-xr-x
2021-03-16 15:26
wpa_supplicant
1.93
MB
-rwxr-xr-x
2021-03-16 15:26
xfs_admin
1.35
KB
-rwxr-xr-x
2020-09-30 17:51
xfs_bmap
638
B
-rwxr-xr-x
2020-09-30 17:51
xfs_copy
339.33
KB
-rwxr-xr-x
2020-09-30 17:52
xfs_db
576.38
KB
-rwxr-xr-x
2020-09-30 17:52
xfs_estimate
11.16
KB
-rwxr-xr-x
2020-09-30 17:52
xfs_freeze
767
B
-rwxr-xr-x
2020-09-30 17:51
xfs_fsr
31.83
KB
-rwxr-xr-x
2020-09-30 17:52
xfs_growfs
327.2
KB
-rwxr-xr-x
2020-09-30 17:52
xfs_info
472
B
-rwxr-xr-x
2020-09-30 17:51
xfs_io
122.68
KB
-rwxr-xr-x
2020-09-30 17:52
xfs_logprint
355.81
KB
-rwxr-xr-x
2020-09-30 17:52
xfs_mdrestore
314.81
KB
-rwxr-xr-x
2020-09-30 17:52
xfs_metadump
747
B
-rwxr-xr-x
2020-09-30 17:51
xfs_mkfile
1007
B
-rwxr-xr-x
2020-09-30 17:51
xfs_ncheck
650
B
-rwxr-xr-x
2020-09-30 17:51
xfs_quota
84.88
KB
-rwxr-xr-x
2020-09-30 17:52
xfs_repair
563.2
KB
-rwxr-xr-x
2020-09-30 17:52
xfs_rtcp
15.25
KB
-rwxr-xr-x
2020-09-30 17:52
xtables-multi
91.52
KB
-rwxr-xr-x
2020-10-01 16:52
yum-complete-transaction
9.22
KB
-rwxr-xr-x
2020-05-12 16:27
yumdb
8.67
KB
-rwxr-xr-x
2020-05-12 16:27
zdump
14.02
KB
-rwxr-xr-x
2021-10-13 18:29
zic
50.02
KB
-rwxr-xr-x
2021-10-13 18:29
zramctl
82.23
KB
-rwxr-xr-x
2021-02-02 16:31
Save
Rename
#! /usr/bin/python -Es # Copyright (C) 2012-2013 Red Hat # AUTHOR: Miroslav Grepl <mgrepl@redhat.com> # AUTHOR: David Quigley <selinux@davequigley.com> # see file 'COPYING' for use and warranty information # # semanage is a tool for managing SELinux configuration files # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA # 02111-1307 USA # # try: import policycoreutils.default_encoding_utf8 except ImportError: pass import argparse import sys import gettext PROGNAME = "policycoreutils" try: kwargs = {} if sys.version_info < (3,): kwargs['unicode'] = True gettext.install(PROGNAME, localedir="/usr/share/locale", codeset='utf-8', **kwargs) except IOError: try: import builtins builtins.__dict__['_'] = str except ImportError: import __builtin__ __builtin__.__dict__['_'] = unicode # define custom usages for selected main actions usage_login = "semanage login [-h] [-n] [-N] [-S STORE] [" usage_login_dict = {' --add': ('-s SEUSER', '-r RANGE', 'LOGIN',), ' --modify': ('-s SEUSER', '-r RANGE', 'LOGIN',), ' --delete': ('LOGIN',), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_fcontext = "semanage fcontext [-h] [-n] [-N] [-S STORE] [" usage_fcontext_dict = {' --add': ('(', '-t TYPE', '-f FTYPE', '-r RANGE', '-s SEUSER', '|', '-e EQUAL', ')', 'FILE_SPEC', ')',), ' --delete': ('(', '-t TYPE', '-f FTYPE', '|', '-e EQUAL', ')', 'FILE_SPEC', ')',), ' --modify': ('(', '-t TYPE', '-f FTYPE', '-r RANGE', '-s SEUSER', '|', '-e EQUAL', ')', 'FILE_SPEC )',), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_user = "semanage user [-h] [-n] [-N] [-S STORE] [" usage_user_dict = {' --add': ('(', '-L LEVEL', '-R ROLES', '-r RANGE', '-s SEUSER', 'selinux_name'')'), ' --delete': ('selinux_name',), ' --modify': ('(', '-L LEVEL', '-R ROLES', '-r RANGE', '-s SEUSER', 'selinux_name', ')'), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_port = "semanage port [-h] [-n] [-N] [-S STORE] [" usage_port_dict = {' --add': ('-t TYPE', '-p PROTOCOL', '-r RANGE', '(', 'port_name', '|', 'port_range', ')'), ' --modify': ('-t TYPE', '-p PROTOCOL', '-r RANGE', '(', 'port_name', '|', 'port_range', ')'), ' --delete': ('-p PROTOCOL', '(', 'port_name', '|', 'port_range', ')'), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_ibpkey = "semanage ibpkey [-h] [-n] [-N] [-s STORE] [" usage_ibpkey_dict = {' --add': ('-t TYPE', '-x SUBNET_PREFIX', '-r RANGE', '(', 'ibpkey_name', '|', 'pkey_range', ')'), ' --modify': ('-t TYPE', '-x SUBNET_PREFIX', '-r RANGE', '(', 'ibpkey_name', '|', 'pkey_range', ')'), ' --delete': ('-x SUBNET_PREFIX', '(', 'ibpkey_name', '|', 'pkey_range', ')'), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_ibendport = "semanage ibendport [-h] [-n] [-N] [-s STORE] [" usage_ibendport_dict = {' --add': ('-t TYPE', '-z IBDEV_NAME', '-r RANGE', '(', 'port', ')'), ' --modify': ('-t TYPE', '-z IBDEV_NAME', '-r RANGE', '(', 'port', ')'), ' --delete': ('-z IBDEV_NAME', '-r RANGE''(', 'port', ')'), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_node = "semanage node [-h] [-n] [-N] [-S STORE] [" usage_node_dict = {' --add': ('-M NETMASK', '-p PROTOCOL', '-t TYPE', '-r RANGE', 'node'), ' --modify': ('-M NETMASK', '-p PROTOCOL', '-t TYPE', '-r RANGE', 'node'), ' --delete': ('-M NETMASK', '-p PROTOCOL', 'node'), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_interface = "semanage interface [-h] [-n] [-N] [-S STORE] [" usage_interface_dict = {' --add': ('-t TYPE', '-r RANGE', 'interface'), ' --modify': ('-t TYPE', '-r RANGE', 'interface'), ' --delete': ('interface',), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_boolean = "semanage boolean [-h] [-n] [-N] [-S STORE] [" usage_boolean_dict = {' --modify': ('(', '--on', '|', '--off', ')', 'boolean'), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} class CheckRole(argparse.Action): def __call__(self, parser, namespace, value, option_string=None): newval = getattr(namespace, self.dest) if not newval: newval = [] try: import sepolicy roles = sepolicy.get_all_roles() except ValueError: roles = [] for v in value.split(): if v not in roles: raise ValueError("%s must be an SELinux role:\nValid roles: %s" % (v, ", ".join(roles))) newval.append(v) setattr(namespace, self.dest, newval) store = '' class SetStore(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): global store store = values # set store value as soon as possible so that seobject (sepolicy) can be imported successfully import selinux rc, localstore = selinux.selinux_getpolicytype() if store not in ["", localstore]: selinux.selinux_set_policy_root("%s%s" % (selinux.selinux_path(), store)) setattr(namespace, self.dest, values) class seParser(argparse.ArgumentParser): def error(self, message): if len(sys.argv) == 2: self.print_help() sys.exit(2) self.print_usage() self.exit(2, ('%s: error: %s\n') % (self.prog, message)) class SetExportFile(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): if values: if values is not "-": try: sys.stdout = open(values, 'w') except: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e))) sys.exit(1) setattr(namespace, self.dest, values) class SetImportFile(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): if values and values is not "-": try: sys.stdin = open(values, 'r') except IOError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e))) sys.exit(1) setattr(namespace, self.dest, values) # functions for OBJECT initialization def login_ini(): from seobject import loginRecords OBJECT = loginRecords(store) return OBJECT def user_ini(): from seobject import seluserRecords OBJECT = seluserRecords(store) return OBJECT def port_ini(): from seobject import portRecords OBJECT = portRecords(store) return OBJECT def ibpkey_ini(): from seobject import ibpkeyRecords OBJECT = ibpkeyRecords(store) return OBJECT def ibendport_ini(): from seobject import ibendportRecords OBJECT = ibendportRecords(store) return OBJECT def module_ini(): from seobject import moduleRecords OBJECT = moduleRecords(store) return OBJECT def interface_ini(): from seobject import interfaceRecords OBJECT = interfaceRecords(store) return OBJECT def node_ini(): from seobject import nodeRecords OBJECT = nodeRecords(store) return OBJECT def fcontext_ini(): from seobject import fcontextRecords OBJECT = fcontextRecords(store) return OBJECT def boolean_ini(): from seobject import booleanRecords OBJECT = booleanRecords(store) return OBJECT def permissive_ini(): from seobject import permissiveRecords OBJECT = permissiveRecords(store) return OBJECT def dontaudit_ini(): from seobject import dontauditClass OBJECT = dontauditClass(store) return OBJECT # define dictonary for seobject OBEJCTS object_dict = {'login': login_ini, 'user': user_ini, 'port': port_ini, 'module': module_ini, 'interface': interface_ini, 'node': node_ini, 'fcontext': fcontext_ini, 'boolean': boolean_ini, 'permissive': permissive_ini, 'dontaudit': dontaudit_ini, 'ibpkey': ibpkey_ini, 'ibendport': ibendport_ini} def generate_custom_usage(usage_text, usage_dict): # generate custom usage from given text and dictonary sorted_keys = [] for i in list(usage_dict.keys()): sorted_keys.append(i) sorted_keys.sort() for k in sorted_keys: usage_text += "%s %s |" % (k, (" ".join(usage_dict[k]))) usage_text = usage_text[:-1] + "]" usage_text = _(usage_text) return usage_text def handle_opts(args, dict, target_key): # handle conflict and required options for given dictonary # {action:[conflict_opts,require_opts]} # first we need to catch conflicts for k in list(args.__dict__.keys()): try: if k in dict[target_key][0] and args.__dict__[k]: print("%s option can not be used with --%s" % (target_key, k)) sys.exit(2) except KeyError: continue for k in list(args.__dict__.keys()): try: if k in dict[target_key][1] and not args.__dict__[k]: print("%s option is needed for %s" % (k, target_key)) sys.exit(2) except KeyError: continue def handleLogin(args): # {action:[conflict_opts,require_opts]} login_args = {'list': [('login', 'seuser'), ('')], 'add': [('locallist'), ('seuser', 'login')], 'modify': [('locallist'), ('login')], 'delete': [('locallist'), ('login')], 'extract': [('locallist', 'login', 'seuser'), ('')], 'deleteall': [('locallist'), ('')]} handle_opts(args, login_args, args.action) OBJECT = object_dict['login']() OBJECT.set_reload(args.noreload) if args.action is "add": OBJECT.add(args.login, args.seuser, args.range) if args.action is "modify": OBJECT.modify(args.login, args.seuser, args.range) if args.action is "delete": OBJECT.delete(args.login) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "extract": for i in OBJECT.customized(): print("login %s" % (str(i))) def parser_add_store(parser, name): parser.add_argument('-S', '--store', action=SetStore, help=_("Select an alternate SELinux Policy Store to manage")) def parser_add_priority(parser, name): parser.add_argument('-P', '--priority', type=int, default=400, help=_("Select a priority for module operations")) def parser_add_noheading(parser, name): parser.add_argument('-n', '--noheading', action='store_false', default=True, help=_("Do not print heading when listing %s object types") % name) def parser_add_noreload(parser, name): parser.add_argument('-N', '--noreload', action='store_false', default=True, help=_('Do not reload policy after commit')) def parser_add_locallist(parser, name): parser.add_argument('-C', '--locallist', action='store_true', default=False, help=_("List %s local customizations") % name) def parser_add_add(parser, name): parser.add_argument('-a', '--add', dest='action', action='store_const', const='add', help=_("Add a record of the %s object type") % name) def parser_add_type(parser, name): parser.add_argument('-t', '--type', help=_('SELinux Type for the object')) def parser_add_level(parser, name): parser.add_argument('-L', '--level', default='', help=_('Default SELinux Level for SELinux user. (MLS/MCS Systems only)')) def parser_add_range(parser, name): parser.add_argument('-r', '--range', default="", help=_(''' MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux login mapping defaults to the SELinux user record range. ''')) def parser_add_proto(parser, name): parser.add_argument('-p', '--proto', help=_(''' Protocol for the specified port (tcp|udp) or internet protocol version for the specified node (ipv4|ipv6). ''')) def parser_add_subnet_prefix(parser, name): parser.add_argument('-x', '--subnet_prefix', help=_(''' Subnet prefix for the specified infiniband ibpkey. ''')) def parser_add_ibdev_name(parser, name): parser.add_argument('-z', '--ibdev_name', help=_(''' Name for the specified infiniband end port. ''')) def parser_add_modify(parser, name): parser.add_argument('-m', '--modify', dest='action', action='store_const', const='modify', help=_("Modify a record of the %s object type") % name) def parser_add_list(parser, name): parser.add_argument('-l', '--list', dest='action', action='store_const', const='list', help=_("List records of the %s object type") % name) def parser_add_delete(parser, name): parser.add_argument('-d', '--delete', dest='action', action='store_const', const='delete', help=_("Delete a record of the %s object type") % name) def parser_add_extract(parser, name): parser.add_argument('-E', '--extract', dest='action', action='store_const', const='extract', help=_("Extract customizable commands, for use within a transaction")) def parser_add_deleteall(parser, name): parser.add_argument('-D', '--deleteall', dest='action', action='store_const', const='deleteall', help=_('Remove all %s objects local customizations') % name) def parser_add_seuser(parser, name): parser.add_argument('-s', '--seuser', default="", help=_("SELinux user name")) def setupLoginParser(subparsers): generated_usage = generate_custom_usage(usage_login, usage_login_dict) loginParser = subparsers.add_parser('login', usage=generated_usage, help=_("Manage login mappings between linux users and SELinux confined users")) parser_add_locallist(loginParser, "login") parser_add_noheading(loginParser, "login") parser_add_noreload(loginParser, "login") parser_add_store(loginParser, "login") parser_add_range(loginParser, "login") login_action = loginParser.add_mutually_exclusive_group(required=True) parser_add_add(login_action, "login") parser_add_delete(login_action, "login") parser_add_modify(login_action, "login") parser_add_list(login_action, "login") parser_add_extract(login_action, "login") parser_add_deleteall(login_action, "login") parser_add_seuser(loginParser, "login") loginParser.add_argument('login', nargs='?', default=None, help=_("login_name | %%groupname")) loginParser.set_defaults(func=handleLogin) def handleFcontext(args): fcontext_args = {'list': [('equal', 'ftype', 'seuser', 'type'), ('')], 'add': [('locallist'), ('type', 'file_spec')], 'modify': [('locallist'), ('type', 'file_spec')], 'delete': [('locallist'), ('file_spec')], 'extract': [('locallist', 'equal', 'ftype', 'seuser', 'type'), ('')], 'deleteall': [('locallist'), ('')]} # we can not use mutually for equal because we can define some actions together with equal fcontext_equal_args = {'equal': [('list', 'locallist', 'type', 'ftype', 'seuser', 'deleteall', 'extract'), ()]} if args.action is None: print("usage: " + "%s" % generate_custom_usage(usage_fcontext, usage_fcontext_dict)) sys.exit(2) elif args.action and args.equal: handle_opts(args, fcontext_equal_args, "equal") else: handle_opts(args, fcontext_args, args.action) OBJECT = object_dict['fcontext']() OBJECT.set_reload(args.noreload) if args.action is "add": if args.equal: OBJECT.add_equal(args.file_spec, args.equal) else: OBJECT.add(args.file_spec, args.type, args.ftype, args.range, args.seuser) if args.action is "modify": if args.equal: OBJECT.add_equal(args.file_spec, args.equal) else: OBJECT.modify(args.file_spec, args.type, args.ftype, args.range, args.seuser) if args.action is "delete": if args.equal: OBJECT.delete(args.file_spec, args.equal) else: OBJECT.delete(args.file_spec, args.ftype) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "extract": for i in OBJECT.customized(): print("fcontext %s" % str(i)) def setupFcontextParser(subparsers): ftype_help = ''' File Type. This is used with fcontext. Requires a file type as shown in the mode field by ls, e.g. use 'd' to match only directories or 'f' to match only regular files. The following file type options can be passed: f (regular file),d (directory),c (character device), b (block device),s (socket),l (symbolic link), p (named pipe). If you do not specify a file type, the file type will default to "all files". ''' generate_usage = generate_custom_usage(usage_fcontext, usage_fcontext_dict) fcontextParser = subparsers.add_parser('fcontext', usage=generate_usage, help=_("Manage file context mapping definitions")) parser_add_locallist(fcontextParser, "fcontext") parser_add_noheading(fcontextParser, "fcontext") parser_add_noreload(fcontextParser, "fcontext") parser_add_store(fcontextParser, "fcontext") fcontext_action = fcontextParser.add_mutually_exclusive_group(required=False) parser_add_add(fcontext_action, "fcontext") parser_add_delete(fcontext_action, "fcontext") parser_add_modify(fcontext_action, "fcontext") parser_add_list(fcontext_action, "fcontext") parser_add_extract(fcontext_action, "fcontext") parser_add_deleteall(fcontext_action, "fcontext") fcontextParser.add_argument('-e', '--equal', help=_('''Substitute target path with sourcepath when generating default label. This is used with fcontext. Requires source and target path arguments. The context labeling for the target subtree is made equivalent to that defined for the source.''')) fcontextParser.add_argument('-f', '--ftype', default="", choices=["a", "f", "d", "c", "b", "s", "l", "p"], help=_(ftype_help)) parser_add_seuser(fcontextParser, "fcontext") parser_add_type(fcontextParser, "fcontext") parser_add_range(fcontextParser, "fcontext") fcontextParser.add_argument('file_spec', nargs='?', default=None, help=_('file_spec')) fcontextParser.set_defaults(func=handleFcontext) def handleUser(args): user_args = {'list': [('selinux_name', 'seuser', 'roles'), ('')], 'add': [('locallist'), ('roles', 'selinux_name')], 'modify': [('locallist'), ('selinux_name')], 'delete': [('locallist'), ('selinux_name')], 'extract': [('locallist', 'selinux_name', 'seuser', 'role'), ('')], 'deleteall': [('locallist'), ('')]} handle_opts(args, user_args, args.action) OBJECT = object_dict['user']() OBJECT.set_reload(args.noreload) if args.action is "add": OBJECT.add(args.selinux_name, args.roles, args.level, args.range, args.prefix) if args.action is "modify": OBJECT.modify(args.selinux_name, args.roles, args.level, args.range, args.prefix) if args.action is "delete": OBJECT.delete(args.selinux_name) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "extract": for i in OBJECT.customized(): print("user %s" % str(i)) def setupUserParser(subparsers): generated_usage = generate_custom_usage(usage_user, usage_user_dict) userParser = subparsers.add_parser('user', usage=generated_usage, help=_('Manage SELinux confined users (Roles and levels for an SELinux user)')) parser_add_locallist(userParser, "user") parser_add_noheading(userParser, "user") parser_add_noreload(userParser, "user") parser_add_store(userParser, "user") user_action = userParser.add_mutually_exclusive_group(required=True) parser_add_add(user_action, "user") parser_add_delete(user_action, "user") parser_add_modify(user_action, "user") parser_add_list(user_action, "user") parser_add_extract(user_action, "user") parser_add_deleteall(user_action, "user") parser_add_level(userParser, "user") parser_add_range(userParser, "user") userParser.add_argument('-R', '--roles', default=[], action=CheckRole, help=_(''' SELinux Roles. You must enclose multiple roles within quotes, separate by spaces. Or specify -R multiple times. ''')) userParser.add_argument('-P', '--prefix', default="user", help=argparse.SUPPRESS) userParser.add_argument('selinux_name', nargs='?', default=None, help=_('selinux_name')) userParser.set_defaults(func=handleUser) def handlePort(args): port_args = {'list': [('port', 'type', 'proto'), ('')], 'add': [('locallist'), ('type', 'port', 'proto')], 'modify': [('localist'), ('port', 'proto')], 'delete': [('locallist'), ('port', 'proto')], 'extract': [('locallist', 'port', 'type', 'proto'), ('')], 'deleteall': [('locallist'), ('')]} handle_opts(args, port_args, args.action) OBJECT = object_dict['port']() OBJECT.set_reload(args.noreload) if args.action is "add": OBJECT.add(args.port, args.proto, args.range, args.type) if args.action is "modify": OBJECT.modify(args.port, args.proto, args.range, args.type) if args.action is "delete": OBJECT.delete(args.port, args.proto) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "extract": for i in OBJECT.customized(): print("port %s" % str(i)) def setupPortParser(subparsers): generated_usage = generate_custom_usage(usage_port, usage_port_dict) portParser = subparsers.add_parser('port', usage=generated_usage, help=_('Manage network port type definitions')) parser_add_locallist(portParser, "port") parser_add_noheading(portParser, "port") parser_add_noreload(portParser, "port") parser_add_store(portParser, "port") port_action = portParser.add_mutually_exclusive_group(required=True) parser_add_add(port_action, "port") parser_add_delete(port_action, "port") parser_add_modify(port_action, "port") parser_add_list(port_action, "port") parser_add_extract(port_action, "port") parser_add_deleteall(port_action, "port") parser_add_type(portParser, "port") parser_add_range(portParser, "port") parser_add_proto(portParser, "port") portParser.add_argument('port', nargs='?', default=None, help=_('port | port_range')) portParser.set_defaults(func=handlePort) def handlePkey(args): ibpkey_args = {'list': [('ibpkey', 'type', 'subnet_prefix'), ('')], 'add': [('locallist'), ('type', 'ibpkey', 'subnet_prefix')], 'modify': [('localist'), ('ibpkey', 'subnet_prefix')], 'delete': [('locallist'), ('ibpkey', 'subnet_prefix')], 'extract': [('locallist', 'ibpkey', 'type', 'subnet prefix'), ('')], 'deleteall': [('locallist'), ('')]} handle_opts(args, ibpkey_args, args.action) OBJECT = object_dict['ibpkey']() OBJECT.set_reload(args.noreload) if args.action is "add": OBJECT.add(args.ibpkey, args.subnet_prefix, args.range, args.type) if args.action is "modify": OBJECT.modify(args.ibpkey, args.subnet_prefix, args.range, args.type) if args.action is "delete": OBJECT.delete(args.ibpkey, args.subnet_prefix) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "extract": for i in OBJECT.customized(): print("ibpkey %s" % str(i)) def setupPkeyParser(subparsers): generated_usage = generate_custom_usage(usage_ibpkey, usage_ibpkey_dict) ibpkeyParser = subparsers.add_parser('ibpkey', usage=generated_usage, help=_('Manage infiniband ibpkey type definitions')) parser_add_locallist(ibpkeyParser, "ibpkey") parser_add_noheading(ibpkeyParser, "ibpkey") parser_add_noreload(ibpkeyParser, "ibpkey") parser_add_store(ibpkeyParser, "ibpkey") ibpkey_action = ibpkeyParser.add_mutually_exclusive_group(required=True) parser_add_add(ibpkey_action, "ibpkey") parser_add_delete(ibpkey_action, "ibpkey") parser_add_modify(ibpkey_action, "ibpkey") parser_add_list(ibpkey_action, "ibpkey") parser_add_extract(ibpkey_action, "ibpkey") parser_add_deleteall(ibpkey_action, "ibpkey") parser_add_type(ibpkeyParser, "ibpkey") parser_add_range(ibpkeyParser, "ibpkey") parser_add_subnet_prefix(ibpkeyParser, "ibpkey") ibpkeyParser.add_argument('ibpkey', nargs='?', default=None, help=_('pkey | pkey_range')) ibpkeyParser.set_defaults(func=handlePkey) def handleIbendport(args): ibendport_args = {'list': [('ibendport', 'type', 'ibdev_name'), ('')], 'add': [('locallist'), ('type', 'ibendport', 'ibdev_name'), ('')], 'modify': [('localist'), ('ibendport', 'ibdev_name')], 'delete': [('locallist'), ('ibendport', 'ibdev_name')], 'extract': [('locallist', 'ibendport', 'type', 'ibdev_name'), ('')], 'deleteall': [('locallist'), ('')]} handle_opts(args, ibendport_args, args.action) OBJECT = object_dict['ibendport']() OBJECT.set_reload(args.noreload) if args.action is "add": OBJECT.add(args.ibendport, args.ibdev_name, args.range, args.type) if args.action is "modify": OBJECT.modify(args.ibendport, args.ibdev_name, args.range, args.type) if args.action is "delete": OBJECT.delete(args.ibendport, args.ibdev_name) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "extract": for i in OBJECT.customized(): print("ibendport %s" % str(i)) def setupIbendportParser(subparsers): generated_usage = generate_custom_usage(usage_ibendport, usage_ibendport_dict) ibendportParser = subparsers.add_parser('ibendport', usage=generated_usage, help=_('Manage infiniband end port type definitions')) parser_add_locallist(ibendportParser, "ibendport") parser_add_noheading(ibendportParser, "ibendport") parser_add_noreload(ibendportParser, "ibendport") parser_add_store(ibendportParser, "ibendport") ibendport_action = ibendportParser.add_mutually_exclusive_group(required=True) parser_add_add(ibendport_action, "ibendport") parser_add_delete(ibendport_action, "ibendport") parser_add_modify(ibendport_action, "ibendport") parser_add_list(ibendport_action, "ibendport") parser_add_extract(ibendport_action, "ibendport") parser_add_deleteall(ibendport_action, "ibendport") parser_add_type(ibendportParser, "ibendport") parser_add_range(ibendportParser, "ibendport") parser_add_ibdev_name(ibendportParser, "ibendport") ibendportParser.add_argument('ibendport', nargs='?', default=None, help=_('ibendport')) ibendportParser.set_defaults(func=handleIbendport) def handleInterface(args): interface_args = {'list': [('interface'), ('')], 'add': [('locallist'), ('type', 'interface')], 'modify': [('locallist'), ('type', 'interface')], 'delete': [('locallist'), ('interface')], 'extract': [('locallist', 'interface', 'type'), ('')], 'deleteall': [('locallist'), ('')]} handle_opts(args, interface_args, args.action) OBJECT = object_dict['interface']() OBJECT.set_reload(args.noreload) if args.action is "add": OBJECT.add(args.interface, args.range, args.type) if args.action is "modify": OBJECT.modify(args.interface, args.range, args.type) if args.action is "delete": OBJECT.delete(args.interface) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "extract": for i in OBJECT.customized(): print("interface %s" % str(i)) def setupInterfaceParser(subparsers): generated_usage = generate_custom_usage(usage_interface, usage_interface_dict) interfaceParser = subparsers.add_parser('interface', usage=generated_usage, help=_('Manage network interface type definitions')) parser_add_locallist(interfaceParser, "interface") parser_add_noheading(interfaceParser, "interface") parser_add_noreload(interfaceParser, "interface") parser_add_store(interfaceParser, "interface") parser_add_type(interfaceParser, "interface") parser_add_range(interfaceParser, "interface") interface_action = interfaceParser.add_mutually_exclusive_group(required=True) parser_add_add(interface_action, "interface") parser_add_delete(interface_action, "interface") parser_add_modify(interface_action, "interface") parser_add_list(interface_action, "interface") parser_add_extract(interface_action, "interface") parser_add_deleteall(interface_action, "interface") interfaceParser.add_argument('interface', nargs='?', default=None, help=_('interface_spec')) interfaceParser.set_defaults(func=handleInterface) def handleModule(args): from seobject import moduleRecords OBJECT = moduleRecords(store) OBJECT.set_reload(args.noreload) if args.action == "add": OBJECT.add(args.module_name, args.priority) if args.action == "enable": OBJECT.set_enabled(args.module_name, True) if args.action == "disable": OBJECT.set_enabled(args.module_name, False) if args.action == "remove": OBJECT.delete(args.module_name, args.priority) if args.action is "deleteall": OBJECT.deleteall() if args.action == "list": OBJECT.list(args.noheading, args.locallist) if args.action is "extract": for i in OBJECT.customized(): print("module %s" % str(i)) def setupModuleParser(subparsers): moduleParser = subparsers.add_parser('module', help=_('Manage SELinux policy modules')) parser_add_noheading(moduleParser, "module") parser_add_noreload(moduleParser, "module") parser_add_store(moduleParser, "module") parser_add_locallist(moduleParser, "module") parser_add_priority(moduleParser, "module") mgroup = moduleParser.add_mutually_exclusive_group(required=True) parser_add_add(mgroup, "module") parser_add_list(mgroup, "module") parser_add_extract(mgroup, "module") parser_add_deleteall(mgroup, "module") mgroup.add_argument('-r', '--remove', dest='action', action='store_const', const='remove', help=_("Remove a module")) mgroup.add_argument('-d', '--disable', dest='action', action='store_const', const='disable', help=_("Disable a module")) mgroup.add_argument('-e', '--enable', dest='action', action='store_const', const='enable', help=_("Enable a module")) moduleParser.add_argument('module_name', nargs='?', default=None, help=_('Name of the module to act on')) moduleParser.set_defaults(func=handleModule) def handleNode(args): node_args = {'list': [('node', 'type', 'proto', 'netmask'), ('')], 'add': [('locallist'), ('type', 'node', 'proto', 'netmask')], 'modify': [('locallist'), ('node', 'netmask', 'proto')], 'delete': [('locallist'), ('node', 'netmask', 'prototype')], 'extract': [('locallist', 'node', 'type', 'proto', 'netmask'), ('')], 'deleteall': [('locallist'), ('')]} handle_opts(args, node_args, args.action) OBJECT = object_dict['node']() OBJECT.set_reload(args.noreload) if args.action is "add": OBJECT.add(args.node, args.netmask, args.proto, args.range, args.type) if args.action is "modify": OBJECT.modify(args.node, args.netmask, args.proto, args.range, args.type) if args.action is "delete": OBJECT.delete(args.node, args.netmask, args.proto) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "extract": for i in OBJECT.customized(): print("node %s" % str(i)) def setupNodeParser(subparsers): generated_usage = generate_custom_usage(usage_node, usage_node_dict) nodeParser = subparsers.add_parser('node', usage=generated_usage, help=_('Manage network node type definitions')) parser_add_locallist(nodeParser, "node") parser_add_noheading(nodeParser, "node") parser_add_noreload(nodeParser, "node") parser_add_store(nodeParser, "node") node_action = nodeParser.add_mutually_exclusive_group(required=True) parser_add_add(node_action, "node") parser_add_delete(node_action, "node") parser_add_modify(node_action, "node") parser_add_list(node_action, "node") parser_add_extract(node_action, "node") parser_add_deleteall(node_action, "node") nodeParser.add_argument('-M', '--netmask', help=_('Network Mask')) parser_add_type(nodeParser, "node") parser_add_range(nodeParser, "node") parser_add_proto(nodeParser, "node") nodeParser.add_argument('node', nargs='?', default=None, help=_('node')) nodeParser.set_defaults(func=handleNode) def handleBoolean(args): boolean_args = {'list': [('state', 'boolean'), ('')], 'modify': [('localist'), ('')], 'extract': [('locallist', 'state', 'boolean'), ('')], 'deleteall': [('locallist'), ('')], 'state': [('locallist', 'list', 'extract', 'deleteall'), ('modify')]} if args.action is None: print("Usage: " + "%s" % generate_custom_usage(usage_boolean, usage_boolean_dict)) sys.exit(2) # TODO: should be added to handle_opts logic elif args.action is "modify" and not args.boolean: print("boolean name required ") sys.exit(1) elif args.action is "modify" and args.boolean and not args.state: print("state option is needed") sys.exit(1) else: handle_opts(args, boolean_args, args.action) OBJECT = object_dict['boolean']() OBJECT.set_reload(args.noreload) if args.action is "modify": if args.boolean: OBJECT.modify(args.boolean, args.state, False) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "extract": for i in OBJECT.customized(): print("boolean %s" % str(i)) def setupBooleanParser(subparsers): generated_usage = generate_custom_usage(usage_boolean, usage_boolean_dict) booleanParser = subparsers.add_parser('boolean', usage=generated_usage, help=_('Manage booleans to selectively enable functionality')) parser_add_locallist(booleanParser, "boolean") parser_add_noheading(booleanParser, "boolean") parser_add_noreload(booleanParser, "boolean") parser_add_store(booleanParser, "boolean") booleanParser.add_argument('boolean', nargs="?", default=None, help=_('boolean')) boolean_action = booleanParser.add_mutually_exclusive_group(required=False) #add_add(boolean_action) parser_add_modify(boolean_action, "boolean") parser_add_list(boolean_action, "boolean") parser_add_extract(boolean_action, "boolean") parser_add_deleteall(boolean_action, "boolean") booleanGroup = booleanParser.add_mutually_exclusive_group(required=False) booleanGroup.add_argument('-1', '--on', dest='state', action='store_const', const='on', help=_('Enable the boolean')) booleanGroup.add_argument('-0', '--off', dest='state', action='store_const', const='off', help=_('Disable the boolean')) booleanParser.set_defaults(func=handleBoolean) def handlePermissive(args): OBJECT = object_dict['permissive']() OBJECT.set_reload(args.noreload) if args.action is "list": OBJECT.list(args.noheading) elif args.type != None: if args.action is "add": OBJECT.add(args.type) if args.action is "delete": OBJECT.delete(args.type) else: args.parser.print_usage(sys.stderr) sys.stderr.write(_('semanage permissive: error: the following argument is required: type\n')) sys.exit(1) def setupPermissiveParser(subparsers): permissiveParser = subparsers.add_parser('permissive', help=_('Manage process type enforcement mode')) pgroup = permissiveParser.add_mutually_exclusive_group(required=True) parser_add_add(pgroup, "permissive") parser_add_delete(pgroup, "permissive") parser_add_list(pgroup, "permissive") #TODO: probably should be also added => need to implement own option handling #parser_add_deleteall(pgroup) parser_add_noheading(permissiveParser, "permissive") parser_add_noreload(permissiveParser, "permissive") parser_add_store(permissiveParser, "permissive") permissiveParser.add_argument('type', nargs='?', default=None, help=_('type')) permissiveParser.set_defaults(func=handlePermissive) permissiveParser.set_defaults(parser=permissiveParser) def handleDontaudit(args): OBJECT = object_dict['dontaudit']() OBJECT.set_reload(args.noreload) OBJECT.toggle(args.action) def setupDontauditParser(subparsers): dontauditParser = subparsers.add_parser('dontaudit', help=_('Disable/Enable dontaudit rules in policy')) parser_add_noreload(dontauditParser, "dontaudit") parser_add_store(dontauditParser, "dontaudit") dontauditParser.add_argument('action', choices=["on", "off"]) dontauditParser.set_defaults(func=handleDontaudit) def handleExport(args): manageditems = ["boolean", "login", "interface", "user", "port", "node", "fcontext", "module", "ibendport", "ibpkey"] for i in manageditems: print("%s -D" % i) for i in manageditems: OBJECT = object_dict[i]() for c in OBJECT.customized(): print("%s %s" % (i, str(c))) sys.exit(0) def setupExportParser(subparsers): exportParser = subparsers.add_parser('export', help=_('Output local customizations')) parser_add_store(exportParser, "export") exportParser.add_argument('-f', '--output_file', dest='output_file', action=SetExportFile, help=_('Output file')) exportParser.set_defaults(func=handleExport) import re def mkargv(line): dquote = "\"" squote = "\'" l = line.split() ret = [] i = 0 while i < len(l): cnt = len(re.findall(dquote, l[i])) if cnt > 1: ret.append(l[i].strip(dquote)) i = i + 1 continue if cnt == 1: quote = [l[i].strip(dquote)] i = i + 1 while i < len(l) and dquote not in l[i]: quote.append(l[i]) i = i + 1 quote.append(l[i].strip(dquote)) ret.append(" ".join(quote)) i = i + 1 continue cnt = len(re.findall(squote, l[i])) if cnt > 1: ret.append(l[i].strip(squote)) i = i + 1 continue if cnt == 1: quote = [l[i].strip(squote)] i = i + 1 while i < len(l) and squote not in l[i]: quote.append(l[i]) i = i + 1 quote.append(l[i].strip(squote)) ret.append(" ".join(quote)) i = i + 1 continue ret.append(l[i]) i = i + 1 return ret def handleImport(args): from seobject import semanageRecords trans = semanageRecords(store) trans.start() for l in sys.stdin.readlines(): if len(l.strip()) == 0: continue try: commandParser = createCommandParser() args = commandParser.parse_args(mkargv(l)) args.func(args) except ValueError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e))) sys.exit(1) except IOError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e))) sys.exit(1) except KeyboardInterrupt: sys.exit(0) trans.set_reload(args.noreload) trans.finish() def setupImportParser(subparsers): importParser = subparsers.add_parser('import', help=_('Import local customizations')) parser_add_noreload(importParser, "import") parser_add_store(importParser, "import") importParser.add_argument('-f', '--input_file', dest='input_file', action=SetImportFile, help=_('Input file')) importParser.set_defaults(func=handleImport) def createCommandParser(): commandParser = seParser(prog='semanage', formatter_class=argparse.ArgumentDefaultsHelpFormatter, description='''semanage is used to configure certain elements of SELinux policy with-out requiring modification to or recompilation from policy source.''') #To add a new subcommand define the parser for it in a function above and call it here. subparsers = commandParser.add_subparsers(dest='subcommand') setupImportParser(subparsers) setupExportParser(subparsers) setupLoginParser(subparsers) setupUserParser(subparsers) setupPortParser(subparsers) setupPkeyParser(subparsers) setupIbendportParser(subparsers) setupInterfaceParser(subparsers) setupModuleParser(subparsers) setupNodeParser(subparsers) setupFcontextParser(subparsers) setupBooleanParser(subparsers) setupPermissiveParser(subparsers) setupDontauditParser(subparsers) return commandParser def make_io_args(args): # import/export backward compability args_origin = ["-S", "-o", "-i", "targeted", "minimum", "mls"] args_file = [] args_ie = [] args_subcommand = [] for i in args: if i == "-o": args_subcommand = ["export"] continue if i == "-i": args_subcommand = ["import"] continue if i not in args_origin: args_file = ["-f", i] continue args_ie.append(i) return args_subcommand + args_ie + args_file def make_args(sys_args): if len(sys_args) == 1: return [ "-h" ] args = [] if "-o" in sys_args[1:] or "-i" in sys_args[1:]: args = make_io_args(sys_args[1:]) else: args = sys_args[1:] return args def do_parser(): try: commandParser = createCommandParser() args = commandParser.parse_args(make_args(sys.argv)) args.func(args) sys.exit(0) except IOError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e))) sys.exit(1) except KeyboardInterrupt: sys.exit(0) except ValueError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0])) sys.exit(1) except KeyError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0])) sys.exit(1) except OSError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[1])) sys.exit(1) except RuntimeError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0])) sys.exit(1) if __name__ == '__main__': do_parser()