Почему chmod не делает то, что я ему сказал?

Я создал короткий скрипт bash для запуска некоторой программы 10 раз и сохранения вывода в файл. Пока я устанавливал исполняемые разрешения, я думал, что было бы неплохо удалить разрешение на запись, чтобы сценарий не мог быть изменен без доступа sudo / root. Но я получил это:

use@ubuntu:~/some/folder$ sudo chmod -w Run_SIM.sh chmod: Run_SIM.sh: new permissions are r-xrwxr-x, not r-xr-xr-x

Почему?

0
задан 11 November 2017 в 12:57

3 ответа

Короче, потому что вы удаляете разрешение для пользователя, когда не указываете, что нужно изменить. Вы можете указать, какой из u ser, g roup, o ther установить разрешения для:

$ ls -l bar
-rwxrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar 
$ chmod u-w bar 
$ ls -l bar
-r-xrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar
$ chmod g-w bar 
$ ls -l bar
-r-xr-xrwx 1 vidarlo users 0 Nov 11 10:52 bar
$ chmod o-w bar 
$ ls -l bar
-r-xr-xr-x 1 vidarlo users 0 Nov 11 10:52 bar

u, g, o перед разрешением указывает, какая из поля прав для изменения - для пользователя, группы и других.

Кроме того, у вас есть специальный a ll:

$ chmod a+w bar
$ ls -l bar
-rwxrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar

Сокращение, обычно используемое многими, это восьмеричные разрешения , который состоит из трех цифр, 0-7. Первая цифра представляет пользователя, вторую группу и третью другую.

В восьмеричной системе 1 означает expecute, 2 означает write, а 4 означает чтение. Вы добавляете вместе режимы, которые хотите, поэтому чтение и выполнение - 5, а только чтение - 4. Для того, чтобы прочитать файл + выполнить для всех и написать для владельца в восьмеричном, вы сделали бы chmod 755 filename. Режим 740 будет для владельца, прочитан для группы, а для других нет.

Хорошая вещь о восьмиступенчатых режимах заключается в том, что вы устанавливаете все режимы одновременно, поэтому никаких скрытых сюрпризов не осталось.

Чтобы зарезервировать редактирование скрипта для root, вам нужно сначала установить владельца файла в root, используя sudo chown root:root filename, а затем sudo chmod g-w,o-w filename - или используя восьмеричный sudo chmod 755 filename

Если вы перейдете к строке 301 исходного кода, вы увидите исходный код, ответственный за печать этого предупреждающего сообщения. В основном он вычисляет то, что скрытые пользователи могут намереваться, и распечатать разницу. Это немного интересное поведение, о котором я не знал:)

1
ответ дан 22 May 2018 в 16:19
  • 1
    Но установка разрешений x работала с «chmod + x». Разрешения были правильно установлены, даже если я не использовал «a + x». В конце концов я использовал восьмеричный способ сделать это. Просто проще выполнить " -w " чем потерять несколько секунд, чтобы определить, какой номер будет делать то, что я хочу. – NonStandardModel 11 November 2017 в 14:05
  • 2
    Действительно, это так. У меня нет четкого ответа, почему он это делает, за исключением того, что я предполагаю, что это может быть по соглашению, так как большинство двоичных файлов, как ожидается, будут доступны для всех пользователей. Должен признаться, что я всегда пользовался восьмеричными разрешениями, поэтому это не проблема. – vidarlo 11 November 2017 в 14:09
  • 3
    Дело в том, что chmod, похоже, знает, что я хотел сделать, просто потому, что он сделал этот комментарий о новых разрешениях. Это первый раз, когда я видел, как chmod делает комментарий ... – NonStandardModel 11 November 2017 в 14:11
  • 4
    Если вы перейдете к строке 301 из исходного кода , вы увидите краткое объяснение. В основном он вычисляет то, что могут наивные пользователи, и печатать разницу. Это немного интересное поведение, о котором я не знал :) – vidarlo 11 November 2017 в 14:17
  • 5
    Приятно ... Отредактируйте это на свой ответ, и я приму это ... Я просто думал о поиске источника ... Спасибо! – NonStandardModel 11 November 2017 в 14:19

