У вас есть несколько проблем со сценарием оболочки. Во-первых, вы должны процитировать $c
в то время как (все они — вы пропустили последнее ). В противном случае, когда $c пуст (, скажем, в начале вашей программы ), тест -z ничего не проходит вместо пустой строки, выдавая ошибку (что-то вроде «аргумент ожидается» ).
Во-вторых, вам нужно экранировать *
в вашей команде expr
. В противном случае он пытается сделать glob (совпадающим с именами файлов ), точно так же, как это сделал бы cat *
. Проще всего перейти к \*
. Ошибка от этого будет зависеть от того, что именно *расширяется до (, то есть какие файлы находятся в вашем текущем каталоге ), но, вероятно, это будет что-то запутанное!
По крайней мере, это должно запустить ваш скрипт.
PS :Существует множество других способов, которыми это можно улучшить, вы можете проверить ShellCheck для некоторых (автоматизированных )предложений.
What prevents me from just editing the /etc/shadow file in unencrypted systems?
Ничего, специальной защиты для /etc/shadow
нет. Некоторые системы могут иметь обнаружение несанкционированного доступа, поэтому системный администратор будет знать, что /etc/shadow
был изменен (, если вы также не отмените обнаружение несанкционированного доступа, как правило, обновив его, чтобы он считал ваше измененное /etc/shadow
правильным ), но ничего. запрещает вам редактировать файлы в незашифрованной файловой системе.
Шифрование диска (или раздела, содержащего /etc/shadow
), достаточно для предотвращения таких атак, но не для предотвращения более сложных атак. Полной защиты от атак, связанных с физическим доступом, по-прежнему нет, хотя измерения Secure Boot и TPM значительно затрудняют успешные атаки.
Вы можете редактировать его напрямую, но неверный ввод может привести к повреждению ОС, даже сделать ее неработоспособной, поэтому программаvipw
(с флагом -s )загружает временную копию для внесения правок в и проверяет синтаксис перед сохранением и перезаписью.