Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
BINDFS(1)		    General Commands Manual		     BINDFS(1)

NAME
       bindfs -	mount --bind in	user-space

SYNOPSIS
       bindfs [options]	dir mountpoint

DESCRIPTION
       A  FUSE filesystem for mirroring	the contents of	a directory to another
       directory, with changes to permissions and other	features.

FILE OWNERSHIP
       -u, --force-user, -o force-user=...
	      Makes all	files owned by the specified user.  Also causes	 chown
	      on the mounted filesystem	to always fail.

       -g, --force-group=group,	-o force-group=...
	      Makes all	files owned by the specified group.  Also causes chgrp
	      on the mounted filesystem	to always fail.

       -p, --perms=permissions,	-o perms=...
	      Takes  a comma- or colon-separated list of chmod-like permission
	      specifications to	be applied to the permission  bits  in	order.
	      See PERMISSION SPECIFICATION below for details.

	      This  only affects how the permission bits of existing files are
	      altered when shown in the	mounted	directory. You can use	--cre-
	      ate-with-perms  to  change  the  permissions  that newly created
	      files get	in the source directory.

	      Note that, as usual, the root user isn't bound  by  the  permis-
	      sions  set  here.	  You can get a	truly read-only	mount by using
	      -r.

       -m, --mirror=user1:user2:..., -o	mirror=...
	      Takes a comma- or	colon-separated	list of	 users	who  will  see
	      themselves  as the owners	of all files. Users who	are not	listed
	      here will	still be able to access	the mount if  the  permissions
	      otherwise	allow them to.

	      You  can	also  give a group name	prefixed with an '@' to	mirror
	      all members of a group. This will	not  change  which  group  the
	      files are	shown to have.

       -M, --mirror-only=user1:user2:..., -o mirror-only=...
	      Like  --mirror  but disallows access for all other users (except
	      root).

       --map=user1/user2:@group1/@group2:..., -o map=...
	      Given a mapping user1/user2, all files owned by user1 are	 shown
	      as owned by user2. When user2 creates files, they	are chowned to
	      user1  in	 the  underlying  directory. When files	are chowned to
	      user2, they are chowned to user1 in  the	underlying  directory.
	      Works similarly for groups.

	      A	 single	user or	group may appear no more than once on the left
	      and once on the right of a slash in the list of mappings.	  Cur-
	      rently,	the  options  --force-user,  --force-group,  --mirror,
	      --create-for-*, --chown-*	and --chgrp-* override the correspond-
	      ing behavior of this option.

	      Requires mounting	as root.

       --map-passwd=<passwdfile>, -o map-passwd=<passwdfile>
       --map-group=<groupfile>,	-o map-group=<groupfile>
	      Like --map=..., but reads	the  UID  (GID)	 mapping  from	passwd
	      (group)  file  (like /etc/passwd and /etc/group).	Maps UID (GID)
	      provided in the <passwdfile> (<groupfile>) to its	 corresponding
	      user (group) name.  Helpful to restore system backups where UIDs
	      and GIDs differ.

	      Example usage:

		  bindfs --map-passwd=/mnt/orig/etc/passwd \
		      --map-group=/mnt/orig/etc/group \
		      /mnt/orig	/mnt/mapped

	      Requires mounting	as root.

       --map-passwd-rev=<passwdfile>, -o map-passwd-rev=<passwdfile>
       --map-group-rev=<groupfile>, -o map-group-rev=<groupfile>
	      Reversed	 variant   of	--map-passwd   and  --map-group.  Like
	      --map=..., but reads the UID (GID) mapping from  passwd  (group)
	      files  (like /etc/passwd and /etc/group).	Maps user (group) name
	      provided in the <passwdfile> (<groupfile>) to its	 corresponding
	      UID  (GID).   Helpful  to	 create	compatible chroot environments
	      where UIDs and GIDs differ.

	      Example usage:

		  bindfs --map-passwd-rev=/mnt/mapped/etc/passwd \
		      --map-group-rev=/mnt/mapped/etc/group \
		      /mnt/orig	/mnt/mapped

	      Requires mounting	as root.

       --uid-offset=..., -o uid-offset=...
	      Works like --map,	but adds the given number to  all  file	 owner
	      user IDs.	 For instance, --uid-offset=100000 causes a file owned
	      by user 123 to be	shown as owned by user 100123.

	      For  now,	this option cannot be used together with --map.	Please
	      file an issue with the desired semantics if you have a case  for
	      using them together.

	      Requires mounting	as root.

       --gid-offset=..., -o gid-offset=...
	      Works exactly like --uid-offset but for groups.

