Skip to main content

linux - "Operation not permitted" on files over 2GB on ext4 filesystem

itemprop="text">


I have a bit of a mystery.
I have an Ubuntu 17.04 system (upgraded from 16.04 LTS) using ext4 as it's main
filesystem.
I used wget and curl to download a 2.3GB iso, but i cannot mount
it. In fact, I cannot do any operation on it: md5sum, wc, cat, mount -o loop, etc...
without getting an "operation not permitted". I can "rm" it, though. I am root, and the
perms on the file are 644. I cannot do an "lsattr" nor "chattr" on it without "operation
not permitted".
I have proven that it's exactly related to the filesize as I
did this:
dd if=/dev/zero of=/tmp/test.iso bs=1M count=2047
and I am
able to read test.iso as it's 1M less than 2G, but if i change it to 2048, I am unable
to read the file.
I understand that ext4 has a bare minimum limit of 16GB, but
I am way under that. The files appear to be created just
fine.



I did a thorough search before posting and
nothing is related to my problem. No, it's not FAT. It's ext4. I see no errors in dmesg
after accessing the file, as this would show apparmour errors. I doubt it's an immutable
perm as I don't even have permission to lsattr on it.
I have an almost
identical Ubuntu 17.04 system and it works fine (except that was installed fresh instead
of via upgrade from 16.04).




If I
write to /dev/shm instead of /tmp, I can md5sum a 3GB file just fine... so there's
something related to the way it's mounting /. /dev/shm is obviously a different
mountpoint and not ext4.




# ls -l
asm8.iso
-rw-r--r-- 1 root root 2253135872 Jan 15 20:27
asm8.iso



# md5sum
asm8.iso
md5sum: asm8.iso: Operation not
permitted




#
strace -f md5sum asm8.iso
...
open("asm8.iso", O_RDONLY) = -1 EPERM
(Operation not
permitted)
...




#
lsattr asm8.iso
lsattr: Operation not permitted While reading flags on
asm8.iso



# mount |grep
" / "
/dev/mapper/asci--vg-root on / type ext4
(rw,relatime,errors=remount-ro,data=ordered)




#
tune2fs -l /dev/mapper/asci--vg-root

...
Filesystem
features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent
flex_bg sparse_super large_file huge_file uninit_bg dir_nlink
extra_isize
Filesystem flags: signed_directory_hash
Filesystem
state: clean
Filesystem OS type:
Linux
...



I
compared the working system, and the only difference is that it doesnt have uninit_bg,
and has 2 extras: 64bit,metadata_csum. I researched these flags and they don't seem to
be relevant to the issue.



Does anyone have any
ideas? If you want to see the output of any command, I will gladly share
them.
Thanks in advance.



Here is the
extra info:




# df
-h
Filesystem Size Used Avail Use% Mounted on

udev 7.9G 0
7.9G 0% /dev
tmpfs 1.6G 114M 1.5G 8% /run
/dev/mapper/asci--vg-root
992G 643G 299G 69% /
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M
0% /run/lock
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/sda1 472M 116M
332M 26% /boot
tmpfs 1.6G 0 1.6G 0% /run/user/999
tmpfs 1.6G 0 1.6G
0% /run/user/1003
tmpfs 1.6G 0 1.6G 0% /run/user/0

tmpfs
1.6G 0 1.6G 0%
/run/user/1008



# df
-i
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 2046118 419
2045699 1% /dev
tmpfs 2051789 712 2051077 1%
/run
/dev/mapper/asci--vg-root 66035712 3469883 62565829 6% /
tmpfs
2051789 1 2051788 1% /dev/shm

tmpfs 2051789 5 2051784 1%
/run/lock
tmpfs 2051789 16 2051773 1% /sys/fs/cgroup
/dev/sda1
124928 315 124613 1% /boot
tmpfs 2051789 5 2051784 1%
/run/user/999
tmpfs 2051789 5 2051784 1% /run/user/1003
tmpfs
2051789 5 2051784 1% /run/user/0
tmpfs 2051789 5 2051784 1%
/run/user/1008




#
cat /etc/fstab
# /etc/fstab: static file system
information.
#
# Use 'blkid' to print the universally unique
identifier for a
# device; this may be used with UUID= as a more robust way to
name devices
# that works even if disks are added and removed. See
fstab(5).
#
#
/dev/mapper/asci--vg-root / ext4
errors=remount-ro 0 1
# /boot was on /dev/sda1 during
installation

UUID=20926db6-5e54-4907-912a-5fe996f45adc /boot ext2
defaults
0 2
/dev/mapper/asci--vg-swap_1 none swap sw 0
0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0
0


