I have made a shell script to write /etc/sudoers.d/aptget -file but it is breaking the sudo if an alias is already defined in /etc/sudoers or in any file in /etc/sudoers.d/. I am using visudo to edit the files but it does not catch the error as it seems to check only the file currently being edited.
Previously I added following manually into /etc/sudoers
Cmnd_Alias APTGETUPDATE = /usr/bin/apt-get update *
Cmnd_Alias APTGETINSTALL = /usr/bin/apt-get -y --force-yes install *
%aptgroup ALL = (root) NOPASSWD: APTGETUPDATE, APTGETINSTALL
Defaults!APTGETUPDATE !requiretty
Defaults!APTGETINSTALL !requiretty
Everything worked great. Making a script to write a into /etc/sudoers.d/aptget or adding above manually into it passes visudo check but causes sudo to not function.
script.sh:
#!/bin/bash
updaterSudoers="$(cat <<EOF
Cmnd_Alias APTGETUPDATE = /usr/bin/apt-get update *
Cmnd_Alias APTGETINSTALL = /usr/bin/apt-get -y --force-yes install *
%aptgroup ALL = (root) NOPASSWD: APTGETUPDATE, APTGETINSTALL
Defaults!APTGETUPDATE !requiretty
Defaults!APTGETINSTALL !requiretty
EOF
)"
echo "$updaterSudoers" | (EDITOR="tee -a" visudo -f /etc/sudoers.d/aptget)
error:
>>> /etc/sudoers: Alias `APTGETUPDATE' already defined near line 31 <<<
>>> /etc/sudoers: Alias `APTGETINSTALL' already defined near line 31 <<<
sudo: parse error in /etc/sudoers near line 31
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
Lines from 31 onwards in sudoers:
31 Cmnd_Alias APTGETUPDATE = /usr/bin/apt-get update *
32 Cmnd_Alias APTGETINSTALL = /usr/bin/apt-get -y --force-yes install *
33
34 %aptgroup ALL = (root) NOPASSWD: APTGETUPDATE, APTGETINSTALL
35 Defaults!APTGETUPDATE !requiretty
36 Defaults!APTGETINSTALL !requiretty
grep APTGETUPDATE /etc/sudoers
and check output) also for /etc/sudoers.d/*.