FILE CREATION POLICY
       New files and directories are created so	they are owned by the mounter.
       bindfs  can  let	 this happen (the default for normal users), or	it can
       try to change the owner to the uid/gid of the  process  that  wants  to
       create  the  file  (the default for root).  It is also possible to have
       bindfs try to change the	owner to a particular user or group.

       --create-as-user, -o create-as-user
	      Tries to change the owner	and group of new files and directories
	      to the uid and gid of the	caller.	This  can  work	 only  if  the
	      mounter  is  root.   It  is also the default behavior (mimicking
	      mount --bind) if the mounter is root.

       --create-as-mounter, -o create-as-mounter
	      All new files and	directories will  be  owned  by	 the  mounter.
	      This is the default behavior for non-root	mounters.

       --create-for-user=user, -o create-for-user=...
	      Tries  to	 change	 the owner of new files	and directories	to the
	      user specified here.  This can work only if the mounter is root.
	      This  option   overrides	 the   --create-as-user	  and	--cre-
	      ate-as-mounter options.

       --create-for-group=group, -o create-for-group=...
	      Tries to change the owning group of new files and	directories to
	      the  group specified here.  This can work	only if	the mounter is
	      root.  This option overrides  the	 --create-as-user  and	--cre-
	      ate-as-mounter options.

       --create-with-perms=permissions,	-o create-with-perms=...
	      Works  like --perms but is applied to the	permission bits	of new
	      files get	in the source directory.  Normally the permissions  of
	      new  files  depend  on  the  creating  process's preferences and
	      umask.  This option can be used to modify	those  permissions  or
	      override	them  completely.   See	PERMISSION SPECIFICATION below
	      for details.

CHOWN/CHGRP POLICY
       The behaviour on	chown/chgrp calls can be changed. By default they  are
       passed  through to the source directory even if bindfs is set to	show a
       fake owner/group. A chown/chgrp call will only succeed if the user  has
       enough  mirrored	permissions to chmod the mirrored file AND the mounter
       has enough permissions to chmod the real	file.

       --chown-normal, -o chown-normal
	      Tries to chown the underlying file. This is the default.

       --chown-ignore, -o chown-ignore
	      Lets chown succeed (if the user has enough mirrored permissions)
	      but actually does	nothing. A combined chown/chgrp	is effectively
	      turned into a chgrp-only request.

       --chown-deny, -o	chown-deny
	      Makes chown always fail with a  'permission  denied'  error.   A
	      combined chown/chgrp request will	fail as	well.

       --chgrp-normal, -o chgrp-normal
	      Tries to chgrp the underlying file. This is the default.

       --chgrp-ignore, -o chgrp-ignore
	      Lets chgrp succeed (if the user has enough mirrored permissions)
	      but actually does	nothing. A combined chown/chgrp	is effectively
	      turned into a chown-only request.

       --chgrp-deny, -o	chgrp-deny
	      Makes  chgrp  always  fail  with a 'permission denied' error.  A
	      combined chown/chgrp request will	fail as	well.

CHMOD POLICY
       Chmod calls are forwarded to the	source directory by default.  This may
       cause unexpected	behaviour if bindfs is altering	permission bits.

       --chmod-normal, -o chmod-normal
	      Tries to chmod the underlying file. This	will  succeed  if  the
	      user  has	the appropriate	mirrored permissions to	chmod the mir-
	      rored file AND the mounter has enough permissions	to  chmod  the
	      real  file.   This is the	default	(in order to behave like mount
	      --bind by	default).

       --chmod-ignore, -o chmod-ignore
	      Lets chmod succeed (if the user has enough mirrored permissions)
	      but actually does	nothing.

       --chmod-deny, -o	chmod-deny
	      Makes chmod always fail with a 'permission denied' error.

       --chmod-filter=permissions, -o chmod-filter=...
	      Changes the permission bits of a chmod request before it is  ap-
	      plied  to	 the original file. Accepts the	same permission	syntax
	      as --perms.  See PERMISSION SPECIFICATION	below for details.

       --chmod-allow-x,	-o chmod-allow-x
	      Allows setting and clearing the executable  attribute  on	 files
	      (but  not	 directories).	When  used with	--chmod-ignore,	chmods
	      will only	affect execute bits on files and changes to other bits
	      are discarded.  With --chmod-deny, all chmods that would	change
	      any  bits	 except	 execute  bits on files	will still fail	with a
	      'permission denied'.  This option	does nothing with --chmod-nor-
	      mal.