It's not a directory issue as the
files are created fine in the same directory:
I can create the 2
files.





root@asci
/tmp
# dd if=/dev/zero of=/tmp/file2047.iso bs=1M count=2047
2047+0
records in
2047+0 records out
2146435072 bytes (2.1 GB, 2.0 GiB)
copied, 6.46013 s, 332 MB/s

root@asci /tmp
# dd
if=/dev/zero of=/tmp/file2048.iso bs=1M count=2048
2048+0 records
in
2048+0 records out

2147483648 bytes (2.1 GB, 2.0 GiB)
copied, 60.2936 s, 35.6 MB/s

root@asci /tmp
# ls -ls
/tmp/file*.iso
2096132 -rw-r--r-- 1 root root 2146435072 Jan 19 05:52
/tmp/file2047.iso
2097156 -rw-r--r-- 1 root root 2147483648 Jan 19 05:53
/tmp/file2048.iso


Even though
md5sum, cat and wc all say "operation not permitted", it seems as though I can run file
and stat on them:





# file
*.iso
file2047.iso: data
file2048.iso: writable, regular file, no
read permission


Here's stat. I
don't see notable differences.




#
stat *.iso

File: file2047.iso
Size: 2146435072 Blocks:
4192264 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 7380361 Links:
1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access:
2018-01-19 05:52:30.925760162 +0100
Modify: 2018-01-19 05:52:30.921760136
+0100
Change: 2018-01-19 05:52:30.921760136 +0100
Birth:
-
File: file2048.iso
Size: 2147483648 Blocks: 4194312 IO Block:
4096 regular file

Device: fd00h/64768d Inode: 7380363 Links:
1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access:
2018-01-19 05:52:36.765797317 +0100
Modify: 2018-01-19 05:53:37.034180299
+0100
Change: 2018-01-19 05:53:37.034180299 +0100
Birth:
-


I'm not an apparmor expert, but
rather than go through a learning curve, I just disabled it and you can see that it's
still a problem. I suspected it wasn't the issue because I think that "dmesg" should
report apparmor blocking messages and there was no new dmesg output during my
tests.





# service
apparmor stop

root@asci /tmp
# service apparmor
teardown
* Unloading AppArmor profiles

...done.

root@asci /tmp
# update-rc.d -f apparmor
remove


root@asci /tmp
# wc -c
file2048.iso
wc: file2048.iso: Operation not
permitted



OMG. What
finally fixed it was "apt remove apparmor; reboot".
Now it works.
So
it must've been an apparmor profile. I don't use it, so something in the default
apparmor settings is preventing the viewing of files over 2G.

Does
anyone have any idea what setting that might be? I will have to reinstall now to
know.



Answer




I have solved my problem. The reason for not
being able to access files over 2GB in size is due to my antivirus software (McAfee for
Linux - Endpoint Security for Linux Threat Prevention). It was not due to apparmor,
funky filesystem options, permissions, disk space or older
filesystems.



Here is how I came to my
conclusion. The troubleshooting steps might be interesting.
Immediately
following a reboot, I can quickly create a 2G file and probe it like
so:




root@asci /tmp
# dd
if=/dev/zero of=/tmp/file2049.iso bs=1M count=2049

2049+0 records
in
2049+0 records out
2148532224 bytes (2.1 GB, 2.0 GiB) copied,
2.05888 s, 1.0 GB/s

root@asci /tmp
# md5sum
file2049.iso
4555da35a7064cc499ba1e3f6fa1993a
file2049.iso


Within a minute, the
md5sum no longer works.




To rule out
crontabs, I disabled crontab, and also wrote a 1-liner script to output 0 upon
successful read and 1 if unsuccessful. Notice that it breaks at the 40'th second
(indicating most likely not a cron
job):




# while [ 1 == 1 ]; do echo
-n "`date` - ";dd if=asm8.iso bs=1M count=30 2>&1|grep -c "Operation not permi";
sleep 1;date >> /var/log/ps.log; ps -efww >> /var/log/ps.log;
done
Fri Jan 19 18:57:28 CET 2018 - 0
Fri Jan 19 18:57:30 CET 2018 -
0
Fri Jan 19 18:57:31 CET 2018 - 0
Fri Jan 19 18:57:32 CET 2018 -
0
Fri Jan 19 18:57:33 CET 2018 - 0

