Dlaczego chmod + w nie daje uprawnień do zapisu innym (o)

18

Kiedy uruchamiam chmod +w filename, nie daje uprawnień do zapisu other, po prostu daje uprawnienia do zapisu do useri group.

Po wykonaniu tego polecenia

chmod +w testfile.txt

uruchamianie ls -l testfile.txtwydruków

-rw-rw-r-- 1 ravi ravi 20 Mar 10 18:09 testfile.txt

ale w przypadku +ri +xdziała poprawnie.

Nie chcę używać chmod ugo+w filename.

Ravi Sevta
źródło
1
Jeśli nie chcesz używać ugo, użyj a.
muru
tak, ale chcę tylko wiedzieć, dlaczego +wnie działa.
Ravi Sevta
Dlatego zostawiłem dwa komentarze.
muru
@muru. Twierdzisz w swojej askubuntuodpowiedzi, że wspominasz powyżej, że „To zachowanie jest nakazane przez POSIX, a więc nie jest błędem”. Informujemy, że tekst użycia aplikacji POSIX jest nienormatywny i dlatego nie jest wymagany przez POSIX.
fpmurphy

Odpowiedzi:

26

Twoja konkretna sytuacja

W Twojej konkretnej sytuacji możemy zgadywać, że Twój prąd umaskjest 002(jest to powszechna wartość domyślna) i to wyjaśnia twoje zaskoczenie.

W tej konkretnej sytuacji, w której umaskwartość wynosi 002 (wszystkie liczby ósemkowe).

  • +rznaczy ugo+rponieważ 002 & 444jest 000, co pozwala ustawić wszystkie bity
  • +xznaczy ugo+xponieważ 002 & 111jest 000, co pozwala ustawić wszystkie bity
  • ale +wznaczy „ ug+wponieważ 002 & 222jest” 002, co uniemożliwia ustawienie bitu „o”.

Inne przykłady

  • Z umask 022 +woznaczałby u+w.
  • Z umask 007 +rwxoznaczałby ug+rwx.
  • Z umask 077 +rwxoznaczałby u+rwx.

Co spełni twoje oczekiwania

Po zmianie umaskna 000, wykonując

umask 000

więc w twoim terminalu

chmod +w file

ustawi uprawnienia do ugo + w.

Dygresja

Jak sugeruje ilkkachu, zauważ, że umask 000to nie znaczy, że każdy może czytać i zapisywać wszystkie twoje pliki.

Ale umask 000oznacza, że ​​każdy, kto ma jakiś dostęp do dowolnego konta użytkownika na twoim komputerze (który może obejmować programy z uruchomionymi usługami serwerowymi ofc), może odczytywać i zapisywać wszystkie pliki, które tworzysz z aktywną maską i nie zmieniają się (jeśli zawiera łańcuch katalogi do katalogu głównego również pozwala na to).

Prvt_Yadav
źródło
4
umask 000 oznacza, że ​​każdy, kto ma jakiś dostęp do konta użytkownika na twoim komputerze (który może obejmować programy obsługujące usługi serwerowe ofc), może czytać i zapisywać wszystkie pliki, które tworzysz przy aktywnej tej masce i nie zmieniają się, żeby było jasne
StarWeaver,
4
„+ r oznacza ugo = r” - nie, nie oznacza to ustawić rbit dla stron, na które pozwala umask. Jest to wyraźnie określone w instrukcjach np. GNU chmod i FreeBSD chmod, a także w standardzie. To samo dotyczy +x. Dla +wmasz rację, dla przypadku tej konkretnej umask.
ilkkachu
4
Również ustawienie umask na 0 nie oznacza, że ​​każdy może czytać i zapisywać wszystkie twoje pliki, ponieważ wiele aplikacji tworzy pliki, które są szczególnie prywatne w trybie 0600, co oznacza, że ​​grupa i inni nie mają dostępu, niezależnie od umask.
ilkkachu
@ilkkachu + r oznacza ugo = r, było to związane z sytuacją opisaną w pytaniu. To nie było ogólne.
Prvt_Yadav
2
@Debian_yadav, właśnie o to chodzi: umaskjest to ważna część tego, jak się +rzachowuje, a nie sidotota. Zresztą, nawet zakładając, że umask 002, chmod +rnie znaczy chmod ugo=r, to znaczychmod ugo+r
ilkkachu
24

Z:

chmod +<perms>

Perms są dodawane do użytkownika , grupy i innych, ale z umask nadal obowiązującym. Zapewnia to, że plik nie uzyska więcej uprawnień niż nowo utworzony plik.

Jeśli chcesz dodać perms do użytkownika , grup i innych niezależnie od umask, użyj

chmod a+<perms>

co jest skrótem od

chmod ugo+<perms>
Stéphane Chazelas
źródło
Oznacza to, że + x i + x nie są równe.
Prvt_Yadav,
1
Lubię mieć linki: man7.org/linux/man-pages/man1/chmod.1.html „Jeśli nie podano żadnego z nich, efekt jest taki, jakby podano (a), ale bitów ustawiono w umask nie ma to wpływu. ”
tehnicaorg
0

Musisz określić, komu udzielasz uprawnień, na przykład za otherpomocąchmod o+w testfile.txt

Jaken551
źródło
1
tak, ale myślę, że +wdaje uprawnienia wszystkim (użytkownikom, grupom i innym).
Ravi Sevta
Aby udzielić uprawnień wszystkim użytkownikom, użyj chmod a+w testfile.txt. Użyj udla użytkownika, gdla grupy, odla innych i adla wszystkich.
Jaken551
jeżeli chmod a+w filename, chmod +w filenamei chmod ugo+w filenamesą alternatywą dla siebie, to dlaczego nie wystarczy użyć+w
Ravi Sevta