[Pkg-sysvinit-devel] Bug#697003: initscripts: postinst fails: mv /dev/shm/* misses dot (hidden) files

Steven Chamberlain steven at pyro.eu.org
Sun Dec 30 20:29:51 UTC 2012


Control: severity -1 minor

On 30/12/12 19:07, Roger Leigh wrote:
> Does /dev/shm exist on a standard kFreeBSD install?

It gets created by initscripts as symlink to /run/shm.  Otherwise it
would not be there;  apparently Linux 2.6 invented it and it didn't seem
too popular with upstream FreeBSD.

> It's a glibc requirement.

I didn't know this.  Software running in the jails fortunately seems to
be using /run/shm properly.

Within jails, I cannot write to /dev (even as root) so shm cannot be
created as a directory or symlink.  But as an alternative I can create
it from the host system before booting, so that will do as a workaround
and for compatibility.

Jails, and how to use them, are still a bit experimental/undocumented
for GNU/kFreeBSD.  Thanks for your input on this;  I'll make sure this
gets written up somewhere.


>> + ls -A /run/shm
>> + [ .tmpfs !=  ]
>>
>> This command indicates there is a file in this folder, called .tmpfs
>> (though it isn't really a tmpfs), and so:
> 
> Why does this file exist here?

It's timestamped from when the jailed system booted, which would have
been with initscripts 2.88dsf-32.

It seems to be created by mount_shm in mount-functions.sh.  Is it
missing from the cleanup here in bootmisc?

# Remove bootclean's flag files.
# Don't run bootclean again after this!
rm -f /tmp/.clean /lib/init/rw/.clean /run/.clean /run/lock/.clean
rm -f /tmp/.tmpfs /lib/init/rw/.tmpfs /run/.tmpfs /run/lock/.tmpfs

While here - could neaten this up a little:

for dir in /lib/init/rw /tmp /run /run/lock /run/shm; do
	rm -f "$dir/.clean" "$dir/.tmpfs"
done


>> On the other hand, if there'd been some non-hidden files/directories
>> there, they would be moved, but any remaining hidden ones would be
>> deleted(!).
> 
> For the use case in question (in chroots) this is by design.
> There is no use case for dotfiles in /dev/shm.

In that case, the "ls -A" flag is unnecessary?  A plain "ls" would
determine if anything in that directory needs keeping.  And the error
with "mv" would be avoided.


> This is certainly safer.  However, we should be catering for this
> already--we shouldn't be doing any modification of /dev if it's
> a mountpoint of any sort.

I'm not sure exactly what you mean by modification, but at least for the
mmdd|mddd cases it will try to move files to /dev/shm

Maybe it's not a realistic situation, but since there is no trailing
slash, if /dev/shm didn't exist, a malicious user could have created in
advance:

1. a symlink /run/shm/oops -> /etc (which gets placed first as /dev/shm)
2. regular file /run/shm/passwd (which gets written over /etc/passwd)


> Currently we are making
> the assumption that it will be present, and I'm not sure if that's
> a bug or not.

I'm not sure either.  The above issue poses a security risk, so I'd
consider adding a trailing slash (so that "mv" fails with an error
instead);  I guess it is unlikely though and so needn't be fixed with
any urgency.

Thanks!

Regards,
-- 
Steven Chamberlain
steven at pyro.eu.org



More information about the Pkg-sysvinit-devel mailing list