Возможно ли иметь разрешение на запись, но не чтение файла в Linux? Как насчет выполнения, но не для чтения и записи?
4 ответа
[benji@laptop ~]$ ./hello
Hello world!
[benji@laptop ~]$ chmod 000 hello #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +x hello #make it executable
[benji@laptop ~]$ cat hello #try to read it, but can't
cat: hello: Permission denied
[benji@laptop ~]$ ./hello #try to run it, it works!
Hello world!
[benji@laptop ~]$
[benji@laptop ~]$ cat hello.sh
#!/usr/bin/bash
echo 'Hello world!'
[benji@laptop ~]$ chmod 000 hello.sh #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +x hello.sh #make it executable
[benji@laptop ~]$ cat hello.sh #try to read it; FAIL
cat: hello.sh: Permission denied
[benji@laptop ~]$ ./hello.sh #try to run it, but the shell interpreter (bash) cannot read it; FAIL
/usr/bin/bash: ./hello.sh: Permission denied
[benji@laptop ~]$
Можно иметь только разрешения на выполнение, только если файл не является сценарием оболочки; интерпретатор оболочки должен читать сценарий оболочки (и, следовательно, ему требуются разрешения на чтение). В противном случае для двоичных исполняемых файлов разрешения на чтение не требуются; просто выполните разрешения.
[benji@laptop ~]$ echo hello >file
[benji@laptop ~]$ chmod 000 file #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +w file #write-only permissions
[benji@laptop ~]$ cat file #cannot read it
cat: file: Permission denied
[benji@laptop ~]$ echo hello again >file #but *can* write it
Так что да, возможно иметь права на запись, но не чтение файла.
Да, хотя разрешение на выполнение без разрешения на чтение не имеет значения для недвоичного файла (поскольку для его выполнения необходимо прочитать сценарий). Выполнение в каталоге без чтения означает, что вы можете просматривать каталог, но не просматривать его или делать что-либо еще с его содержимым. Рассмотрим следующий путь:
/home/user/foo/bar
Если каталог foo
имеет режим 0711 (полное разрешение для владельца, выполнение только для группы и мира), в то время как bar
каталогов имеет режим 0755 (полное разрешение для владельца, чтение и выполнение для всех остальных), тогда учетные записи, отличные от user
могут cd /home/user/foo/bar
и найдите, что bar
ведет себя как любая обычная директория; однако, хотя cd /home/user/foo
будет работать, ls
и любая другая команда в этом каталоге потерпит неудачу из-за недостаточных прав доступа (т. е. вы не можете прочитать каталог, чтобы просмотреть его содержимое).
Разрешение на запись без разрешения на чтение файла делает только то, что оно подразумевает: вы можете записывать в файл, но не можете читать то, что написали. Это может быть полезно в случае, когда процессы под несколькими учетными записями записывают в один файл журнала, но процесс, принадлежащий одному пользователю, не должен иметь возможность считывать (предположительно чувствительные) записи журнала из процесса, принадлежащего другому пользователю.
Права на чтение, запись, выполнение в Unix в общем случае полностью независимы.
Unix различает права пользователя (для владельца файла), права группы (для любого пользователя, принадлежащего к группе файла) и другие. Разрешения проверяются строго в этом порядке; то есть, если пользователь пытается получить доступ, пользовательские разрешения применяются, и больше ничего не проверяется; если не пользователь, но принадлежит к группе, применяются разрешения группы; если ничего из вышеперечисленного, применяются другие разрешения.
Права доступа отображаются в ls(1)
как rwx
трижды (пользователь, группа, другие). Таким образом, r--
означает только чтение, rw-
чтение-запись, а --x
только выполнение. Команда chown(1)
обычно вводит восьмеричные числа, дающие разрешения, но вы также можете использовать вышеуказанную запись, то есть chown u+r,g-x,o=rw somefile
означает «добавить r
для пользователя, вычесть x
для группы, установить r
и w
именно для других ".
Один из способов приблизиться к chmod - это использовать chmod math где read = 4 write = 2 execute = 1. позиционирование нужного номера происходит в следующем порядке: U = пользователь G = группа O = другие, команда 'chmod UGO' установит права доступа.
Если вы хотите, чтобы у пользователя были полные права доступа, было бы чтение (4)+ запись (2)+ выполнение (1)= 7
Если вы хотите, чтобы группа прочитала и выполнила это, было бы прочитано (4)+execute (1)= 5
Если вы хотите, чтобы другие не имели доступа, было бы 0
команда для установки этих разрешений будет выглядеть так: файл chmod 750