<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]-->
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="2050" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=WordSection1>
<p class=MsoNormal>Hi,<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>We are currently migrating Tacacs from Solaris to
Linux. We haven’t had any issues getting Tacacs to run on CentOS and
users are authenticating through CentOS (using the old tacacs passwd file from
Solaris). The issue we are facing is trying to convert the old Solaris script,
that creates the users entries in the tacacs passwd file, over to a script that
runs on CentOS. The Solaris script creates a user with a unique “uid”.
We were wondering if anyone knows of a Linux script that will accomplish the
same results. We have a fairly good understanding of Tacacs, but we are no
experts.<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Here is the script used on Solaris:<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>---------------------------- begin
------------------------------------<o:p></o:p></p>
<p class=MsoNormal>#!/bin/sh<o:p></o:p></p>
<p class=MsoNormal>#<o:p></o:p></p>
<p class=MsoNormal># @(#)auth_user 2.2 12.28.05<o:p></o:p></p>
<p class=MsoNormal># modified by RKJ for mail2.swnebr.net Solaris
5.8 11/28/03<o:p></o:p></p>
<p class=MsoNormal># modified by MLW for dns3.pnpt.com
Solaris 5.8 1/5/06<o:p></o:p></p>
<p class=MsoNormal>#<o:p></o:p></p>
<p class=MsoNormal>#<o:p></o:p></p>
<p class=MsoNormal># add user script for use with sys-config<o:p></o:p></p>
<p class=MsoNormal># arguments: uname "fullname" password<o:p></o:p></p>
<p class=MsoNormal>#<o:p></o:p></p>
<p class=MsoNormal># dirname is in SystemV catagory - so put it herein<o:p></o:p></p>
<p class=MsoNormal>shdirname()<o:p></o:p></p>
<p class=MsoNormal>{<o:p></o:p></p>
<p class=MsoNormal>expr \<o:p></o:p></p>
<p class=MsoNormal> ${1-.}'/' : '\(/\)[^/]*//*$' \<o:p></o:p></p>
<p class=MsoNormal> \| ${1-.}'/' : '\(.*[^/]\)//*[^/][^/]*//*$' \<o:p></o:p></p>
<p class=MsoNormal> \| .<o:p></o:p></p>
<p class=MsoNormal>}<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>myname=`basename $0`<o:p></o:p></p>
<p class=MsoNormal>Passwd_file=/etc/auth-passwd<o:p></o:p></p>
<p class=MsoNormal>PATH=$PATH:/usr/ucb:/usr/local/bin<o:p></o:p></p>
<p class=MsoNormal>export PATH<o:p></o:p></p>
<p class=MsoNormal># check for root<o:p></o:p></p>
<p class=MsoNormal>if [ "`whoami`x" != "root"x ]; then<o:p></o:p></p>
<p class=MsoNormal> echo "You must be root to do
$myname!"<o:p></o:p></p>
<p class=MsoNormal> exit 1<o:p></o:p></p>
<p class=MsoNormal>fi<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>uid=`cat /usr/local/puid`<o:p></o:p></p>
<p class=MsoNormal>nuid=`expr ${uid} + 1`<o:p></o:p></p>
<p class=MsoNormal>echo $nuid > /usr/local/puid<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal># check for number of args<o:p></o:p></p>
<p class=MsoNormal>if [ $# -ne 3 ]; then<o:p></o:p></p>
<p class=MsoNormal> echo
"${myname}: invalid number of arguments"<o:p></o:p></p>
<p class=MsoNormal> echo
" usage: ${myname} uname \"fullname\" password"<o:p></o:p></p>
<p class=MsoNormal> exit 1<o:p></o:p></p>
<p class=MsoNormal>fi<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal># put args into named variables<o:p></o:p></p>
<p class=MsoNormal>uname=$1<o:p></o:p></p>
<p class=MsoNormal>gid=1000<o:p></o:p></p>
<p class=MsoNormal>fullname=$2<o:p></o:p></p>
<p class=MsoNormal>password=`/usr/local/sbin/generate_passwd $3`<o:p></o:p></p>
<p class=MsoNormal>#password=`/usr/bin/encrypt encpw passwd $3`<o:p></o:p></p>
<p class=MsoNormal>##############################################################################<o:p></o:p></p>
<p class=MsoNormal># modified by RKJ for mail2.swnebr.net Solaris
5.8
11/28/03
#<o:p></o:p></p>
<p class=MsoNormal>homedir="/home/$1"<o:p></o:p></p>
<p class=MsoNormal>#<o:p></o:p></p>
<p class=MsoNormal>#
#<o:p></o:p></p>
<p class=MsoNormal>##############################################################################<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>shell=/bin/false<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal># checks for validity of arguments<o:p></o:p></p>
<p class=MsoNormal># check uid<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>echo "uid:" $uid<o:p></o:p></p>
<p class=MsoNormal>if test $uid -lt 10 ; then<o:p></o:p></p>
<p class=MsoNormal> echo
"uid: uid must be greater than 10 and less than 60000"<o:p></o:p></p>
<p class=MsoNormal> exit 1<o:p></o:p></p>
<p class=MsoNormal>elif test $uid -gt 60000 ; then<o:p></o:p></p>
<p class=MsoNormal> echo
"uid: uid must be greater than 10 and less than 60000"<o:p></o:p></p>
<p class=MsoNormal> exit 1<o:p></o:p></p>
<p class=MsoNormal>fi<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>echo "gid:" $gid<o:p></o:p></p>
<p class=MsoNormal># check gid<o:p></o:p></p>
<p class=MsoNormal>if test $gid -lt 10 ; then<o:p></o:p></p>
<p class=MsoNormal> echo
"gid: gid must be greater than 10 and less than 60000"<o:p></o:p></p>
<p class=MsoNormal> exit 1<o:p></o:p></p>
<p class=MsoNormal>elif test $gid -gt 60000 ; then<o:p></o:p></p>
<p class=MsoNormal> echo
"gid: gid must be greater than 10 and less than 60000"<o:p></o:p></p>
<p class=MsoNormal> exit 1<o:p></o:p></p>
<p class=MsoNormal>fi<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal># check shell<o:p></o:p></p>
<p class=MsoNormal>if test ! -x $shell ; then<o:p></o:p></p>
<p class=MsoNormal> echo
"$shell: the program does not exist or is not executable"<o:p></o:p></p>
<p class=MsoNormal> exit 1<o:p></o:p></p>
<p class=MsoNormal>fi<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal># create a null /etc/passwd entry<o:p></o:p></p>
<p class=MsoNormal># first check if one already exists<o:p></o:p></p>
<p class=MsoNormal>if grep -s "^${uname}:" ${Passwd_file} ; then<o:p></o:p></p>
<p class=MsoNormal> echo
"${myname}: ERROR: ${uname} aleady in ${Passwd_file}";<o:p></o:p></p>
<p class=MsoNormal> exit 1;<o:p></o:p></p>
<p class=MsoNormal>fi<o:p></o:p></p>
<p class=MsoNormal># check if uid already exists<o:p></o:p></p>
<p class=MsoNormal>if grep -s ".*:.*:${uid}:" ${Passwd_file} ; then<o:p></o:p></p>
<p class=MsoNormal> echo "uid:
ERROR: ${uid} already in ${Passwd_file}";<o:p></o:p></p>
<p class=MsoNormal> exit 1;<o:p></o:p></p>
<p class=MsoNormal>fi<o:p></o:p></p>
<p class=MsoNormal>pwent="${uname}:${password}:${uid}:${gid}:${fullname}:${homedir}:${shell}"<o:p></o:p></p>
<p class=MsoNormal># XXX sould we use tmp file and rename it?<o:p></o:p></p>
<p class=MsoNormal>( echo '$' ;<o:p></o:p></p>
<p class=MsoNormal> echo 'i' ;<o:p></o:p></p>
<p class=MsoNormal> echo "${pwent}" ;<o:p></o:p></p>
<p class=MsoNormal> echo '.' ;<o:p></o:p></p>
<p class=MsoNormal> echo 'w' ;<o:p></o:p></p>
<p class=MsoNormal> echo 'q' ) | ed -s ${Passwd_file} > /dev/null<o:p></o:p></p>
<p class=MsoNormal>if grep -s "^${uname}:" ${Passwd_file} ; then<o:p></o:p></p>
<p class=MsoNormal> :<o:p></o:p></p>
<p class=MsoNormal>else<o:p></o:p></p>
<p class=MsoNormal> echo
"${myname}: ERROR: password entry didn't go to ${Passwd_file}";<o:p></o:p></p>
<p class=MsoNormal> exit 1;<o:p></o:p></p>
<p class=MsoNormal>fi<o:p></o:p></p>
<p class=MsoNormal>#<o:p></o:p></p>
<p class=MsoNormal>echo "Please be patient! This may take some time"<o:p></o:p></p>
<p class=MsoNormal>echo ""<o:p></o:p></p>
<p class=MsoNormal>#<o:p></o:p></p>
<p class=MsoNormal>#<o:p></o:p></p>
<p class=MsoNormal># SCP a copy of /etc/auth-passwd to DNS2 and Tacacs<o:p></o:p></p>
<p class=MsoNormal>#<o:p></o:p></p>
<p class=MsoNormal>if [ -f /etc/auth-passwd ]; then<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal> scp
/etc/auth-passwd
sysop@dns2:/usr/local/etc/tacacs/authentication/auth-passwd<o:p></o:p></p>
<p class=MsoNormal> echo "A copy
of the auth-passwd file has been sent to DNS2..WHEW!!"<o:p></o:p></p>
<p class=MsoNormal> scp
/etc/auth-passwd sysop@tacacs:/usr/local/etc/tacacs/authentication/auth-passwd<o:p></o:p></p>
<p class=MsoNormal> echo "A copy
of the auth-passwd file has been sent to Tacacs..WHEW!!"<o:p></o:p></p>
<p class=MsoNormal> echo "
"<o:p></o:p></p>
<p class=MsoNormal>fi<o:p></o:p></p>
<p class=MsoNormal>#<o:p></o:p></p>
<p class=MsoNormal>exit 0<o:p></o:p></p>
<p class=MsoNormal>#<o:p></o:p></p>
<p class=MsoNormal>#EOF<o:p></o:p></p>
<p class=MsoNormal>---------------------------- end
------------------------------------<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Maybe this is more complicated than it needs to be. Any
suggests, recommendation or opinions are welcomed!<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Thanx In Advance,<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
style='border-collapse:collapse;border:none'>
<tr>
<td width=143 style='width:107.6pt;border:none;padding:0in 5.4pt 0in 5.4pt'>
<p class=MsoNormal align=center style='text-align:center'><img width=125
height=119 id="Picture_x0020_0" src="cid:image003.png@01CB39F4.EEBC6A80"
alt=logo-add-ons-half.png><o:p></o:p></p>
</td>
<td width=180 style='width:135.0pt;border:none;padding:0in 5.4pt 0in 5.4pt'>
<p class=MsoNormal>Jeffrey S. Geist<o:p></o:p></p>
<p class=MsoNormal>Systems Administrator<o:p></o:p></p>
<p class=MsoNormal>PinPoint Communications<o:p></o:p></p>
<p class=MsoNormal>100 North 12<sup>th</sup> Street<o:p></o:p></p>
<p class=MsoNormal>Suite 500<o:p></o:p></p>
<p class=MsoNormal>Lincoln, NE 68508<o:p></o:p></p>
<p class=MsoNormal>Work: (402) 438-6211<o:p></o:p></p>
<p class=MsoNormal>Cellular: (402) 580-0047<o:p></o:p></p>
</td>
</tr>
</table>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
</div>
</body>
</html>