Короче, потому что вы удаляете разрешение для пользователя, когда не указываете, что нужно изменить. Вы можете указать, какой из u ser, g roup, o ther установить разрешения для:

$ ls -l bar -rwxrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar $ chmod u-w bar $ ls -l bar -r-xrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar $ chmod g-w bar $ ls -l bar -r-xr-xrwx 1 vidarlo users 0 Nov 11 10:52 bar $ chmod o-w bar $ ls -l bar -r-xr-xr-x 1 vidarlo users 0 Nov 11 10:52 bar

u, g, o перед разрешением указывает, какая из поля прав для изменения - для пользователя, группы и других.

Кроме того, у вас есть специальный a ll:

$ chmod a+w bar $ ls -l bar -rwxrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar

Сокращение, обычно используемое многими, это восьмеричные разрешения , который состоит из трех цифр, 0-7. Первая цифра представляет пользователя, вторую группу и третью другую.

В восьмеричной системе 1 означает expecute, 2 означает write, а 4 означает чтение. Вы добавляете вместе режимы, которые хотите, поэтому чтение и выполнение - 5, а только чтение - 4. Для того, чтобы прочитать файл + выполнить для всех и написать для владельца в восьмеричном, вы сделали бы chmod 755 filename. Режим 740 будет для владельца, прочитан для группы, а для других нет.

Хорошая вещь о восьмиступенчатых режимах заключается в том, что вы устанавливаете все режимы одновременно, поэтому никаких скрытых сюрпризов не осталось.

Чтобы зарезервировать редактирование скрипта для root, вам нужно сначала установить владельца файла в root, используя sudo chown root:root filename, а затем sudo chmod g-w,o-w filename - или используя восьмеричный sudo chmod 755 filename

Если вы перейдете к строке 301 исходного кода, вы увидите исходный код, ответственный за печать этого предупреждающего сообщения. В основном он вычисляет то, что скрытые пользователи могут намереваться, и распечатать разницу. Это немного интересное поведение, о котором я не знал:)

1
ответ дан 18 July 2018 в 03:29

Короче, потому что вы удаляете разрешение для пользователя, когда не указываете, что нужно изменить. Вы можете указать, какой из u ser, g roup, o ther установить разрешения для:

$ ls -l bar -rwxrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar $ chmod u-w bar $ ls -l bar -r-xrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar $ chmod g-w bar $ ls -l bar -r-xr-xrwx 1 vidarlo users 0 Nov 11 10:52 bar $ chmod o-w bar $ ls -l bar -r-xr-xr-x 1 vidarlo users 0 Nov 11 10:52 bar

u, g, o перед разрешением указывает, какая из поля прав для изменения - для пользователя, группы и других.

Кроме того, у вас есть специальный a ll:

$ chmod a+w bar $ ls -l bar -rwxrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar

Сокращение, обычно используемое многими, это восьмеричные разрешения , который состоит из трех цифр, 0-7. Первая цифра представляет пользователя, вторую группу и третью другую.

В восьмеричной системе 1 означает expecute, 2 означает write, а 4 означает чтение. Вы добавляете вместе режимы, которые хотите, поэтому чтение и выполнение - 5, а только чтение - 4. Для того, чтобы прочитать файл + выполнить для всех и написать для владельца в восьмеричном, вы сделали бы chmod 755 filename. Режим 740 будет для владельца, прочитан для группы, а для других нет.

Хорошая вещь о восьмиступенчатых режимах заключается в том, что вы устанавливаете все режимы одновременно, поэтому никаких скрытых сюрпризов не осталось.

Чтобы зарезервировать редактирование скрипта для root, вам нужно сначала установить владельца файла в root, используя sudo chown root:root filename, а затем sudo chmod g-w,o-w filename - или используя восьмеричный sudo chmod 755 filename

Если вы перейдете к строке 301 исходного кода, вы увидите исходный код, ответственный за печать этого предупреждающего сообщения. В основном он вычисляет то, что скрытые пользователи могут намереваться, и распечатать разницу. Это немного интересное поведение, о котором я не знал:)

1
ответ дан 24 July 2018 в 17:51

Другие вопросы по тегам:

Похожие вопросы: