Pozwól nieuprzywilejowanym użytkownikom na dostęp do określonych uprzywilejowanych plików

2

Mam zahartowany system Gentoo i zainstalowałem Xorg , Fluxbox , i Conky razem, aby utworzyć minimalny pulpit menedżera okien. W tym systemie mam 2 głównych użytkowników, root i mój normalny użytkownik, na którym się loguję.

Problem polega na tym, że Conky próbuje uzyskać dostęp do informacji termicznych i baterii od wewnątrz /sys/class/thermal/thermal_zone1/temp i /sys/class/power_supply/BAT1/uevent i dostaje błędy odmowy dostępu, co skutkuje wyświetlaniem danych, które będą wyświetlane jako puste lub jako wartości zerowe. Są to wartości uprawnień w obu plikach

  File: '/sys/class/thermal/thermal_zone0/temp'
  Size: 4096            Blocks: 0          IO Block: 4096   regular file
Device: 12h/18d Inode: 3719        Links: 1
Access: (0444/-r--r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-03-14 20:14:54.143855495 +0000
Modify: 2015-03-14 20:14:54.143855495 +0000
Change: 2015-03-14 20:14:54.143855495 +0000
 Birth: -

  File: '/sys/class/power_supply/BAT1/uevent'
  Size: 4096            Blocks: 0          IO Block: 4096   regular file
Device: 12h/18d Inode: 3907        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-03-14 19:23:15.227055847 +0000
Modify: 2015-03-14 19:23:15.227055847 +0000
Change: 2015-03-14 19:23:15.227055847 +0000
 Birth: -

Czy istnieje sposób, aby umożliwić Conky dostęp do określonych uprzywilejowanych plików bez podawania całego procesu root dostęp przez sudo? Mógłbym ustawić regułę sudoersa, aby umożliwić jej uruchamianie NOPASSWD, ale przyznanie Conky pełnego uprawnienia roota nie jest tym, co chciałbym zrobić.

Najlepiej byłoby tylko dać procesowi dostęp do odczytu tych plików. Czy mogę po prostu uczynić te pliki czytelnymi na całym świecie bez negatywnych skutków ubocznych?

Edytuj: Znalazłem źródło problemu. Nie są to pliki, które same w sobie stanowią problem, ponieważ są już czytelne na całym świecie, a ich katalog zawiera tylko drwx użytkownika. Czy będzie jakiś negatywny efekt uboczny, jeśli pozwolę /sys/class/thermal i /sys/class/power_supply tak dobrze jak /sys/class katalogi stają się czytelne na całym świecie?

Edit2: Okazuje się, że jedna z funkcji hartowania uniemożliwia normalnym użytkownikom dostęp do tych plików bez rootowania. Powodem, dla którego doszedłem do tego wniosku, jest bieganie ls -alh w katalogach jako mój zwykły użytkownik, wszystkie flagi rwx pojawiają się jako znaki zapytania nawet po ustawieniu ich na 0704 (drwx --- r--). Moją jedyną opcją jest niestety uruchomienie Conky jako root, za pomocą reguły sudo NOPASSWD, aby Fluxbox mógł go uruchomić bez żadnych kłopotów.

user428531
źródło
Weź pod uwagę, że sudoers pozwala na bardzo drobną konfigurację. Powinieneś ograniczyć się do dowolnego skryptu / pliku binarnego wymagającego dostępu (lub jego opakowania). Możliwości mogą być inną trasą, ale nie znalazłem żadnej, która zaspokoiłaby twoją natychmiastową potrzebę (także tłumacz musi mieć taką możliwość, a nie skrypt). Na koniec rozważałem uruchomienie zadania CRON lub tak, aby ustawić ACL na tych pdeudo-plikach, zakładając, że jest to dozwolone przez jądro. W ten sposób możesz mieć ściśle powiązaną kontrolę dostępu bez przekazywania roota sudoers.
0xC0000022L
@ 0xC0000022L Czy istnieje dokumentacja lub czy sudo może ograniczyć proces uruchamiany za pomocą sudo w taki sposób, że może uzyskać dostęp tylko do określonych plików blokujących uruchamianie aplikacji lub posiadających uprawnienia do czegokolwiek, co nie jest dozwolone do odczytu? Jeśli tak, to natychmiast rozwiąże mój problem.
user428531

Odpowiedzi:

0

Gdybym był w twojej sytuacji, rozważyłbym użycie facl's:

sudo setfacl -Rm u:1000:r /sys/class/

Gdzie 1000 to UID użytkownika, pod którym uruchamiane jest conky. Powyższy przykład spowoduje, że wszystkie pliki w / sys / class będą mogły być odczytane przez dowolny proces uruchomiony w UID 1000, ale mogą być bardziej ograniczone, jeśli wybrane zostaną określone pliki.

Jeśli chciałeś, aby oba wymienione powyżej pliki były czytelne:

sudo setfacl -m u:1000:rx /sys
sudo setfacl -m u:1000:rx /sys/class/
sudo setfacl -m u:1000:r /sys/class/thermal
sudo setfacl -m u:1000:r /sys/class/power_supply

Mam także maszynę z uruchomionym jądrem Gentoo i nie jestem pewien, jak obsługuje listy kontroli dostępu, zaktualizuję tę odpowiedź po testowaniu.

Mam też niezgrabne bieganie, ale nie pamiętam, jak pokonałem te przeszkody.

Jacob Margason
źródło