Mam pudełko ReadyNAS o nazwie „pamięć”, które moim zdaniem opiera się na Debianie. Mogę ssh w nim jako root. Próbuję ponownie skonfigurować serwer WWW, ale napotykam problem z uprawnieniami do plików, którego po prostu nie rozumiem. Nie mogę nic zrobić, /etc/frontview/apache/apache.pem
nawet jako root! Nie ma żadnych specjalnych uprawnień w porównaniu z innymi plikami w tym samym katalogu i mogę z nimi pracować.
storage:~# whoami
root
storage:~# cd /etc/frontview/apache/
storage:/etc/frontview/apache# ls -lah apache.pem*
-rw------- 1 admin admin 4.0k Jul 10 2013 apache.pem
-rw------- 1 admin admin 4.0k Jun 9 05:57 apache.pem.2017-02-04
-rw------- 1 admin admin 1.5k Jun 9 05:57 apache.pem.orig
storage:/etc/frontview/apache# touch apache.pem
touch: creating `apache.pem': Permission denied
storage:/etc/frontview/apache# touch apache.pem.2017-02-04
storage:/etc/frontview/apache# rm -f apache.pem
rm: cannot unlink `apache.pem': Operation not permitted
Co jest takiego specjalnego w tym pliku, że nie można go dotknąć? Nie mogę tego usunąć. Nie mogę zmienić uprawnień do tego. Nie mogę zmienić właściciela.
Katalog wydaje się być w porządku. Zostało mu miejsce, nie jest montowany tylko do odczytu. W rzeczywistości mogę edytować inne pliki w tym samym katalogu.
# ls -ld /etc/frontview/apache
drwxr-xr-x 8 admin admin 4096 Jun 9 05:44 /etc/frontview/apache
# df /etc/frontview/apache
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hdc1 2015824 504944 1510880 26% /
files
permissions
root
ext3
Stephen Ostermiller
źródło
źródło
ls -ld /etc/frontview/apache
idf /etc/frontview/apache
. Może folder jest na zamontowanym miejscu na dyskuro
?# mount
::/dev/hdc1 on / type ext3 (rw,noatime)
Odpowiedzi:
Właśnie znalazłem problem. W tym pliku ustawiono atrybut „niezmienny”.
ls
nie pokazuje tego. Aby zobaczyć, potrzebujesz innego polecenia:Po usunięciu niezmiennego bitu mogę edytować ten plik:
źródło
ls
nie ma opcji wylistowania atrybutów. Zapomniałem, ale może nawet systemowe wywołanie zapytania do nich nie jest przenośne, więc prawdopodobnie łatwiej było po prostu zaimplementować je w oddzielnym narzędziu.)ls
pokazał ten bit, lub gdyby którekolwiek z pozostałych poleceń, których użyłem, zawierały bardziej pomocne (i konkretne) komunikaty o błędach dotyczące tego, dlaczego odmówiono uprawnień.touch
wie, że system nazwać próbę (open("apache.pem", O_WRONLY|O_CREAT|..., 0666)
) nie powiodła sięEACCESS
. (Użyj,strace -efile touch apache.pem
aby zobaczyć wywołania systemowe związane z plikami, które wykonuje). Jak mówi strona podręcznika dla tego wywołania systemowego , istnieje wiele możliwych przyczyn EACCESS, a wiele z nich dotyczy katalogów nadrzędnych, a nie samego pliku. Kod piśmie do dokładnie wydedukować dlaczego wywołanie systemowe zwrócił błąd to zrobił byłoby niezwykle trudne, ponieważ różne systemy plików i systemów operacyjnych są różne ...errno
) i drukujesz go. (Korzystanie ze standardowejperror
funkcji biblioteki C lub równoważnej). Jest to jeden z rzadkich przypadków, w których nie zawsze jest to wystarczająca wskazówka dla użytkownika, aby szybko znaleźć problem, ale przez większość czasu działa bardzo dobrze. (Zwłaszcza w połączeniu z sytuacją,strace
w której istnieją wątpliwości co do tego, która dokładnie operacja spowodowała błąd.) Nie jest idealny, ale może być znacznie gorzej (por. MS Windows, w którym co najwyżej dostajesz kod błędu do Google.)chattr +i
, i zauważyłem, żerm foo
(bez-f
) komunikaty:rm: remove write-protected regular file ‘foo’
. Ponieważfaccessat(AT_FDCWD, "/var/tmp/foo", W_OK) = -1 EACCES (Permission denied)
. POSIXrm
domyślnie wymaga monitowania przed usunięciem plików chronionych przed zapisem i dlatego sprawdza przede wszystkim. Tak więc szybciej dostałbyś dużą wskazówkę, gdybyś jej nie używałrm -f
. : /access(3)
prosi jądro o sprawdzenie uprawnień tak, jakby naprawdę otwierało się do zapisu, więc pobiera listy ACL i atrybuty.