Fri Jan 19 18:57:34
CET 2018 - 0
Fri Jan 19 18:57:35 CET 2018 - 0
Fri Jan 19 18:57:36
CET 2018 - 0
Fri Jan 19 18:57:37 CET 2018 - 0
Fri Jan 19 18:57:38
CET 2018 - 0
Fri Jan 19 18:57:39 CET 2018 - 0
Fri Jan 19 18:57:40
CET 2018 - 1
Fri Jan 19 18:57:41 CET 2018 - 1
Fri Jan 19 18:57:42
CET 2018 - 1
Fri Jan 19 18:57:43 CET 2018 - 1

Fri Jan 19
18:57:44 CET 2018 - 1


I only dd the
start of the file, as that's all I need to test it, as it takes 48 seconds to read the
entire thing. I logged the ps output to /var/log/ps.log. To do a diff on the ps output
by comparing what changed between the 39th second and 40th second, I did
this:




# cat ps.log |grep "Fri Jan
19 18:57:39 CET 2018" -A10000 |grep "Fri Jan 19 18:57:40 CET 2018" -B10000 >
/tmp/ps39
# cat ps.log |grep "Fri Jan 19 18:57:40 CET 2018" -A10000 |grep "Fri
Jan 19 18:57:41 CET 2018" -B10000 > /tmp/ps40
# cd
/tmp



Comparing the ps
outputs between the 39th and 40th
second:




# diff ps39 ps40

Fri Jan 19 18:57:40 CET 2018
266c266
root 2412 1276 97 18:57 ?
00:00:19 /opt/isec/ens/threatprevention/bin/isectpd
275,276c275,278

root 2632 2412 1 18:57 ? 00:00:00
/opt/isec/ens/threatprevention/bin/isectpd

> root 2635 2412 11
18:57 ? 00:00:00 /opt/isec/ens/threatprevention/bin/isectpd
> root 2663
2518 0 18:57 pts/1 00:00:00 ps
-efww


So, that's it! Once the
isectpd process started up at the 40th second, it disabled access to my 2GB
file.



Once I did
this:




# systemctl stop
isectpd



It started
working.
Obviously, this is a bandaid until I find out how to allow > 2GB
files from McAfee. If anyone has any experience with this, feel free to chime
in.



Cheers.



Comments

Popular posts from this blog

linux - iDRAC6 Virtual Media native library cannot be loaded

When attempting to mount Virtual Media on a iDRAC6 IP KVM session I get the following error: I'm using Ubuntu 9.04 and: $ javaws -version Java(TM) Web Start 1.6.0_16 $ uname -a Linux aud22419-linux 2.6.28-15-generic #51-Ubuntu SMP Mon Aug 31 13:39:06 UTC 2009 x86_64 GNU/Linux $ firefox -version Mozilla Firefox 3.0.14, Copyright (c) 1998 - 2009 mozilla.org On Windows + IE it (unsurprisingly) works. I've just gotten off the phone with the Dell tech support and I was told it is known to work on Linux + Firefox, albeit Ubuntu is not supported (by Dell, that is). Has anyone out there managed to mount virtual media in the same scenario?

hp proliant - Smart Array P822 with HBA Mode?

We get an HP DL360 G8 with an Smart Array P822 controller. On that controller will come a HP StorageWorks D2700 . Does anybody know, that it is possible to run the Smart Array P822 in HBA mode? I found only information about the P410i, who can run HBA. If this is not supported, what you think about the LSI 9207-8e controller? Will this fit good in that setup? The Hardware we get is used but all original from HP. The StorageWorks has 25 x 900 GB SAS 10K disks. Because the disks are not new I would like to use only 22 for raid6, and the rest for spare (I need to see if the disk count is optimal or not for zfs). It would be nice if I'm not stick to SAS in future. As OS I would like to install debian stretch with zfs 0.71 as file system and software raid. I have see that hp has an page for debian to. I would like to use hba mode because it is recommend, that zfs know at most as possible about the disk, and I'm independent from the raid controller. For us zfs have many benefits,

apache 2.2 - Server Potentially Compromised -- c99madshell

So, low and behold, a legacy site we've been hosting for a client had a version of FCKEditor that allowed someone to upload the dreaded c99madshell exploit onto our web host. I'm not a big security buff -- frankly I'm just a dev currently responsible for S/A duties due to a loss of personnel. Accordingly, I'd love any help you server-faulters could provide in assessing the damage from the exploit. To give you a bit of information: The file was uploaded into a directory within the webroot, "/_img/fck_uploads/File/". The Apache user and group are restricted such that they can't log in and don't have permissions outside of the directory from which we serve sites. All the files had 770 permissions (user rwx, group rwx, other none) -- something I wanted to fix but was told to hold off on as it wasn't "high priority" (hopefully this changes that). So it seems the hackers could've easily executed the script. Now I wasn't able