XATTR POLICY
       Extended	attributes are mirrored	by default, though not all  underlying
       file systems support xattrs.

       --xattr-none, -o	xattr-none
	      Disable  extended	attributes altogether. All operations will re-
	      turn 'Operation not supported'.

       --xattr-ro, -o xattr-ro
	      Let extended attributes be read-only.

       --xattr-rw, -o xattr-rw
	      Let  extended  attributes	 be  read-write	 (the  default).   The
	      read/write  permissions  are checked against the (possibly modi-
	      fied) file permissions inside the	mount.

OTHER FILE OPERATIONS
       --delete-deny, -o delete-deny
	      Makes all	file delete operations fail  with  a  'permission  de-
	      nied'.   By  default,  files  can	still be modified if they have
	      write permission,	and renamed if the directory has write permis-
	      sion.

       --rename-deny, -o rename-deny
	      Makes all	file rename/move operations within the mountpoint fail
	      with a 'permission denied'. Programs that	move files  out	 of  a
	      mountpoint do so by copying and deleting the original.

RATE LIMITS
       Reads  and  writes through the mount point can be throttled. Throttling
       works by	sleeping the required amount of	time on	each read or write re-
       quest.  Throttling imposes one global limit on all  readers/writers  as
       opposed to a per-process	or per-user limit.

       Currently, the implementation is	not entirely fair. See BUGS below.

       --read-rate=N, -o read-rate=N
	      Allow  at	 most N	bytes per second to be read. N may have	one of
	      the following (1024-based) suffixes: k, M, G, T.

       --write-rate=N, -o write-rate=N
	      Same as above, but for writes.

LINK HANDLING
       --hide-hard-links, -o hide-hard-links
	      Shows the	hard link count	of all files as	1.

       --resolve-symlinks, -o resolve-symlinks
	      Transparently resolves symbolic links.  Disables creation	of new
	      symbolic links.

	      With the following exceptions, operations	will operate  directly
	      on the target file instead of the	symlink. Renaming/moving a re-
	      solved  symlink (inside the same mount point) will move the sym-
	      link instead of the underlying file. Deleting a resolved symlink
	      will delete the underlying symlink but not the destination file.
	      This can be configured with --resolved-symlink-deletion.

	      Note that	when some programs, such as vim, save files, they  ac-
	      tually  move  the	 old file out of the way, create a new file in
	      its place, and finally delete the	old file. Doing	 these	opera-
	      tions on a resolved symlink will replace it with a regular file.

	      Broken  symlinks	still show up as (unresolved) symlinks in this
	      mode.

	      Symlinks are not resolved	recursively.

	      Symlinks pointing	outside	the  source  directory	are  supported
	      with  the	 following  exception: accessing the mountpoint	recur-
	      sively through a resolved	symlink	is not supported and will  re-
	      turn an error. This is because a FUSE filesystem cannot reliably
	      call  itself recursively without deadlocking, especially in sin-
	      gle-threaded mode.

       --resolved-symlink-deletion=policy, -o resolved-symlink-deletion=policy
	      If --resolve-symlinks is enabled,	decides	what  happens  when  a
	      resolved	symlink	 is  deleted.  The options are:	deny (resolved
	      symlinks cannot be deleted), symlink-only	(the  underlying  sym-
	      link  is deleted,	its target is not), symlink-first (the symlink
	      is deleted, and if that succeeds,	the target is deleted  but  no
	      error  is	reported if that fails)	or target-first	(the target is
	      deleted first, and the symlink is	deleted	only if	 deleting  the
	      target succeeded).  The default is symlink-only.

	      Note  that deleting files	inside symlinked directories is	always
	      possible with all	settings,  including  deny,  unless  something
	      else protects those files.

