3

Возможно ли иметь разрешение на запись, но не чтение файла в Linux? Как насчет выполнения, но не для чтения и записи?

4 ответа4

8
[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

Так что да, возможно иметь права на запись, но не чтение файла.

6

Да, хотя разрешение на выполнение без разрешения на чтение не имеет значения для недвоичного файла (поскольку для его выполнения необходимо прочитать сценарий). Выполнение в каталоге без чтения означает, что вы можете просматривать каталог, но не просматривать его или делать что-либо еще с его содержимым. Рассмотрим следующий путь:

/home/user/foo/bar

Если каталог foo имеет режим 0711 (полное разрешение для владельца, выполнение только для группы и мира), в то время как bar каталогов имеет режим 0755 (полное разрешение для владельца, чтение и выполнение для всех остальных), тогда учетные записи, отличные от user могут cd /home/user/foo/bar и найдите, что bar ведет себя как любая обычная директория; однако, хотя cd /home/user/foo будет работать, ls и любая другая команда в этом каталоге потерпит неудачу из-за недостаточных прав доступа (т. е. вы не можете прочитать каталог, чтобы просмотреть его содержимое).

Разрешение на запись без разрешения на чтение файла делает только то, что оно подразумевает: вы можете записывать в файл, но не можете читать то, что написали. Это может быть полезно в случае, когда процессы под несколькими учетными записями записывают в один файл журнала, но процесс, принадлежащий одному пользователю, не должен иметь возможность считывать (предположительно чувствительные) записи журнала из процесса, принадлежащего другому пользователю.

2

Права на чтение, запись, выполнение в Unix в общем случае полностью независимы.

Unix различает права пользователя (для владельца файла), права группы (для любого пользователя, принадлежащего к группе файла) и другие. Разрешения проверяются строго в этом порядке; то есть, если пользователь пытается получить доступ, пользовательские разрешения применяются, и больше ничего не проверяется; если не пользователь, но принадлежит к группе, применяются разрешения группы; если ничего из вышеперечисленного, применяются другие разрешения.

Права доступа отображаются в ls(1) как rwx трижды (пользователь, группа, другие). Таким образом, r-- означает только чтение, rw- чтение-запись, а --x только выполнение. Команда chown(1) обычно вводит восьмеричные числа, дающие разрешения, но вы также можете использовать вышеуказанную запись, то есть chown u+r,g-x,o=rw somefile означает «добавить r для пользователя, вычесть x для группы, установить r и w именно для других ".

1

Один из способов приблизиться к 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .