Search code examples
linuxbashsudomacportsvisudo

Permission denied after visudo nopasswd set for port command


I am trying to prevent bash to ask for sudo permission to run the port command (OSX packet manager) adding it to visudo. I basically tried to follow this SO thread but I still get an error

manfredo@cave05:~$ port selfupdate
--->  Updating MacPorts base sources using rsync
Error: Error synchronizing MacPorts sources: command execution failed
Please run `port -v selfupdate' for details.
Error: /opt/local/bin/port: port selfupdate failed: Error synchronizing MacPorts sources: command execution failed

The same selfupdate command runs smoothly if I sudo it.

My visudo has the following lines

# User privilege specification
  root     ALL=(ALL) ALL
  %admin   ALL=(ALL) ALL
  %admin ALL=(ALL) NOPASSWD: /opt/local/bin/port

and I also tried susbtituitng the last line with

<user_name> ALL=(ALL) NOPASSWD: /opt/local/bin/port

What am I missing? Also can someone explain the syntax of the last line of the visudo file.


Solution

  • You actually want to achieve two things:

    1. Making it possible to run sudo port without the need to enter a password.

    You already solved that by adding the following line to /etc/sudoers:

    %admin ALL=(ALL) NOPASSWD: /opt/local/bin/port
    

    2. Making it possible to run sudo port without the need to explicitely type sudo

    This can be done by an shell alias. Since the question is tagged bash I assume your shell is bash. In that case modify your .bashrc and add the following line:

    alias port='sudo port'
    

    Start a new shell and it should work.