Dane
- Chcę, aby użytkownicy operatora na tym komputerze montowali własne udziały cifs
sudoers
Plik zawiera już/bin/mount -t cifs //*/* /media/* -o username=*
polecenia dla wszystkich operatorów- Chcę, aby użytkownicy zamontowali
cifs
udział za pomocą skryptu wpisując hasło tylko raz, a nie dwa razy. - Hasło sudo i hasło cifs są identyczne.
Co już mam
Ten skrypt działa:
#!/bin/bash
sudo 'mount -t cifs //192.168.1.1/home /media/$USER/home -o username=$USER'
... ale wymaga dwukrotnego wpisania tego samego hasła!
- Raz na
sudo
- Raz dla samego wierzchowca
Działa to również:
#!/bin/bash
echo -n Password:
read -s szPassword
echo $szPassword | sudo -S sh -c 'echo $szPassword | mount -t cifs //192.168.1.1/home /media/$USER/home -o username=$USER'
... ale wymagałoby to ode mnie umożliwienia wszystkim użytkownikom operatorasudo sh
(poważny problem bezpieczeństwa)
Pytanie
Jak zamontować CIFS udział w bash ¹ bez wkładania sh
w sudoers
pliku ani stworzenie stałej plik / tymczasowy ???
Uwaga 1: nie python, perl, C, Go, ... proszę?
Uwaga 2: Wiem, że mogę po prostu usunąć hasło z sudoers
pliku, ale staram się zwiększyć bezpieczeństwo, a nie poluzować je, nie rezygnując z wygody ...
printf "%s\n" "$szPassword" "$szPassword" | sudo -S mount -t cifs / ...
?Odpowiedzi:
Zamiast tego powinieneś skłonić użytkownika do wykonania polecenia sudo as
sudo script
. po prostu sprawdź, czy skrypt jest uruchamiany jako root, jeśli nie, poproś o niegoNie próbuj przechwytywać hasła swoich użytkowników.
źródło
sudo
a następnie (po pomyślnym uwierzytelnieniu) ponowniemount
. W ich przypadku hasła te są identyczne, więc rozumiem, dlaczego OP chciałby, aby użytkownik musiał wprowadzić to hasło tylko raz. Nie sądzę, aby twoje rozwiązanie w tym pomogło. Zgadzam się, że nie należy przechwytywać haseł.1>&2
), jest w autostartie i kiedyś był tylko jednym udostępnieniem cifs, ale teraz jest trzy, więc naprawdę jedno hasło jest potrzebne. (Zawiera już ten test na wypadek, gdyby ktoś inny, nie będący członkiem grupy operatorów, próbował go uruchomić)~/.smbcredentials
na przykład edycja ), a nawet bez potrzeby sudo (jeśli używasz gvfs, umount lub polkit).Jestem głupi!
Poniższy skrypt:
po prostu działa i:
źródło
<<<
można również użyć zamiastprintf
, ale lepszym rozwiązaniem byłobyread
całkowite upuszczenie i użyciesudo --stdin
samego. Coś w rodzaju$ printf "Type out your password\n" && sudo --stdin apt-get update
użytkownik nadal może wpisać hasło sudo. i to nie umieści go na liście procesów. Ale oczywiście istnieje nieskończona ilość możliwych innych problemów związanych z bezpieczeństwem, takich jak keyloggery, potencjalne luki w zabezpieczeniachsudo
, bla, bla i bla w nieskończonośćNie wymagaj
sudo
hasła do wykonania tego polecenia; monit o hasłomount
pozostaje.W
sudoers
, dołącz coś takiegoPo uwzględnieniu tego
sudo
nie będzie już pytać o hasło do tego konkretnego polecenia; użytkownik nadal musi podać hasło domount
polecenia.Uwaga : wziąłem polecenie dosłownie z tego, co ujęłeś w pytaniu; Nie sprawdziłem, czy jego symbole wieloznaczne pozwolą użytkownikom zrobić coś paskudnego. Przeczytaj stronę
sudoers
podręcznika, by zobaczyć przykłady nieprzyjemności. W szczególności zauważ, że ten wierszsudoers
pozwala użytkownikowi dodać dowolną liczbę-o
przełączników lub innych argumentówmount
. Możesz przemyśleć swoje podejście, np. Dodając skrypt, taki jak @Braiam, który proponuje i zezwala na jego uruchomieniesudo
bez dodatkowego uwierzytelnienia. Skrypt zapewnia wtedy, że użytkownicy mogą uruchomić tylko określoną formęmount
, którą chcesz, aby była uruchomiona.Ponadto, zamiast zezwalać na to wszystkim użytkownikom, możesz również ograniczyć to do członków określonej grupy, np. Możesz utworzyć grupę,
cifsmount
a następnie miećźródło
Ogólnym rozwiązaniem tych problemów jest umieszczenie następującej preambuły na górze sudo wymagającej skryptów:
Oczywiście ma to tę wadę, że jeśli niektóre polecenia w skrypcie nie wymagają
sudo
uruchomienia, tutaj niepotrzebnie podnosi się uprawnienia.W każdym razie myślałem, że podzielę się tą małą wskazówką. Najmilszą rzeczą w tym jest to, że jeśli jesteś już efektywnym rootem (np. Jeśli już nazwałeś go sudo), robi to z wdziękiem. Również popełnianie błędu i zmuszanie do przepisania / ponownego uruchomienia (z sudo) jest mniej przyjazne.
Możesz także sprawdzić
timestamp_timeout
zmienną, wman 5 sudoers
której nakazujesudo
zapamiętywanie poświadczeń użytkownika przez ograniczoną liczbę minut (i może być ułamkowa).źródło
#test if root: if not: bail out if [[ $EUID -ne 0 ]]; then echo "This script must be run as root, use sudo "$0" instead" 1>&2 exit 1 fi
Chodzi o to, że zawiera także wiele montowań, wszystkie z tym samym hasłem (ponownie: usunięte), ale mimo to dziękuję ...