Αυτή είναι μια αρκετά σύνθετη ερώτηση που σχετίζεται με το αρχείο Sudoers και την εντολή sudo γενικά.
ΣΗΜΕΙΩΣΗ: Έχω κάνει αυτές τις αλλαγές σε ένα ειδικό μηχάνημα που τρέχει Ubuntu Desktop 13.04, το οποίο χρησιμοποιώ καθαρά για λόγους εκμάθησης. Καταλαβαίνω ότι είναι'ένας τεράστιος κίνδυνος ασφάλειας να ενεργοποιήσετε το NOPASSWD sudo.
Αρχικά, η μόνη αλλαγή που έκανα στο αρχείο sudoers (/etc/sudoers) ήταν μια γραμμή, μια προδιαγραφή χρήστη που θα έπρεπε να επιτρέψει στον 'nicholsonjf' να εκτελεί όλες τις εντολές με sudo χωρίς να χρειάζεται να πληκτρολογήσει κωδικό πρόσβασης (δείτε τη γραμμή που αρχίζει με 'nicholsonjf'):
# 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"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
nicholsonjf ALL=NOPASSWD: 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
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Ωστόσο, αυτό δεν λειτούργησε και εξακολουθούσε να μου ζητείται ο κωδικός πρόσβασης κάθε φορά που εκτελούσα μια εντολή ως 'nicholsonjf'. Μπόρεσα να αρχίσω να εκτελώ εντολές sudo ως 'nicholsonjf' μόνο όταν αφαίρεσα το 'nicholsonjf' από τις ομάδες sudo και admin.
Μπορεί κάποιος να εξηγήσει γιατί αυτό λειτούργησε;
Μήπως επειδή ο χρήστης 'nicholsonjf' κληρονομούσε δικαιώματα sudo από τις δύο προδιαγραφές των ομάδων 'admin' και 'sudo' (που φαίνονται παρακάτω στο αρχείο sudoers), οι οποίες υπερισχύουν της προδιαγραφής του χρήστη 'nicholsonjf' επειδή βρίσκονται πιο κάτω στο αρχείο config;
Η γραμμή που προσθέσατε αντικαταστάθηκε. Από το man sudoers
:
Όταν αντιστοιχούν πολλαπλές καταχωρήσεις για έναν χρήστη, εφαρμόζονται με τη σειρά. Όταν υπάρχουν πολλαπλές αντιστοιχίες, χρησιμοποιείται η τελευταία αντιστοιχία (η οποία δεν είναι απαραίτητα η πιο συγκεκριμένη).
Στην περίπτωσή σας ο nicholsonjf
ήταν μέλος της ομάδας sudo
, οπότε γι' αυτόν εφαρμόστηκε αυτή η γραμμή:
%sudo ALL=(ALL:ALL) ALL
Αν θέλετε να αντικαταστήσετε τις καταχωρήσεις στο /etc/sudoers
απλά βάλτε τις νέες καταχωρήσεις μετά από αυτές.
Η νέα καταχώρηση θα πρέπει να μοιάζει με
myuser ALL=(ALL) NOPASSWD: ALL
για έναν απλό χρήστη, ή
%sudo ALL=(ALL) NOPASSWD: ALL
για μια ομάδα.
Για έναν μεμονωμένο χρήστη, προσθέστε αυτή τη γραμμή στο τέλος του αρχείου sudoers
χρησιμοποιώντας το sudo visudo
superuser ALL=(ALL) NOPASSWD: ALL
Για μια ομάδα
%supergroup ALL=(ALL) NOPASSWD: ALL
Όπως [ανέφερε ο Vince σε ένα σχόλιο, μπορείτε να χρησιμοποιήσετε αυτή τη γραμμή:
%sudo ALL=NOPASSWD: ALL
(Αυτή είναι διαφορετική από τις γραμμές που παρουσιάζονται στις απαντήσεις απαντήσεις, και έλυσε το πρόβλημα για μένα).