MISCELLANEOUS OPTIONS
       -h, --help
	      Displays a help message and exits.

       -V, --version
	      Displays version information and exits.

	      --fuse-version  Displays	the version of the FUSE	library	inter-
	      face that	was seen at compile-time, as well as the version  that
	      bindfs currently runs with.

       --no-allow-other, -o no-allow-other
	      Does  not	 add  -o allow_other to	FUSE options.  This causes the
	      mount to be accessible only by the current user.

	      (The deprecated shorthand	-n is also still accepted.)

       --realistic-permissions,	-o realistic-permissions
	      Hides read/write/execute permissions for a  mirrored  file  when
	      the mounter doesn't have read/write/execute access to the	under-
	      lying  file.  Useless when mounting as root, since root will al-
	      ways have	full access.

	      (Prior to	version	1.10 this option was the default behavior.   I
	      felt it violated the principle of	least surprise badly enough to
	      warrant a	small break in backwards-compatibility.)

       --ctime-from-mtime, -o ctime-from-mtime
	      Recall  that  a  unix  file has three standard timestamps: atime
	      (last access i.e.	read time), mtime (last	 content  modification
	      time) ctime (last	content	or metadata (inode) change time)

	      With  this  option, the ctime of each file and directory is read
	      from its mtime.  In other	words, only content modifications  (as
	      opposed  to  metadata  changes)  will be reflected in a mirrored
	      file's ctime.  The underlying file's ctime will still be updated
	      normally.

       --enable-lock-forwarding, -o enable-lock-forwarding
	      Forwards flock and fcntl locking requests	to the	source	direc-
	      tory.   This  way,  locking a file in the	bindfs mount will also
	      lock the file in the source directory.

	      This option must be used with --multithreaded because  otherwise
	      bindfs  will  deadlock as	soon as	there is lock contention. How-
	      ever, see	BUGS below for caveats about --multithreaded with  the
	      current implementation.

       --disable-lock-forwarding, -o disable-lock-forwarding
	      Currently	 does nothing, but a future release may	default	to en-
	      abling lock forwarding. If you depend on	this  behaviour,  it's
	      recommended to set this flag explicitly.

       --enable-ioctl, -o enable-ioctl
	      Enables  forwarding  of ioctl, which is needed for some advanced
	      features such as append-only files (chattr +a).  Note  that  the
	      ioctl  action  will be performed as the mounter, not the calling
	      user. No efforts are made	to  check  whether  the	 calling  user
	      would  ordinarily	 have  the permissions to make the ioctl. This
	      may be a security	concern, especially when mounting as root.

       --block-devices-as-files, -o block-devices-as-files
	      Shows block devices as regular files.

       --multithreaded,	-o multithreaded
	      Run bindfs in multithreaded mode.	While bindfs is	designed to be
	      otherwise	thread-safe, there is currently	a race condition  that
	      may pose a security risk for some	use cases. See BUGS below.

       --direct-io, -o direct-io

	      Forwards	each  read/write  operation  1:1 to the	underlying FS,
	      disabling	batching and caching by	the kernel. Some  applications
	      may  require this, however it may	be incompatible	with other ap-
	      plications, as currently it has issues with  mmap(2)  calls,  at
	      least.

       --no-direct-io, -o no-direct-io

	      This  option  is provided	in case	the default changes in the fu-
	      ture.

       --forward-odirect=alignment, -o forward-odirect=alignment
	      Enable experimental O_DIRECT forwarding, with all	read/write re-
	      quests rounded to	the given alignment (in	 bytes).  By  default,
	      the  O_DIRECT  flag  is not forwarded to the underlying FS.  See
	      open(2) for details about	O_DIRECT.

	      Only works on Linux. Ignored on other platforms.

FUSE OPTIONS
       See fuse(8) for the full	list of	FUSE options. Some of the more common
       ones are	mentioned below.

       -r, -o ro
	      Make the mount strictly read-only.  This even prevents root from
	      writing to it.  If this is  all  you  need,  then	 (since	 Linux
	      2.6.26) you can get a more efficient mount with mount --bind and
	      then mount -o remount,ro.

       -d, -o debug
	      Enable debug output (implies -f).

       -o fsname=name
	      Sets  the	 source	 directory  name  in /proc/mounts (returned by
	      mount).  This is automatically set as long as  the  source  path
	      has no special characters.

       -f     Foreground operation.

