Mam skrypt, który daje mi precyzyjną kontrolę nad jasnością podświetlenia i wymaga sudo
uruchomienia. Zasadniczo jest to:
backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | tee $backlight
i mieszka w ~/bin/backlight-adjust
. Skrypt potrzebuje sudo
uprawnień, ponieważ tee $backlight
pisze w uprzywilejowanej lokalizacji. Więc zawiedzie, jeśli nie będzie działać sudo
.
Podejście to ma problem, bo nie mogę po prostu uruchomić sudo backlight-adjust
, ponieważ ~/bin
nie jest w $PATH
w sudo
środowisku, tylko w moim otoczeniu. Więc musiałbym biec sudo env "PATH=$PATH" backlight-adjust
lub coś podobnego.
Ewentualnie mógłbym napisać to w ten sposób:
backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | sudo tee $backlight
i zapytaj mnie o hasło.
Drugie podejście działa dla mnie lepiej, ponieważ nie muszę pamiętać o pisaniu sudo; zachęci mnie. I mogę zachować moje $PATH
nienaruszone. Jest to ogólnie wygodniejsze, ale czy są jakieś powody, dla których nie powinienem tego robić w drugą stronę?
(Używam Xubuntu 14.04, a moją powłoką jest GNU bash 4.2.45, jeśli to robi różnicę).
źródło
sudo
zachowuje mój$PATH
, więc nie mam tego problemu.Odpowiedzi:
Osobiście zastosowałbym inne podejście. Utwórz alias dla swojego skryptu. Dodaj ten wiersz do swojej
~/.bashrc
(lub równoważnej w innych powłokach)W ten sposób nie musisz się martwić pamięcią o uruchomieniu go
sudo
i nie musisz dodawaćsudo
skryptu. Będzie dla ciebie całkowicie przejrzysty i po prostu poprosisz o hasło podczas próby uruchomieniabacklight-adjust
.źródło
sudo
rzeczywistego skryptu, zwłaszcza że pozwala to łatwo zobaczyć, które elementy skryptu rzeczywiście wymagają uprawnień roota.Nie rozumiem, dlaczego może to być niepoprawne --- chociaż zwykle wolę, aby polecenia nie pytały mnie o to, aby można je było pisać. Możesz dostosować,
/etc/sudoers
abysudo
działał bez hasła.Ale ... dlaczego nie dodać
w swoim
/etc/rc.local
i zapominasz osudo
?(W Ubuntu, jeśli możesz używać,
sudo
jesteś w grupie sudo , więc możesz korzystać z niegochgrp sudo /sys...
i być z niego zadowolonym.)źródło
Możesz też dodać
do twojego
/etc/sudoers
pliku.źródło
Stwierdzasz, że sudo dostosowuje podświetlenie, ponieważ ~ / bin nie znajduje się w zmiennej $ PATH w środowisku sudo
Dlaczego więc na tym polegać? Myślę, że powinieneś po prostu zmienić tę linię na
/home/user/bin/backlight-adjust
i to zadziała.Ale naprawdę chciałbym, żeby Terdon również używał aliasu. Lub możesz umieścić swój skrypt
/usr/bin/
i będzie on dostępny dla każdego użytkownika (w tym root)źródło
~/bin
bo wtedy znajduje się pod repozytorium plików dotfiles mojego domu, więc pozostaje w kontroli wersji.-E
flagi, aby chronić środowisko:sudo -E command
sudo env "PATH=$PATH" ...
).Nie można podać ogólnej zasady ... jeśli skrypt / program jest zaprojektowany do przeprowadzenia ponownej konfiguracji (np. Drukarki) i jest wywoływany przez zwykłych użytkowników, musi to zrobić. W przeciwnym razie zostawiłbym wystarczająco dobrze w spokoju: jeśli zwykły użytkownik go uruchomi, po prostu się nie powiedzie (albo w wyniku wyraźnej kontroli, albo po prostu dlatego, że nie wolno mu nic zrobić).
Podwyższone przywileje powinny być wydawane oszczędnie, jeśli w ogóle. Przejście na wyższy poziom uprawnień jest trudne, lepiej pozostaw to ekspertom (tj
sudo(1)
.).źródło
Osobiście używam czegoś takiego jak
${SUDO}
w moich skryptach, aby osoba dzwoniąca mogła to ustawić w razie potrzeby lub${SUDO:-sudo}
użyć domyślnie.W twoim konkretnym przypadku jestem jednak z zaakceptowaną odpowiedzią.
źródło
Umieść skrypt (bez
sudo
) w odpowiedniej lokalizacji dla całego użytkownika, na przykład/bin
, a następnie wykonaj następujące czynności:Działa to poprzez ustawienie flagi setuid, co oznacza, że zawsze będzie uruchamiana jako właściciel pliku. Szczegółowe informacje można znaleźć na stronie http://major.io/2007/02/13/chmod-and-the-mysterious-first-octet/ . Tak naprawdę nie wiem aż tak bardzo o tym, jak to działa, po prostu znalazłem googlowanie na podstawie czegoś, co przeczytałem kilka lat temu.
źródło
4755
oznacza zawsze wykonywane jako właściciel, właściciel może czytać, pisać i wykonywać, grupa może czytać i wykonywać, a użytkownicy mogą czytać i wykonywać, co jest standardowym poziomem uprawnień do czynności, które każdy użytkownik powinien mieć do czynienia z uprawnieniami administratora.