Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 29 Feb 2004 10:51:31 -0600
From:      Bob Martin <bob@buckhorn.net>
Cc:        "Scott St. John" <ssj@scottah.com>
Subject:   Re: Final conversion questions
Message-ID:  <40421893.6000303@buckhorn.net>
In-Reply-To: <20040229160038.GA36107@psconsult.nl>
References:  <20040228191105.M42305@scottah.com> <4040F1A8.1070108@buckhorn.net> <20040228211439.M89441@scottah.com> <404189B9.6040801@buckhorn.net> <20040229160038.GA36107@psconsult.nl>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------040604000603070307090603
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Scott,
Paul is absolutely right. The perl script is missing a line:
next unless $home =~ /home/;

See new attachment. Sorry about that. I grabbed the wrong script.

Bob

Paul Schenkeveld wrote:
> Hi Scott, Bob, All,
> 
> PLEASE be VERY CAREFULL with the perl script.  The first account
> in /etc/passwd is root with / as its home directory, so everything
> will be chown'd to root.  Later they ge chown'd to operator, bin, tty,
> kmem and so on because all these accounts have / as their home dir.
> 
> Files for normal users will eventually be corrected once their accounts
> are encountered later in the password file but ownership/group
> membership of all system files and directories will be lost forever this
> way.
> 
> You could use this perl script on a copy op /etc/passwd with all
> system accounts removed, leaving just the normal users and you'll
> be fine.
> 
> Or - without perl - the following lines can be cut-n-pasted directly
> into a /bin/sh compatible shell to do what you want to do, assuming
> all normal users have home directories living under /home.
> 
>     awk -F: '$6 ~ "^/home/" {print $6, $3, $4}' /etc/passwd |
>     while read dir uid gid
>     do
>       chown -R $uid:$gid $dir
>     done
> 
> Regards,
> 
> Paul Schenkeveld, Consultant
> PSconsult ICT Services BV
> 
> On Sun, Feb 29, 2004 at 12:42:01AM -0600, Bob Martin wrote:
> 
>>Scott,
>>After you move the directories, use the attached perl script (run as 
>>root). Use the -r option to scp, and you'll get all files, including . 
>>files.
>>
>>Bob Martin
>>
>>
>>
>>Scott St. John wrote:
>>
>>>Bob-
>>>
>>>I do not have a NFS connection between the two boxes, I am using scp to 
>>>transfer files between the Linux and the new FreebSD boxes.  I used John 
>>>The Ripper to merge my passwd and shadow files and then used some awk 
>>>scripts from the OpenBSD site to format, then create my new passwd file 
>>>for BSD.  I am almost sure the UID/GID will NOT be the same since BSD 
>>>starts at a different # than Linux where my first UID is 1000.
>>>
>>>If you have it, it sounds like the perl script would be the better trick 
>>>since it would check the passwd file instead of assuming the UID/GID were 
>>>the same.
>>>
>>>Thanks!
>>>
>>>-Scott
>>>
>>>On Sat, 28 Feb 2004 13:53:12 -0600, Bob Martin wrote
>>>
>>>
>>>>Scott,
>>>>I haven't followed this thread closely enough, but from what you're
>>>>saying, it sounds like you have a NFS connection between the 2 boxen.
>>>>That being the case, and since the UID/GID's are the same on both boxen
>>>>(IIRC you moved the Linux accounts to the BSD box), the following
>>>>command will get all of the files, and maintain the permissions:
>>>>
>>>>cp -pRP /<linux mount point/home/* /home/
>>>>
>>>>If the UID/GID's have changed, then this command will fix them for you:
>>>>(Note, this assumes you use bash as your shell)
>>>>cd /home
>>>>for a in `ls -1 /home`;do chown -R $a:users $a;done
>>>>
>>>>That command does assume that you have a 1 to 1 relationship between
>>>>home directories and usernames. If not, let me know and I'll find my
>>>>little perl script that reads /etc/passwd and sets the permissions.
>>>
>>>
>>>_______________________________________________
>>>freebsd-isp@freebsd.org mailing list
>>>http://lists.freebsd.org/mailman/listinfo/freebsd-isp
>>>To unsubscribe, send any mail to "freebsd-isp-unsubscribe@freebsd.org"
> 
> 
>>#!/usr/bin/perl
>>$Home = "/home";
>>
>>open(PASSWD, '/etc/passwd') or die("Can't open password: $!\n");
>>while (<PASSWD>) {
>>        chomp;
>>        ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/);
>>        system("chown -R $uid:$gid $home") or die("Error: $!\n");
>>        print "$login, $uid, $gid, $home\n";
>>}
> 
> 
>>_______________________________________________
>>freebsd-isp@freebsd.org mailing list
>>http://lists.freebsd.org/mailman/listinfo/freebsd-isp
>>To unsubscribe, send any mail to "freebsd-isp-unsubscribe@freebsd.org"
> 
> 
> _______________________________________________
> freebsd-isp@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-isp
> To unsubscribe, send any mail to "freebsd-isp-unsubscribe@freebsd.org"

--------------040604000603070307090603
Content-Type: text/plain;
 name="HomePerms.pl"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="HomePerms.pl"

#!/usr/bin/perl
$Home = "/home";

open(PASSWD, '/etc/passwd') or die("Can't open password: $!\n");
while (<PASSWD>) {
        chomp;
        ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/);
        next unless $home =~ /home/;
        print "Processing: $home\n";
        system("chown -R $uid:$gid $home");
}

--------------040604000603070307090603--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?40421893.6000303>