Bug 198169 - Creating jail corrupts /etc/passwd
Summary: Creating jail corrupts /etc/passwd
Status: Closed Not A Bug
Alias: None
Product: Base System
Classification: Unclassified
Component: misc (show other bugs)
Version: 10.1-RELEASE
Hardware: amd64 Any
: --- Affects Only Me
Assignee: freebsd-bugs (Nobody)
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-03-02 17:57 UTC by hbowden
Modified: 2015-03-20 03:14 UTC (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description hbowden 2015-03-02 17:57:25 UTC
I just installed FreeBSD 10.1 RELEASE on a iMac. After installing and setting up networking and installing the sudo package I used freebsd-update fetch, then freebsd-update install then I rebooted. Then Using the script below I tried creating a jail.

#!/bin/sh
setenv D /usr/home/nah/jail
mkdir -p $D
cd /usr/src
make buildworld
installworld DESTDIR=$D
distribution DESTDIR=$D
mount -t devfs devfs $D/dev

After the script finishes running the system becomes broken. By broken I mean sudo returns, sudo unknown uid 1001 who are you, when you try to use it, and su returns, who are you? Looking at /etc/passwd the user I created is no longer there and root has no password anymore, But the home directory for the user is still there. If I use exit to log out and try to login with root, it logs me in with no password prompt. And trying to su to the user nah(the one deleted) returns unkown login: nah. 

So any ideas on why running the script above destroys my install?
Comment 1 Gary 2015-03-02 18:23:41 UTC
(In reply to hbowden from comment #0)
Your shell syntax is wrong

If you run

setenv D /usr/home/nah/jail

in a /bin/sh shell on it's own you get

# setenv D /usr/home/nah/jail
setenv: not found
# 


The correct syntax would be something like

D=/usr/home/nah/jail

e.g.

# D=/usr/home/nah/jail
# echo $D
/usr/home/nah/jail
# 

What you did was you didn't have a value for D so you overwrote your existing installation with your make buildworld/installworld/distribution
Comment 2 Allan Jude freebsd_committer freebsd_triage 2015-03-20 03:14:07 UTC
(In reply to hbowden from comment #0)

setenv is used for csh, the default root shell

So those instructions work if you type them into a default root shell, but when you turned it into a script and changed the shell from csh to sh, without updating the syntax, you never set D, so you ran 'make installworld' and 'make distribution' with a blank DESTDIR, which defaulted to /, overwriting your install.