class Unicorn::Worker
This class and its members can be considered a stable interface and will not change in a backwards-incompatible fashion between releases of unicorn. Knowledge of this class is generally not not needed for most users of unicorn.
Some users may want to access it in the before_fork/after_fork hooks. See the Unicorn::Configurator RDoc for examples.
Public Instance Methods
In most cases, you should be using the Unicorn::Configurator#user directive instead. This method should only be used if you need fine-grained control of exactly when you want to change permissions in your after_fork or after_worker_ready hooks, or if you want to use the chroot support.
Changes the worker process to the specified user and
group, and chroots to the current working directory if
chroot is set. This is only intended to be called from within
the worker process from the after_fork hook. This should be
called in the after_fork hook after any privileged functions
need to be run (e.g. to set per-worker CPU affinity, niceness, etc)
Any and all errors raised within this method will be propagated directly
back to the caller (usually the after_fork hook. These errors
commonly include ArgumentError for specifying an invalid user/group and
Errno::EPERM for insufficient privileges.
chroot support is only available in unicorn 5.3.0+ user and group switching appeared in unicorn 0.94.0 (2009-11-05)
# File lib/unicorn/worker.rb, line 131 def user(user, group = nil, chroot = false) # we do not protect the caller, checking Process.euid == 0 is # insufficient because modern systems have fine-grained # capabilities. Let the caller handle any and all errors. uid = Etc.getpwnam(user).uid gid = Etc.getgrnam(group).gid if group Unicorn::Util.chown_logs(uid, gid) if gid && Process.egid != gid Process.initgroups(user, gid) Process::GID.change_privilege(gid) end if chroot chroot = Dir.pwd if chroot == true Dir.chroot(chroot) Dir.chdir('/') end Process.euid != uid and Process::UID.change_privilege(uid) @switched = true end