PERMISSION SPECIFICATION
       The  -p	option	takes a	comma- or colon-separated list of either octal
       numeric permission bits or symbolic representations of  permission  bit
       operations.   The  symbolic  representation  is	based  on  that	of the
       chmod(1)	command.  setuid, setgid and sticky bits are ignored.

       This program extends the	chmod symbolic representation with the follow-
       ing operands:

       `D' (right hand side)
	   Works like X	but applies only to directories	(not to	executables).

       `d' and `f' (left hand side)
	   Makes this directive	only apply to directories (d) or files (f).
	   e.g.	gd-w would remove the group write bit from all directories.

       `u', `g', `o' (right hand side)
	   Uses	the user (u), group (g)	or others (o) permission bits of
	   the original	file.
	   e.g.	g=u would copy the user's permission bits to the group.
		ug+o would add the others' permissions to the owner and	group.

       Examples
       o-rwx  Removes all permission bits from others.

       g=rD   Allows group to read all files and enter	all  directories,  but
	      nothing else.

       0644,a+X
	      Sets permission bits to 0644 and adds the	execute	bit for	every-
	      one to all directories and executables.

       og-x:og+rD:u=rwX:g+rw
	      Removes  execute	bit for	others and group, adds read and	direc-
	      tory execute for others and  group,  sets	 user  permissions  to
	      read,  write  and	 execute  directory/executable,	 adds read and
	      write for	group.

EXAMPLES
       bindfs -u www -g	nogroup	-p 0000,u=rD ~/mywebsite ~/public_html/mysite

	      Publishes	a website in public_html so that only the  'www'  user
	      can read the site.

       bindfs -M foo,bar,1007,@mygroup -p 0600,u+X dir mnt

	      Gives access to 'foo', 'bar', the	user with the UID 1007 as well
	      as  everyone in the group	'mygroup'. Sets	the permission bits to
	      0600, thus giving	the specified  users  read/write  access,  and
	      adds the user execute bit	for directories	and executables.

       bindfs -ono-allow-other,perms=a-w somedir somedir

	      Makes  a	directory read-only and	accessible only	by the current
	      user.

       /home/bob/shared	/var/www/shared/bob fuse.bindfs	perms=0000:u+rD	0 0

	      An example /etc/fstab entry. Note	that the colon must be used to
	      separate arguments to perms, because the comma is	an option sep-
	      arator in	/etc/fstab.

       bindfs#/home/bob/shared /var/www/shared/bob fuse	perms=0000:u+rD	0 0

	      Older systems may	require	this deprecated	fstab syntax.

NOTES
       Setuid and setgid bits have no effect inside the	mount.	This is	a nec-
       essary security feature of FUSE.

       Access to device	files is denied	by default by FUSE as a	security  pre-
       caution.	 Use -o	dev to enable access (requires mounting	as root). This
       may not be supported on all operating systems.

       MacFuse	caches	file  contents by default.  This means that changes in
       source files are	not always immediately visible under the mount	point.
       -o nolocalcaches	can be used to disable the cache.

       When  using --mirror[-only] @somegroup, bindfs won't see	changes	to the
       group's member list.  Sending bindfs a  SIGUSR1	signal	will  make  it
       reread the user database.

       The  following  extra options may be useful under osxfuse: -o local,al-
       low_other,extended_security,noappledouble  See  https://github.com/osx-
       fuse/osxfuse/wiki/Mount-options for details.

BUGS
       If  bindfs  is  run in multithreaded mode (with the --multithreaded op-
       tion) then it's possible	for another process to briefly see a file with
       an incorrect owner, group or permissions.  This may constitute a	 secu-
       rity risk if you	rely on	bindfs to reduce permissions on	new files. For
       this  reason, as	of version 1.11	bindfs runs in single-threaded mode by
       default.

       Rate limiting favors the	process	with the larger	block  size.   If  two
       processes  compete  for read/write access, the one whose	read()/write()
       calls specify the larger	block size gets	to read/write faster.  The to-
       tal rate	limit is maintained though, and	clients	with equal block sizes
       and a similar rate of requests are treated fairly as long as the	kernel
       orders their requests fairly.

       Some features relying on	 xattrs	 might	not  work  properly  on	 OS  X
       (https://github.com/mpartel/bindfs/issues/21).	For  instance,	Finder
       tags seem to work but comments might not.

       Please	 report	   bugs	   and/or    send     pull     requests	    to
       https://github.com/mpartel/bindfs/issues.

DEPRECATIONS
       The  option  names --user and --group were deprecated and replaced with
       --force-user and	--force-group  in  version  1.12.   The	 former	 names
       clashed with standard option names.  They are still available but their
       use  is	discouraged  and prints	a warning. The synonym --owner is also
       deprecated for consistency.

AUTHOR
       Martin Partel <martin dot partel	at gmail dot com>

SEE ALSO
       chmod(1), fusermount(1),	fuse(8), http://bindfs.org/

								     BINDFS(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=bindfs&manpath=FreeBSD+15.0-RELEASE+and+Ports.quarterly>

home | help