Já pesquisei e encontrei muitas respostas para isso, mas ainda não consigo fazê-lo funcionar. Isso está em um sistema debian 9 - criei um alias e uma função shell no perfil:
alias lscron='sudo crontab -u biuser -l'
function edcron
{
lckf=~biuser/edcron
if [[ -f $lckf ]]
then
echo $(cat $lckf) is editing
else
echo $(id -nu) > $lckf
sudo crontab -u biuser -e
rm $lckf
fi
}
Eles funcionam como esperado, mas pedem senha. Quero dar a alguns usuários acesso para executar esses comandos sem senha, então adicionei algo assim a /etc/sudoers
:
analytics root = cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
some.user ALL = NOPASSWD: /usr/bin/crontab -u biuser -e, /usr/bin/crontab -u biuser -l
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Não recebo nenhum erro, mas pede senha; como faço para funcionar?
Editar
Matching Defaults entries for some.user on analytics:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User some.user may run the following commands on analytics:
(ALL : ALL) ALL
(root) NOPASSWD: /usr/bin/crontab -u biuser -e, /usr/bin/crontab -u biuser -l
(ALL : ALL) ALL
( fonte )
No seu caso, o último
(ALL : ALL) ALL
na saída desudo -l
"ganha".Após a
NOPASSWD
linha,sudoers
não há explícito(ALL : ALL) ALL
, mas há#includedir
. Isto não é um comentário . Deve haver(ALL : ALL) ALL
algum arquivo/etc/sudoers.d
que corresponda asome.user
.Seu objetivo é não ter
(ALL : ALL) ALL
após aNOPASSWD
linha na saída desudo -l -U some.user
. Então sua configuração funcionará.Você pode resolver o problema sem alterar os arquivos
sudoers.d
colocando aNOPASSWD
linha após#includedir
. Desta forma, sempre que a linha coincidir, será a última correspondência com certeza.