14746Srica#!/sbin/sh 24746Srica# 34746Srica# CDDL HEADER START 44746Srica# 54746Srica# The contents of this file are subject to the terms of the 64746Srica# Common Development and Distribution License (the "License"). 74746Srica# You may not use this file except in compliance with the License. 84746Srica# 94746Srica# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 104746Srica# or http://www.opensolaris.org/os/licensing. 114746Srica# See the License for the specific language governing permissions 124746Srica# and limitations under the License. 134746Srica# 144746Srica# When distributing Covered Code, include this CDDL HEADER in each 154746Srica# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 164746Srica# If applicable, add the following below this CDDL HEADER, with the 174746Srica# fields enclosed by brackets "[]" replaced with your own identifying 184746Srica# information: Portions Copyright [yyyy] [name of copyright owner] 194746Srica# 204746Srica# CDDL HEADER END 214746Srica# 22*13059SThuy.Fettig@oracle.COM# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 234746Srica# 244746Srica 254746Srica. /lib/svc/share/smf_include.sh 264746Srica 274746SricaROOT_PATH="" 284746Sricaif [ $# -gt 1 ]; then 294746Srica if [ $# -ne 3 -o "$2" != "-R" ]; then 304746Srica echo "$0: invalid syntax" 314746Srica exit $SMF_EXIT_ERR_CONFIG 324746Srica fi 334746Srica if [ "$3" != "/" ]; then 344746Srica ROOT_PATH=$3 354746Srica fi 364746Sricafi 374746Sricaif [ -n "$ROOT_PATH" -a "$1" != "start" ]; then 384746Srica echo "$0: invalid syntax: -R allowed for start method only" 394746Srica exit $SMF_EXIT_ERR_CONFIG 404746Sricafi 414746Sricaif [ -n "$ROOT_PATH" -a ! -d "$ROOT_PATH" ]; then 424746Srica echo "$0: invalid -R rootpath dir specified" 434746Srica exit $SMF_EXIT_ERR_CONFIG 444746Sricafi 454746Srica 464746Sricaif smf_is_nonglobalzone; then 474746Srica echo "$0: not supported in a local zone" 484746Srica exit $SMF_EXIT_ERR_CONFIG 494746Sricafi 504746Srica 515743Sajrewrite_logindev() 525743Saj{ 535743Saj from="$1" 545743Saj to="$2" 555743Saj # Comment out audio, usb, removable-media, and hotpluggable device 565743Saj # entries in /etc/logindevperm. 575743Saj LOGINDEVPERM=$ROOT_PATH/etc/logindevperm 585743Saj if [ ! -f $LOGINDEVPERM ]; then 595743Saj return 605743Saj fi 615743Saj for line in \ 6210941Snathan.bush@sun.com "/dev/sound/" \ 6310941Snathan.bush@sun.com "/dev/removable-media/" \ 6410941Snathan.bush@sun.com "/dev/hotpluggable/" \ 6510941Snathan.bush@sun.com "/dev/usb/\[0-9a-f\]" \ 665743Saj ; do 6710941Snathan.bush@sun.com sed -e "s!^$from\([^# ]\{1,\}[ }\{1,\}[0-9]\{1,\}[ ]\{1,\}\)$line!$to\1$line!" \ 6810941Snathan.bush@sun.com $LOGINDEVPERM > /tmp/tmp.$$ 695743Saj cp /tmp/tmp.$$ $LOGINDEVPERM 705743Saj done 715743Saj rm -f /tmp/tmp.$$ 725743Saj} 735743Saj 744746Sricado_logindev() 754746Srica{ 765743Saj rewrite_logindev "" "#" 774746Srica} 784746Srica 794746Sricado_otherservices() 804746Srica{ 814746Srica # Setup dependent services 824746Srica cat >> $ROOT_PATH/var/svc/profile/upgrade <<\__ENABLE_OTHERS 834746Srica /usr/sbin/svcadm enable -s svc:/network/tnd:default 844746Srica /usr/sbin/svcadm enable -s svc:/system/tsol-zones:default 854746Srica /usr/sbin/svcadm enable svc:/network/rpc/rstat:default 864746Srica__ENABLE_OTHERS 874746Srica 884746Srica} 894746Srica 90*13059SThuy.Fettig@oracle.COMdo_audit_devalloc() 914746Srica{ 92*13059SThuy.Fettig@oracle.COM # Ensure auditing and device allocation are enabled by 934746Srica # default with Trusted Extensions. 944746Srica if [ "$ROOT_PATH" = "/" -o "$ROOT_PATH" = "" ]; then 95*13059SThuy.Fettig@oracle.COM /usr/sbin/svcadm enable -s svc:/system/device/allocate:default 9611861SMarek.Pospisil@Sun.COM echo "Starting auditd ..." 9711861SMarek.Pospisil@Sun.COM /usr/sbin/audit -s 9811861SMarek.Pospisil@Sun.COM else 9911861SMarek.Pospisil@Sun.COM cat >> $ROOT_PATH/var/svc/profile/upgrade <<\_ENABLE_AUDITD 10011861SMarek.Pospisil@Sun.COM /usr/sbin/audit -s 101*13059SThuy.Fettig@oracle.COM /usr/sbin/svcadm enable -s svc:/system/device/allocate:default 10211861SMarek.Pospisil@Sun.COM_ENABLE_AUDITD 10311861SMarek.Pospisil@Sun.COM fi 1044746Srica} 1054746Srica 1064746Sricado_nscd() 1074746Srica{ 1084746Srica# For Trusted Extensions, make nscd service transient in local zones. 1094746Sricacat >> $ROOT_PATH/var/svc/profile/upgrade <<\_DEL_LOCAL_NSCD 1104746Srica if [ `/sbin/zonename` != "global" ]; then 1114746Srica nscd="svc:/system/name-service-cache" 1124746Srica duration="" 1134746Srica if /bin/svcprop -q -c -p startd/duration $nscd ; then 1144746Srica duration=`/bin/svcprop -c -p startd/duration $nscd` 1154746Srica fi 1164746Srica if [ "$duration" != "transient" ]; then 1174746Srica /usr/sbin/svccfg -s $nscd addpg startd framework 1184746Srica /usr/sbin/svccfg -s $nscd setprop \ 1194746Srica startd/duration = astring: transient 1204746Srica /usr/sbin/svccfg -s $nscd setprop stop/exec = :true 1214746Srica /usr/sbin/svcadm refresh $nscd 1224746Srica fi 1234746Srica fi 1244746Srica_DEL_LOCAL_NSCD 1254746Srica} 1264746Srica 1274746Sricado_bootupd() 1284746Srica{ 1294746Srica if [ -f $ROOT_PATH/platform/`/sbin/uname -m`/boot_archive ]; then 1304746Srica if [ -z "$ROOT_PATH" -o "$ROOT_PATH" = "/" ]; then 1314746Srica /sbin/bootadm update-archive 1324746Srica else 1334746Srica /sbin/bootadm update-archive -R $ROOT_PATH 1344746Srica fi 1354746Srica fi 1364746Srica} 1374746Srica 1385679Sricasetup_tx_changes(){ 1395679Srica# 1405679Srica# No comments or blanks lines allowed in entries below 1415679Srica# 1425679Sricacat > ${TX_ENTRIES} << EOF 1435679Sricadtlogin account requisite pam_roles.so.1 1445679Sricadtlogin account required pam_unix_account.so.1 1455679Sricadtsession account requisite pam_roles.so.1 1465679Sricadtsession account required pam_unix_account.so.1 1475679Sricagdm account requisite pam_roles.so.1 1485679Sricagdm account required pam_unix_account.so.1 1495679Sricaxscreensaver account requisite pam_roles.so.1 1505679Sricaxscreensaver account required pam_unix_account.so.1 1515679Sricapasswd account requisite pam_roles.so.1 1525679Sricapasswd account required pam_unix_account.so.1 1535679Sricadtpasswd account requisite pam_roles.so.1 1545679Sricadtpasswd account required pam_unix_account.so.1 1555865Sricatsoljds-tstripe account requisite pam_roles.so.1 1565865Sricatsoljds-tstripe account required pam_unix_account.so.1 1575679Sricaother account required pam_tsol_account.so.1 1585679SricaEOF 1595679Srica} 1605679Srica 1615679Sricado_addpam() 1625679Srica{ 1635679Srica PAM_TMP=/tmp/pam_conf.$$ 1645679Srica TX_ENTRIES=$PAM_TMP/sct.$$ 1655679Srica PAM_DEST=$ROOT_PATH/etc/pam.conf 1665679Srica 1675679Srica mkdir $PAM_TMP || exit $SMF_EXIT_ERR_FATAL 1685679Srica setup_tx_changes 1695679Srica 1705679Srica # verify that pam.conf file exists... 1715679Srica if [ ! -f ${PAM_DEST} ]; then 1725679Srica echo "$0: ${PAM_DEST} not found; aborting" 1735679Srica exit $SMF_EXIT_ERR_FATAL 1745679Srica fi 1755679Srica 1765679Srica # 1775679Srica # Update pam.conf to append Trusted Extensions entries if not 1785679Srica # already present. 1795679Srica # 1805679Srica rm -f /tmp/pamconf.$$ 1815679Srica while read e1 e2 e3 e4 e5 1825679Srica do 1835679Srica # If this is the 'other' entry, add it unless it already 1845679Srica # exists. 1855679Srica if [ $e1 = "other" ]; then 1865679Srica grep \ 1875679Srica"^[# ]*$e1[ ][ ]*$e2[ ][ ]*$e3[ ][ ]*$e4" \ 1885679Srica $PAM_DEST >/dev/null 2>&1 1895679Srica if [ $? = 1 ] ; then 1905679Srica # Doesn't exist, enter into pam.conf 1915679Srica echo "$e1\t$e2 $e3\t\t$e4 $e5" \ 1925679Srica >> /tmp/pamconf.$$ 1935679Srica fi 1945679Srica else 1955679Srica # Add other entries unless they already have a 1965679Srica # stack of their own. 1975679Srica grep "^[# ]*$e1[ ][ ]*$e2[ ]" \ 1985679Srica $PAM_DEST >/dev/null 2>&1 1995679Srica if [ $? = 1 ] ; then 2005679Srica echo "$e1\t$e2 $e3\t\t$e4 $e5" \ 2015679Srica >> /tmp/pamconf.$$ 2025679Srica fi 2035679Srica fi 2045679Srica done < ${TX_ENTRIES} 2055679Srica # Append TX lines if any were not present already. 2065679Srica if [ -f /tmp/pamconf.$$ ] ; then 2075679Srica echo "# Entries for Trusted Extensions" >> $PAM_DEST 2085679Srica cat /tmp/pamconf.$$ >> $PAM_DEST 2095679Srica echo "$0: updating $PAM_DEST entries for Trusted Extensions;" 2105679Srica echo "$0: please examine/update any new entries" 2115679Srica rm -f /tmp/pamconf.$$ 2125679Srica fi 2135679Srica 2145679Srica rm -rf $PAM_TMP 2155679Srica} 2165679Srica 2175679Sricado_pamremove() 2185679Srica{ 2195679Srica PAM_TMP=/tmp/pam_conf.$$ 2205679Srica TX_ENTRIES=$PAM_TMP/sct.$$ 2215679Srica PAM_DEST=$ROOT_PATH/etc/pam.conf 2225679Srica TMPFILE=$PAM_TMP/pam.conf 2235679Srica 2245679Srica mkdir $PAM_TMP || exit $SMF_EXIT_ERR_FATAL 2255679Srica 2265679Srica # verify that pam.conf file exists... 2275679Srica if [ ! -f ${PAM_DEST} ]; then 2285679Srica echo "$0: ${PAM_DEST} not found; aborting" 2295679Srica exit $SMF_EXIT_ERR_FATAL 2305679Srica fi 2315679Srica 2325679Srica 2335679Srica grep '^[a-z].*pam_tsol_account' $PAM_DEST > /dev/null 2>&1 2345679Srica if [ $? -ne 0 ]; then 2355679Srica echo "$0: pam_tsol_account module not present," 2365679Srica echo "$0: No changes were made to $PAM_DEST." 2375679Srica return 2385679Srica fi 2395679Srica 2405679Srica grep -v pam_tsol_account $PAM_DEST > $TMPFILE 2415679Srica echo "$0: $PAM_DEST "tsol" entries removed" 2425679Srica cp $TMPFILE $PAM_DEST 2435679Srica 2445679Srica rm -rf $PAM_TMP 2455679Srica} 2465679Srica 2474746Sricado_commonstart() 2484746Srica{ 2494746Srica echo "$0: Updating $ROOT_PATH/etc/system..." 2504746Srica if [ ! -f ${ROOT_PATH}/etc/system ]; then 2514746Srica touch ${ROOT_PATH}/etc/system 2524746Srica fi 2534746Srica 2544746Srica # Set sys_labeling in etc/system 2554746Srica grep -v "sys_labeling=" ${ROOT_PATH}/etc/system > /tmp/etc.system.$$ 2564746Srica echo "set sys_labeling=1" >> /tmp/etc.system.$$ 2574746Srica mv /tmp/etc.system.$$ ${ROOT_PATH}/etc/system 2584746Srica grep "set sys_labeling=1" ${ROOT_PATH}/etc/system > /dev/null 2>&1 2594746Srica if [ $? -ne 0 ]; then 2604746Srica echo "$0: ERROR: cannot set sys_labeling in $ROOT_PATH/etc/system" 2614746Srica exit $SMF_EXIT_ERR_FATAL 2624746Srica fi 2634746Srica 2644746Srica # Setup dependent services 2654746Srica do_otherservices 2664746Srica 2674746Srica do_logindev 268*13059SThuy.Fettig@oracle.COM do_audit_devalloc 2694746Srica do_nscd 2705679Srica do_addpam 2715679Srica 2725679Srica do_bootupd 2734746Srica} 2744746Srica 2756167Sjpkdo_servicetag_register() 2766167Sjpk{ 2776167Sjpk ROOTDIR=$1 2786167Sjpk SOL_ARCH=`/sbin/uname -p` 2796167Sjpk SOL_VERS=`/sbin/uname -r` 2806167Sjpk TX_PROD_URN="urn:uuid:fc720df3-410f-11dc-9b8e-080020a9ed93" 2816167Sjpk 2826167Sjpk if [ ! -x /usr/bin/stclient ]; then 2836167Sjpk return 2846167Sjpk fi 2856167Sjpk 2866167Sjpk # if already registered then do nothing more here 2876167Sjpk inst=`/usr/bin/svcprop -p labeld/svctag_inst $SMF_FMRI 2>/dev/null` 2886167Sjpk if [ -n "$inst" ]; then 2896167Sjpk # this instance id was saved in a SMF property 2906167Sjpk /usr/bin/stclient -g -i $inst -r $ROOTDIR >/dev/null 2>&1 2916167Sjpk if [ $? = 0 ]; then 2926167Sjpk # matching service tag found, so do nothing 2936167Sjpk return 2946167Sjpk else 2956167Sjpk # no match for instance id saved in SMF property 2966167Sjpk /usr/sbin/svccfg -s $SMF_FMRI delprop \ 2976167Sjpk labeld/svctag_inst 2986167Sjpk /usr/sbin/svcadm refresh $SMF_FMRI 2996167Sjpk fi 3006167Sjpk fi 3016167Sjpk 3026167Sjpk 3036167Sjpk # fall through: no service tag, or does not match saved instance id 3046167Sjpk 3056167Sjpk # determine the urn of the parent (Solaris) 3066167Sjpk SOL_PROD_URN="" 3076167Sjpk case $SOL_VERS in 3086167Sjpk 5.11) 3096167Sjpk SOL_PROD_URN="-F urn:uuid:6df19e63-7ef5-11db-a4bd-080020a9ed93" 3106167Sjpk ;; 3116167Sjpk 5.10) 3126167Sjpk SOL_PROD_URN="-F urn:uuid:5005588c-36f3-11d6-9cec-fc96f718e113" 3136167Sjpk ;; 3146167Sjpk esac 3156167Sjpk 3166167Sjpk # add the service tag 3176167Sjpk RC=`/usr/bin/stclient -a -p "Solaris Trusted Extensions" \ 3186167Sjpk -e $SOL_VERS -t $TX_PROD_URN -P Solaris $SOL_PROD_URN \ 3196167Sjpk -m Sun -A $SOL_ARCH -z global -S $0 -r $ROOTDIR` 3206167Sjpk if [ $? = 0 ]; then 3216167Sjpk # save instance id in SMF property 3226167Sjpk inst=`echo "$RC" | grep -i urn|awk -F= '{print $2}'` 3236167Sjpk /usr/sbin/svccfg -s $SMF_FMRI setprop \ 3246167Sjpk labeld/svctag_inst = astring: "$inst" 3256167Sjpk /usr/sbin/svcadm refresh $SMF_FMRI 3266167Sjpk fi 3276167Sjpk} 3286167Sjpk 3296167Sjpkdo_servicetag_delete() 3306167Sjpk{ 3316167Sjpk if [ ! -x /usr/bin/stclient ]; then 3326167Sjpk return 3336167Sjpk fi 3346167Sjpk 3356167Sjpk inst=`/usr/bin/svcprop -p labeld/svctag_inst $SMF_FMRI 2>/dev/null` 3366167Sjpk 3376167Sjpk if [ -n "$inst" ]; then 3386167Sjpk # delete service tag 3396167Sjpk /usr/bin/stclient -d -i $inst 3406167Sjpk # delete saved instance id 3416167Sjpk /usr/sbin/svccfg -s $SMF_FMRI delprop labeld/svctag_inst 3426167Sjpk /usr/sbin/svcadm refresh $SMF_FMRI 3436167Sjpk fi 3446167Sjpk} 3456167Sjpk 3464746Srica 3474746Sricadaemon_start() 3484746Srica{ 3494746Srica # If a labeld door exists, check for a labeld process and exit 3504746Srica # if the daemon is already running. 3514746Srica if [ -r /var/tsol/doors/labeld ]; then 3524746Srica if /usr/bin/pgrep -x -u 0 -P 1 labeld >/dev/null 2>&1; then 3534746Srica echo "$0: labeld is already running" 3544746Srica exit $SMF_EXIT_ERR_FATAL 3554746Srica fi 3564746Srica fi 3574746Srica /usr/bin/rm -f /var/tsol/doors/labeld 3584746Srica /usr/lib/labeld 3594746Srica} 3604746Srica 3614746SricaPATH=/usr/sbin:/usr/bin; export PATH 3624746Srica 3634746Sricacase "$1" in 3644746Srica'start') 3654746Srica if [ -z "$ROOT_PATH" -o "$ROOT_PATH" = "/" ]; then 3664746Srica # native 3674746Srica 3684746Srica if [ -z "$SMF_FMRI" ]; then 3694746Srica echo "$0: this script can only be invoked by smf(5)" 3704746Srica exit $SMF_EXIT_ERR_NOSMF 3714746Srica fi 3724746Srica 3734746Srica tx_enabled=`/usr/bin/svcprop -c -p general/enabled $SMF_FMRI` 3744746Srica if [ "$tx_enabled" = "false" ]; then 3754746Srica # A sign of trying temporary enablement...no-no 3764746Srica echo "$0: Temporarily enabling Trusted Extensions is not allowed." 3774746Srica exit $SMF_EXIT_ERR_CONFIG 3784746Srica fi 3794746Srica 3804746Srica if (smf_is_system_labeled); then 3816794Sjpk do_servicetag_register / 3824746Srica daemon_start 3834746Srica exit $SMF_EXIT_OK 3844746Srica fi 3854746Srica 3864746Srica # Make changes to enable Trusted Extensions 3874746Srica grep "^set sys_labeling=1" ${ROOT_PATH}/etc/system > /dev/null 2>&1 3884746Srica if [ $? -eq 0 ]; then 3894746Srica echo "$0: already enabled. Exiting." 3904746Srica exit $SMF_EXIT_OK 3914746Srica fi 3924746Srica 3934746Srica if [ "`/usr/sbin/zoneadm list -c`" != "global" ]; then 3944746Srica echo "$0: Must remove zones before enabling Trusted Extensions." 3954746Srica exit $SMF_EXIT_ERR_CONFIG 3964746Srica fi 3974746Srica 3984746Srica do_commonstart 3994746Srica 4006167Sjpk do_servicetag_register / 4016167Sjpk 4024746Srica # start daemon proccess so our service doesn't go into 4034746Srica # maintenance state 4044746Srica daemon_start 4054746Srica 4064746Srica echo "$0: Started. Must reboot and configure Trusted Extensions." 4074746Srica else 4084746Srica # Support jumpstart etc 4094746Srica 4104746Srica # Make changes to enable Trusted Extensions 4114746Srica grep "^set sys_labeling=1" ${ROOT_PATH}/etc/system > /dev/null 2>&1 4124746Srica if [ $? -eq 0 ]; then 4134746Srica echo "$0: already enabled. Exiting." 4144746Srica exit $SMF_EXIT_OK 4154746Srica fi 4164746Srica 4174746Srica # Setup dependent services 4184746Srica cat >> $ROOT_PATH/var/svc/profile/upgrade <<\__TRUSTED_ENABLE 4194746Srica /usr/sbin/svcadm enable -s svc:/system/labeld:default 4204746Srica__TRUSTED_ENABLE 4214746Srica 4224746Srica do_commonstart 4236167Sjpk do_servicetag_register $ROOT_PATH 4244746Srica echo "$0: Started. Must configure Trusted Extensions before booting." 4254746Srica fi 4264746Srica ;; 4274746Srica 4284746Srica'stop') 4294746Srica tx_enabled=`/usr/bin/svcprop -c -p general/enabled $SMF_FMRI` 4304746Srica if [ "$tx_enabled" = "true" ]; then 4314746Srica /usr/bin/pkill -x -u 0 -P 1 -z `smf_zonename` labeld 4324746Srica exit $SMF_EXIT_OK 4334746Srica fi 4344746Srica 4354746Srica if [ "`/usr/sbin/zoneadm list -c`" != "global" ]; then 4364746Srica echo "$0: Must remove zones before disabling Trusted Extensions." 4374746Srica exit $SMF_EXIT_ERR_CONFIG 4384746Srica fi 4394746Srica 4404746Srica # Stop Trusted services. 4414746Srica /usr/sbin/svcadm disable svc:/system/tsol-zones:default 2>/dev/null 4424746Srica /usr/sbin/svcadm disable svc:/network/tnd:default 2>/dev/null 4434746Srica 4445743Saj # Uncomment audio, usb, removable-media, and hotpluggable device 4455743Saj # entries in /etc/logindevperm. 4465743Saj rewrite_logindev "#" "" 4474746Srica 4484746Srica # Remove sys_labeling from /etc/system 4494746Srica grep -v "sys_labeling" ${ROOT_PATH}/etc/system > /tmp/etc.system.$$ 4504746Srica mv /tmp/etc.system.$$ ${ROOT_PATH}/etc/system 4514746Srica grep "sys_labeling" ${ROOT_PATH}/etc/system > /dev/null 2>&1 4524746Srica if [ $? -eq 0 ]; then 4534746Srica echo "$0: ERROR: cannot remove sys_labeling in $ROOT_PATH/etc/system" 4544746Srica exit $SMF_EXIT_ERR_FATAL 4554746Srica fi 4564746Srica 4575679Srica do_pamremove 4586167Sjpk do_servicetag_delete 4596167Sjpk 4604746Srica do_bootupd 4614746Srica 4624746Srica /usr/bin/pkill -x -u 0 -P 1 -z `smf_zonename` labeld 4634746Srica echo "$0: Stopped. Will take effect at next boot." 4644746Srica ;; 4654746Srica 4664746Srica*) 4674746Srica echo "Usage: $0 { start | stop }" 4684746Srica exit 1 4694746Srica ;; 4704746Sricaesac 4714746Srica 4724746Sricaexit $SMF_EXIT_OK 4734746Srica 4746167Sjpk 475