This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Best way to bulk update local user across multiple UTMs

We're using the UTM Manager, but I don't see a way to do this from there.

What I'd like to do is to reset the 'admin' user and another local user's passwords across all of our UTM 9's. We've got at least a dozen in the field, and I'd like to make this procedure something that could be done in just a few minutes.

UPDATES:
With help from teched I've started working on a configuration script.



This thread was automatically locked due to age.
  • Can you use the UTM Manager?  It's free.  It's designed for controlling multiple UTM's.
  • This is not a function of UTM Manager.  Other than writing some kind of custom script that SSHs into each unit, then sets the password via 'cc', you will be doing this operation manually.

    CTO, Convergent Information Security Solutions, LLC

    https://www.convergesecurity.com

    Sophos Platinum Partner

    --------------------------------------

    Advice given as posted on this forum does not construe a support relationship or other relationship with Convergent Information Security Solutions, LLC or its subsidiaries.  Use the advice given at your own risk.

  • Use at your own risk.

    Username: testadmin
    Newpassword: newtapassword

    # cc change_object `cc get_objects_filtered '$_->{data}->{name} eq "testadmin"' | pcregrep -o REF_AaaUse[A-Za-z]*` md4hash `iconv -f ASCII -t UTF-16LE 


    Please let me know if this does, or doesn't, work for you.
  • Use at your own risk.

    Username: testadmin
    Newpassword: newtapassword

    # cc change_object `cc get_objects_filtered '$_->{data}->{name} eq "testadmin"' | pcregrep -o REF_AaaUse[A-Za-z]*` md4hash `iconv -f ASCII -t UTF-16LE 


    Please let me know if this does, or doesn't, work for you.


    Thanks, I was just looking that command up.

    I should be able to write a script to ssh into each box and run that command with my parameters.

    I'll have to go to the manual effort of enabling ssh from my IP and standardizing the root password, but once that's done, I'll be able to use the script to make changes like this.

    It's all a little dangerous, but so is having an ex-employee walk out the door knowing the password to our client's firewalls.
  • Cool!  Good work, teched!  I prefer for the logs to show the name of the person making any changes, and so would want a script that would disable a specific username.  What would be the command for that for testadmin?

    @dwebb: if you do create a script for this, please show us a "sanitized" version for two UTMs.

    Cheers - Bob
     
    Sophos UTM Community Moderator
    Sophos Certified Architect - UTM
    Sophos Certified Engineer - XG
    Gold Solution Partner since 2005
    MediaSoft, Inc. USA
  • I didn't follow the part about logs showing the name of the person making changes.

    Disable user:
    cc change_object `cc get_objects_filtered '$_->{data}->{name} eq "testadmin"' | pcregrep -o REF_AaaUse[A-Za-z]*` enabled 0


    Enable user:
    cc change_object `cc get_objects_filtered '$_->{data}->{name} eq "testadmin"' | pcregrep -o REF_AaaUse[A-Za-z]*` enabled 1


    The general idea is:
    cc change_object REF_target enabled 0|1

    Maybe there is a more direct way to get the REF for the username than what I've been using.
  • Use at your own risk.

    Username: testadmin
    Newpassword: newtapassword

    # cc change_object `cc get_objects_filtered '$_->{data}->{name} eq "testadmin"' | pcregrep -o REF_AaaUse[A-Za-z]*` md4hash `iconv -f ASCII -t UTF-16LE 


    Please let me know if this does, or doesn't, work for you.


    Alright, so I tried it. First I


    • set up a new sophos install from scratch with LAN ip 192.168.0.1
    • enabled ssh using keys for loginuser and root


    See the below, you can see that passing 'uname -a' works fine. But the command you suggested does not.

    Pastebin


    dwebb@ubuntu:~$ ssh root@192.168.0.1 uname -a
    Linux changeme.REDACTED.com 3.8.13.15-10.gc33dd1e-smp64 #1 SMP Wed Feb 19 11:01:09 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

    dwebb@ubuntu:~$ ssh root@192.168.0.1 cc change_object `cc get_objects_filtered '$_->{data}->{name} eq "testadmin"' | pcregrep -o REF_AaaUse[A-Za-z]*` md4hash `iconv -f ASCII -t UTF-16LE {data}->{name} eq "testadmin": No such file or directory
    cc: fatal error: no input files
    compilation terminated.
    The program 'pcregrep' is currently not installed. You can install it by typing:
    sudo apt-get install pcregrep
    bash: cc: command not found


    Thoughts @teched?

    P.S. @BAlfson I've got a script that seems to be a good first draft for dealing with multiple hosts, here's a pastebin.
  • Kudos for setting up a test UTM to perform testing.

    The command I suggested should work fine when run from a command line directly on the UTM: it was quick and dirty.

    On the "errors": The local shell is performing the backtick (``) substitution instead of passing it through ssh to the remote shell.  The local system is attempting to run "cc get_objects_filtered...".    "cc" on the local system (C compiler) not at all "cc" on the remote system. Also the UTM OS isn't apt based so the apt messages didn't come from the UTM.

    On the UTM cc is merely an bash alias in /etc/profile so you'll need to use the proper name confd-client.plx for remote usage.


    With some quoting and escaping adjustments and a process substitution (printf/iconv) replaced with a pipe:

    confd-client.plx change_object `confd-client.plx get_objects_filtered "\$_->{data}->{name} eq \"testadmin\"" | pcregrep -o REF_AaaUse[A-Za-z]*` md4hash `printf "newtapassword" | iconv -f ASCII -t UTF-16LE | openssl dgst -md4 | cut -f 2 -d \ `


    Wrap in single quotes to shield the backticks from local interpretation for passing to remote host via command line SSH:
    'confd-client.plx change_object `confd-client.plx get_objects_filtered "\$_->{data}->{name} eq \"testadmin\"" | pcregrep -o REF_AaaUse[A-Za-z]*` md4hash `printf "newtapassword" | iconv -f ASCII -t UTF-16LE | openssl dgst -md4 | cut -f 2 -d \ `'



    The same types of changes should make the enable/disable user command remote friendly (internal quoting/escaping adjustments and wrapped in single quotes):

    Disable:
    'confd-client.plx change_object `confd-client.plx get_objects_filtered "\$_->{data}->{name} eq \"testadmin\"" | pcregrep -o REF_AaaUse[A-Za-z]*` enabled 0'


    Enable:
    'confd-client.plx change_object `confd-client.plx get_objects_filtered "\$_->{data}->{name} eq \"testadmin\"" | pcregrep -o REF_AaaUse[A-Za-z]*` enabled 1'
  • ...

    The command I suggested should work fine when run from a command line directly on the UTM: it was quick and dirty.

    ...


    That's what I was suspecting. It was reminding me of an issue once upon a time when I was trying to 'stuff' things to a screen.

    I was able to successfully execute `cc passwd newpassword` to change the admin user, so I knew it was an issue with the complexity of the command.

    Also, I hadn't fully appreciated the other two commands you listed, perhaps someday we'll get to a point where each of our team members has their own login for the dozen-or-so UTM's in the field, disabling en masse is a good tool to have. Next thing to figure would be adding a new user, and adding them to a group...

    Finally, I do feel that I have some responsibility to say that I THINK THIS IS ALL A VERY DANGEROUS PROJECT AND THE REASONABLE PART OF ME DOES NOT WANT TO GO LIVE WITH IT. I wish these actions were possible via the SUM, and if nothing else, I'm taking this opportunity to roll my own linux configuration management script, which is helping me appreciate things like Ansible and Chef, which I'm starting to explore.