Почему исполняемый файл не является исполняемым?
Похоже, вы находитесь в самом начале всего этого безумия программирования. Итак, я понимаю, если вам трудно понять, что такое файл с неправильным именем объекта (в данном случае именуемый .o
), параметры компилятора и что они на самом деле делают или даже имена библиотек.
Мое предположение состоит в том, что, судя по всему, вы копируете строку скрипта shell, который выполняете, чтобы создать свой исполняемый файл из неизвестного примера ( по крайней мере, так кажется -llib_name
). Поэтому я постараюсь объяснить все, что здесь происходит, так просто, ясно и грубо, как только смогу.
Прежде всего, компилятор C++ компилирует данный исходный файл в перемещаемый машинный код. Если вы храните выбросы компилятора (и только компилятора) в файле, этот файл станет вышеупомянутым объектным файлом (вспомните файл .o
). Если вы обратили внимание, это означает, что объектный файл содержит перемещаемый машинный код .
Теперь вы скомпилировали исходный код и сохранили его эквивалент машинного кода в объектном файле. Однако этот объектный файл не является непосредственно исполняемым; даже если он содержит машинный код, который CPU не должен иметь проблем с выполнением. Проблема в том, что этот машинный код не связан. Итак, вот второй пункт: перемещаемый машинный код в объектном файле не связан и, следовательно, не может (ну, скорее, не должен) выполняться . В дополнение к этому объектный файл может также содержать дополнительные метаданные, помогающие компоновщику в процессе связывания, который создает фактический исполняемый файл. Мы будем называть все это промежуточное представление
Итак, теперь, когда мы скомпилировали наш исходный код и выпустили объектный файл, следующим очевидным и логичным шагом будет связать объектный файл с любыми библиотеками и / или другими объектными файлами, которые вы хотите, чтобы создать исполняемый файл, который мы можем выполнить точно так же, как ваш первый двоичный файл .
. Здесь в игру вступает компоновщик, который принимает объектные файлы и библиотеки (Примечание: грубо говоря, библиотеки-это коллекции объектных файлов) и выполняет некоторую магию связывания, такую как разрешение неопределенных ссылок в объектных файлах между модулями и упорядочивание адресного пространства исполняемого файла и т. д. /test
./test
.
Итак, теперь, когда вы знаете основы, давайте посмотрим, что не так с вашими вызовами shell. Прежде всего, вы должны узнать, что, вызывая c++
, вы можете вызвать как компилятор C++ (я думаю, что в данном случае это либо
, либо clang++
), так и компоновщик. Во-вторых, вы должны знать, что флаг -c
указывает компилятору скомпилировать данный исходный файл и выдать его эквивалентный объектный код и только машинный код. Таким образом, вызов компилятора C++ без флага
-c
не только заставляет его компилировать данный исходный код, но и связывать полученный объектный код и создавать конечный исполняемый файл. Это то, что происходит в вашей первой командной строке. Испускаемый файл с именем test
является связанным исполняемым файлом. Однако во второй командной строке присутствует флаг
. В этом случае компилятор не будет выдавать ничего, кроме объектного кода, полученного при компиляции test.cpp
. Вам нужно будет связать этот результирующий объектный файл, чтобы создать исполняемый файл. Похоже, вы говорите компилятору хранить объектный код, который он произвел, в файле с именем test
, о котором говорил Марк, когда упоминал неправильное название (объектные файлы обычно имеют суффикс .o
или .obj
).
С этого момента у вас есть два варианта: либо удалить флаг -c
,либо связать объектные файлы.
liblib_name
):${CXX} -std=c++0x -stdlib=libc++ -I${INCLUDE_DIR1} -c test.cpp -o test.o
${CXX} -std=c++0x -stdlib=libc++ -L${LIB_DIR1} -llib_name test.o -o test
Я взял на себя смелость представить там libc++
. Если вы хотите использовать C++11 (вы называете его C++0x), то лучше, если он будет рядом. Однако, если вы хотите скомпилировать и связать в одну строку, то же самое можно сделать и с помощью этого:
${CXX} -std=c++0x -stdlib=libc++ -I${INCLUDE_DIR1} -L${LIB_DIR1} -llib_name test.cpp -o test
Эти двое делают то же самое. Но обратите внимание, как в однострочной версии отсутствует флаг
.
Теперь, когда мы почти все рассмотрели, последний вопрос будет заключаться в том , что делают -I
, -L
и -l
. -I
указывает путь, по которому компилятор будет искать заголовочные файлы, включенные в ваш исходный код. Этот путь не переопределяет пути поиска заголовков по умолчанию компилятора, он просто является дополнением к ним.
-L
— это то же самое, но для библиотек. Ваш компилятор будет искать библиотеки, с которыми вы явно связываетесь (например,
в данном случае) в этом пути. Опять же, это не отменяет пути поиска библиотеки по умолчанию. Наконец, флаг -l
используется для указания библиотеки компоновщику для связи с ней при связывании исполняемого файла. В вашем случае вы связываетесь с библиотекой под названием liblib_name
(имя, указанное для флага -l
, опускает первый lib
в имени файла библиотеки), на которую, как вы сказали, ваш компилятор жалуется как на несуществующую. Вы уверены, что действительно хотите связать liblib_name
с вашим исполняемым файлом? Это вообще настоящая библиотека? Если нет, то удалите весь параметр
, и ваш компилятор должен прекратить кричать об этом.
Извините за долгие, долгие, долгие объяснения, но я надеюсь, что вы узнали немного здесь и немного там, и все это будет полезно для вас.
«ВКонтакте» запретила передавать mp3-файлы через документы из-за претензий правообладателей Статьи редакции
«ВКонтакте» закрыла возможность загружать mp3-файлы в раздел документов. Об этом сообщило сообщество LIVE Express, обозревающее новости соцсети.
Загрузка в документы музыкальных файлов других форматов (например, m4a, использующийся для песен в магазине iTunes Store) по-прежнему доступна без ограничений. Песни в формате mp3 можно добавлять в раздел аудиозаписей, однако в нём работает фильтрация: если запись была изъята по требованию правообладателей, повторно загрузить её нельзя.
В феврале «ВКонтакте» обновила свои приложения для операционной системы iOS, убрав раздел с музыкой из меню, однако пользователи обнаружили, что он оказался доступным через поиск по короткой ссылке vk.com/audio. В начале марта стало известно, что власти США проигнорировали просьбу «ВКонтакте» исключить соцсеть из «списка 301», в котором перечислены пиратские сайты.
Возможность передачи файлов в виде документов появилась во «ВКонтакте» 25 мая 2011 года, а позднее превратилась в неструктурированный каталог. В 2014 году функция передачи документов появилась в мессенджере Павла Дурова Telegram: его представители предлагали пересылать через mp3-файлы аудиосообщения. Позднее для звуковых сообщений появилась отдельная функция, но загрузка mp3-файлов осталась.
70 326 просмотров
{ «author_name»: «Никита Лихачёв», «author_type»: «self», «tags»: [], «comments»: 66, «likes»: 44, «favorites»: 2, «is_advertisement»: false, «subsite_label»: «tech», «id»: 54816, «is_wide»: true, «is_ugc»: true, «date»: «Tue, 21 Apr 2015 14:42:02 +0300», «is_special»: false }
{«id»:2,»url»:»https:\/\/tjournal. ru\/u\/2-nikita-lihachev»,»name»:»\u041d\u0438\u043a\u0438\u0442\u0430 \u041b\u0438\u0445\u0430\u0447\u0451\u0432″,»avatar»:»94ff37dd-361a-1148-e620-4adae912308a»,»karma»:273446,»description»:»»,»isMe»:false,»isPlus»:false,»isVerified»:true,»isSubscribed»:false,»isNotificationsEnabled»:false,»isShowMessengerButton»:false}
{«url»:»https:\/\/booster.osnova.io\/a\/relevant?site=tj»,»place»:»entry»,»site»:»tj»,»settings»:{«modes»:{«externalLink»:{«buttonLabels»:[«\u0423\u0437\u043d\u0430\u0442\u044c»,»\u0427\u0438\u0442\u0430\u0442\u044c»,»\u041d\u0430\u0447\u0430\u0442\u044c»,»\u0417\u0430\u043a\u0430\u0437\u0430\u0442\u044c»,»\u041a\u0443\u043f\u0438\u0442\u044c»,»\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c»,»\u0421\u043a\u0430\u0447\u0430\u0442\u044c»,»\u041f\u0435\u0440\u0435\u0439\u0442\u0438″]}},»deviceList»:{«desktop»:»\u0414\u0435\u0441\u043a\u0442\u043e\u043f»,»smartphone»:»\u0421\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b»,»tablet»:»\u041f\u043b\u0430\u043d\u0448\u0435\u0442\u044b»}},»isModerator»:false}
Еженедельная рассылка
Одно письмо с лучшим за неделю
Проверьте почту
Отправили письмо для подтверждения
Ошибка файл не должен быть исполняемым
ошибка файл не должен быть исполняемымНе могли бы вы помочь мне в решении проблемы в моем коде? Предполагается, что программа попросит пользователя ввести имена собак и, наконец, напечатать имя третьей собаки. Когда я компилирую и. Ошибка. Не удалось Загрузить, Файл не Должен Быть Исполняемым, его Размер не Должен Превышать 2 ГБ. Для просмотра онлайн кликните на видео ⤵. Как обойти блокировку? Не удалось загрузить файл. Файл не должен быть исполняемым. С ошибками при скачивании файлов сталкиваются все пользователи сети.
В чем их причина и как скачать нужный документ без проблем, расскажем в этой статье. Ошибка. Не удалось Загрузить, Файл не Должен Быть Исполняемым, его Размер не Должен Превышать 2 ГБ. Для просмотра онлайн кликните на видео ⤵. Как обойти блокировку? Не удалось загрузить файл. Файл не должен быть исполняемым.
Ошибка. Не удалось Загрузить, Файл не Должен Быть Исполняемым, его Размер не Должен Превышать 2 ГБ. Для просмотра онлайн кликните на видео ⤵. Как обойти блокировку? Не удалось загрузить файл. Файл не должен быть исполняемым. Не могли бы вы помочь мне в решении проблемы в моем коде? Предполагается, что программа попросит пользователя ввести имена собак и, наконец, напечатать имя третьей собаки.
Когда я компилирую и. С ошибками при скачивании файлов сталкиваются все пользователи сети. В чем их причина и как скачать нужный документ без проблем, расскажем в этой статье.
Похожее:
Как отправить выполненную работу
Как отправить выполненную работу
После того, как заказчик выберет вас исполнителем и внесет плату за ваши услуги, вы можете приступать к выполнению задания.
На странице заказа будет виден статус заказа:
Чтобы отправить заказчику файл с работой, нажмите на значок скрепки:
Далее система предложит выбрать тип загружаемого файла:
Если вы хотите отправить заказчику часть работы, план, черновик, предварительный вариант на проверку, выберите «Промежуточный» файл.
Если вы выбираете тип «Окончательный», вы подтверждаете, что загружаемый вами файл содержит выполненную работу заказчика и полностью соответствует требованиям заказа и достигнутых в ходе согласования договоренностей.
Загрузка заведомо ложного файла в качестве окончательного может быть расценено как попытка обмануть заказчика и привести к блокировке аккаунта.
Ограничения
На сайте установлены ограничения на размер загружаемого файла и на некоторые форматы:
— Размер файла не должен превышать 15 Мб. Это связано с нагрузкой на серверное оборудование.
— Файл не должен быть исполняемым (*.ехе). Это связано с жалобами пользователей на наличие вирусов в файлах формата ехе.
Если вам нужно отправить такие файлы, запакуйте их в архив или загрузите файл на сторонний файлообменник, а заказчику предоставьте ссылку на данный сайт.
Была ли статья полезна?
Да НетСпасибо за отзыв!
Посоветуйте, как нам улучшить статью
ОтправитьСпасибо за отзыв!
Файл не должен быть исполняемым ошибка вконтакте
файл не должен быть исполняемым ошибка вконтактепри попытке скачать файл открывается новая вкладка с ошибкой, загрузка файла не идет. у меня ошибка загрузки только с top-vbg.ru думаю, кто-то знает другой способ скачать документы с вк.
при попытке скачать файл открывается новая вкладка с ошибкой, загрузка файла не идет. у меня ошибка загрузки только с top-vbg.ru думаю, кто-то знает другой способ скачать документы с вк.
Файл не должен быть исполняемым.» Видимо это связано с передачей музыки или распространению вирусов через этот сервис. Сожмите ваши файлы в архив.7z и их можно будет спокойно передать вконтакте.
Обзоры других моделей для. при попытке скачать файл открывается новая вкладка с ошибкой, загрузка файла не идет. у меня ошибка загрузки только с top-vbg.ru думаю, кто-то знает другой способ скачать документы с вк.
при попытке скачать файл открывается новая вкладка с ошибкой, загрузка файла не идет. у меня ошибка загрузки только с top-vbg.ru думаю, кто-то знает другой способ скачать документы с вк.
при попытке скачать файл открывается новая вкладка с ошибкой, загрузка файла не идет. у меня ошибка загрузки только с top-vbg.ru думаю, кто-то знает другой способ скачать документы с вк. Файл не должен быть исполняемым.» Видимо это связано с передачей музыки или распространению вирусов через этот сервис. Сожмите ваши файлы в архив.7z и их можно будет спокойно передать вконтакте.
Обзоры других моделей для.
Похожее:
Могу ли я сделать Zip файлы меньше? — Вокруг-Дом
Zip — это распространенный формат сжатых данных, используемый для эффективного хранения данных и группировки нескольких файлов и папок в один файл. Иногда можно уменьшить размер zip-файла, переключившись с одной утилиты zip-файла на другую или изменив настройки внутри программы. Если вы не можете сжать zip-файл столько, сколько хотите, вы можете использовать другие форматы файлов, которые иногда могут привести к более эффективному сжатию.
Как работают Zip файлы
Zip-файлы позволяют вам взять один или несколько файлов и объединить их в один файл, сжатый для экономии места на диске и пропускной способности Интернета. Они создаются путем замены повторяющихся частей файла одной краткой записью. При правильно сделанном zip-файле никакие данные не теряются при сжатии и распаковке файла.
Вы можете создать или открыть ZIP-файл на компьютере Mac или Windows, используя встроенные инструменты операционной системы. Вы также можете использовать специализированное программное обеспечение, которое поддерживает работу с ZIP-файлами и другими форматами сжатых файлов. Некоторые программы поддерживают разные стили zip-файлов, чем другие. Некоторые новые типы zip-файлов более эффективны и могут уменьшить размер zip-файла по сравнению с тем, что было возможно в более раннем программном обеспечении.
Уменьшить размер файла Zip
Обычно существует предел того, насколько маленький конкретный метод сжатия может сделать ZIP-файл. Обычно вы не можете уменьшить размер файла, архивируя файл более одного раза, и некоторые файлы плохо сжимаются, потому что они уже сжаты. К ним относятся многие популярные изображения и музыкальные файлы, такие как файлы JPEG и MP3.
Современные файлы Microsoft Office уже заархивированы, поэтому они не сжимаются особенно хорошо в формате файла zip, но все же может быть полезно сжать их, чтобы объединить несколько файлов для отправки по электронной почте или для хранения.
Некоторые программы позволяют разбивать zip-файл на несколько файлов, что может быть полезно, если у вас возникли проблемы с сохранением большого файла на диске или отправкой его через Интернет.
Альтернативные форматы
Хотя формат zip является одним из самых популярных форматов сжатия, он не единственный доступный. Отношение размера сжатого файла zip к исходному размеру называется коэффициентом сжатия zip. Другие сжатые форматы, такие как RAR, BZIP и 7-Zip, иногда могут обеспечить лучшие коэффициенты сжатия с некоторыми данными. Может быть стоит попробовать несколько форматов и инструментов для ваших данных, чтобы увидеть, какие из них сжимают лучше.
Если вы отправляете данные кому-то, убедитесь, что у них есть доступ к инструменту, который может открыть файл. Бесплатные инструменты с открытым исходным кодом доступны онлайн для многих форматов во многих операционных системах.
Ошибка файл не может быть исполняемым
ошибка файл не может быть исполняемымФайл не должен быть исполняемым. Даниил Романов 1 Не все любят восточные танцы. Некоторые серверы не имеют ассоциированного типа MIME для поддержки файлов MP4.
Как таковые, они не воспроизводят файлы MP4. Чтобы исправить это, вам нужно настроить тип MP4 MIME в IIS. Файл не должен быть исполняемым. 30 просмотров 30 тыс. просмотров. • 15 апр. г. Не важно, я же передаю не вирусы и не музыку, а готовые заказы (модели,карты,плагины,моды,скины и тд) Для обхода ошибки, вам понадобиться ZIP архиватор (проверено)!!! Сожмите ваши файлы в архив.7z и их. При запуске какой либо игры в клиенте Steam, возникает ошибка: При обновлении (название_игры) произошла ошибка (не найден исполнительный файл).
Довольно распространенная ошибка.
Некоторые серверы не имеют ассоциированного типа MIME для поддержки файлов MP4. Как таковые, они не воспроизводят файлы MP4. Чтобы исправить это, вам нужно настроить тип MP4 MIME в IIS.
При запуске какой либо игры в клиенте Steam, возникает ошибка: При обновлении (название_игры) произошла ошибка (не найден исполнительный файл). Довольно распространенная ошибка. Файл не должен быть исполняемым. 30 просмотров 30 тыс. просмотров. • 15 апр. г. Не важно, я же передаю не вирусы и не музыку, а готовые заказы (модели,карты,плагины,моды,скины и тд) Для обхода ошибки, вам понадобиться ZIP архиватор (проверено)!!! Сожмите ваши файлы в архив.7z и их.
Похожее:
— Как сделать файл исполняемым?
Есть два способа сделать файл исполняемым:
GUI Метод:
Перейдите на вкладку разрешений, затем установите флажок Выполнить: [✓]
Разрешить выполнение файла как программы.
Метод командной строки:
Только запуск:
chmod + x /path/to/your/file.txt
Обратите внимание, что chmod
также имеет несколько дополнительных параметров.Он принимает три группы опций, представленные как --- --- ---
. Первый набор ---
— это Пользователь. Второй — Группа, а последний — Другой (все остальные).
r
означает чтение, w
— запись и x
— eXecute.
Чтобы все могли его читать, но только Группа для выполнения и Пользователь для чтения и записи, это будет -rw- rx- r--
. Это будет добавлено к команде как:
chmod + rw-rx-r-- / путь / к / файлу.расширение
chmod
также может делать это в цифрах. Он основан на двоичном формате.
Итак, вот эти числа:
Выполнить пользователем — 100
.
Выполнить по группе — 010
. Исполнить другим —
001
Запись пользователем — 200
.
Запись по группе — 020
.
Написать другим — 002
.
Прочитано пользователем — 400
.
Чтение по группе — 040
.
Прочитано другим — 004
.
Затем вы складываете их вместе, чтобы получить желаемую комбинацию.
Таким образом, чтобы все могли его читать, но только Группа для выполнения и Пользователь для записи, это будет 400 + 040 + 004
и 010
и 200
В сумме получается 600 + 050 + 004 = 654
.
Затем вы можете запустить команду.
chmod +654 /path/to/file.extension
, чтобы установить его. Итак, чтобы установить все разрешения, вы можете запустить:
chmod + rwxrwxrwx / путь / к / файлу.расширение
или
chmod +777 /path/to/file.extension
Наконец, вы можете:
chmod -777 /path/to/file.
extension
Отобрать у всех все разрешения.
А:
chmod +300 /path/to/file.extension
Чтобы добавить чтение и запись для пользователя, не затрагивая другие разрешения (например, разрешения на выполнение).
На этом веб-сайте есть очень полезный небольшой инструмент, с помощью которого вы можете отмечать нужные параметры, и он дает вам команду:
Однако не все возможные комбинации разумны для использования; основные из них:
755 —
Владелец
имеет все, аГруппа
иДругой
может читать и выполнять700 —
Владелец
имеет все644 —
Владелец
может читать и писать, аГруппа
иДругой
может читать600 —
Владелец
может читать и писать
И, если вы используете нетривиальные группы пользователей:
775 —
Владелец
может читать и писать, аГруппа
иДругой
может читать770 —
Владелец
иГруппа
имеет все, аДругой
может читать и выполнять750 —
У владельца
есть все, аГруппа
может читать и выполнять664 —
Владелец
иГруппа
может читать и писать, аДругой
может просто читать660 —
Владелец
иГруппа
может читать и писать640 —
Владелец
может читать и писать, аГруппа
может читать
777 и 666 используются редко, за исключением / tmp
.
Спасибо Илмари Каронену за то, что он указал на наиболее распространенные!
Командная строка— Как сделать файл (например, сценарий .sh) исполняемым, чтобы его можно было запускать с терминала
Есть два способа сделать файл исполняемым:
GUI Метод:
Щелкните файл правой кнопкой мыши и выберите «Свойства».
Перейдите на вкладку разрешений, затем установите флажок Execute: [] Разрешить выполнение файла как программу
или в Nautilus Program: [] Разрешить этому файлу запускаться как программу
в Thunar.
Терминал / метод команды:
Вы можете использовать:
cd / to / my / required / directory
Затем запустите
chmod + x имя_файла.расширение
Или просто запустите:
chmod + x /path/to/your/filename.extension
chmod
также имеет несколько дополнительных параметров:
Пробелы показывают, что он разделен: - rwx --- ---
Первый набор ---
— это Пользователь. Второй — Группа, а последний — Другой (кто угодно)
r означает чтение, w для записи и x для eXecute.
Таким образом, чтобы разрешить всем читать его, но только Группа для выполнения и Пользователь для чтения и записи (но по какой-то причине не выполняются), будет:
-rw- rx- r--
Но это будет добавлено к команде как:
chmod + rw-rx-r - /path/to/file.extension
chmod
также может делать это в цифрах. Он основан на двоичном (я думаю, что он 1,2 и 4)
Итак, вот эти числа:
Выполнить пользователем — 100
.Выполнить по группе — 010
.
Исполнить другим — 001
.
Запись пользователем — 200
.
Запись по группе — 020
.
Написать другим — 002
.
Прочитано пользователем — 400
.
Чтение по группе — 040
.
Прочитано другим — 004
.
Затем вы складываете их вместе, чтобы получить желаемую комбинацию.
Итак, чтобы все могли его читать, но только Группа выполняла, а Пользователь записывал его (но по какой-то причине не выполнял), будет:
400 + 040 + 004
и 010
и 200
В сумме получается 600 + 050 + 004 = 654.
Затем вы можете запустить команду.
chmod +654 /path/to/file.extension
для его установки.
И чтобы установить все разрешения, вы можете ввести:
chmod + rwxrwxrwx /path/to/file.extension
Или (это немного проще написать, но сложнее запомнить каждую):
chmod +777 /path/to/file.extension
Наконец, вы можете:
chmod -777 /path/to/file.extension
Отобрать у всех все разрешения.
А:
chmod +300 /path/to/file.extension
Чтобы добавить чтение и запись для пользователя, не затрагивая другие разрешения (например, разрешения на выполнение).
На этом веб-сайте есть очень полезный маленький флажок в виде сетки, с помощью которого вы можете отмечать нужные параметры, и он дает вам команду:
Однако не все возможные комбинации разумны для использования; основные из них:
755 — Владелец
имеет все, а Группа
и Другой
может читать и выполнять
700 — Владелец
имеет все
644 — Владелец
может читать и писать, а Группа
и Другой
может читать
600 — Владелец
может читать и писать
И, если вы используете нетривиальные группы пользователей:
775 — Владелец
может читать и писать, а Группа
и Другой
может читать
770 — Владелец
и Группа
имеет все, а Другой
может читать и выполнять
750 — У владельца
есть все, а Группа
может читать и выполнять
664 — Владелец
и Группа
может читать и писать, а Другой
может просто читать
660 — Владелец
и Группа
может читать и писать
640 — Владелец
может читать и писать, а Группа
может читать
777 и 666 используются редко, кроме / tmp.
Спасибо Илмари Каронену за то, что он указал на наиболее распространенные!
Сценарий оболочки— Почему источник (или команда точки) не требует, чтобы файл был исполняемым
Допустим, у меня есть сценарий оболочки ( my-script.sh
), начинающийся с:
#! / Bin / sh
Если для сценария установлены разрешения на выполнение, я могу запустить сценарий с:
./my-script.sh
В этом случае вы в конечном итоге просите ядро запустить my-script.sh
в качестве программы, а ядро (загрузчик программ) сначала проверяет разрешения, , а затем используют / bin / sh ./my-script.sh
для фактического выполнения вашего скрипта.
Но оболочка ( / bin / sh
) не заботится о разрешениях на выполнение и не проверяет их. Итак, если вы назовете это …
/ bin / sh ./my-script.sh
… Ядру никогда не предлагается запустить my-script.
как программу. Ядро (загрузчик программ) запрашивается только для запуска sh
/ bin / sh
.Таким образом, разрешения на выполнение никогда не будут проверяться. То есть вам не нужно разрешение на выполнение для запуска подобного сценария.
Чтобы ответить на ваш вопрос:
Разница между вызовами ./my-script.sh
и . ./my-script.sh
внутри другого скрипта точно так же. В первом случае вы просите ядро запустить его как программу, во втором вы запрашиваете текущую оболочку для чтения команд из сценария, и оболочке не нужны (или не нужны) разрешения на выполнение для этого.
Дополнительная литература:
Запуск скриптов как программ — удивительное поведение, если подумать. Они не написаны в машинном коде. Я бы прочитал, почему это работает; начните с чтения на шебанге ( #!
) https://en.wikipedia.org/wiki/Shebang_(Unix)
Для совместного использования переменных необходим запуск сценариев с точечной нотацией. Все остальные механизмы запуска запускают новый «контекст» оболочки, что означает, что любые переменные, установленные в вызываемом сценарии, не будут переданы обратно вызывающему сценарию.Документация Bash немного упрощена, но она здесь: https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html
Разрешения Unix / Linux — Введение и учебное пособие
Последнее изменение: 27 ноя, пт, 09:44:55 2020
Также см. Мою страницу Unix для получения дополнительных руководств по Unix
Содержание
Copyright 1995 Брюс Барнетт и компания General Electric.
Авторское право 2001, 2013 Брюс Барнетт
Все права защищены.
Вы можете распечатать копии этого руководства для личного пользования. использовать и ссылаться на эту страницу, но вам не разрешается делать электронные копирует или распространяет это руководство в любой форме без разрешения.
Оригинальная версия, написанная в 1995 году и опубликованная в Sun Observer.
Как ограничить доступ к вашим файлам. Как сделать файлы доступными только для чтения, исполняемый файл и так далее. Как запретить другим пользователям удалять файлы в ваши каталоги. Как запретить другим даже смотреть на вас каталоги. «Специальные» режимы доступа к исполняемым файлам.
В этом руководстве я подробно расскажу о правах доступа к файлам и расскажу о некоторых из более тонких аспектов.К сожалению, я рассказал об основах, поэтому Я постараюсь быть кратким. Я использую псевдонимы ниже. Это псевдонимы tcsh, а не псевдонимы bash.
Есть три основных атрибута для прав доступа к обычным файлам: чтение, запись и выполнение.
Если у вас есть разрешение на чтение файла, вы можете увидеть его содержимое. Это означает, что вы можете использовать more (1), cat (1) и т. Д.
Если у вас есть разрешение на запись в файл, вы можете изменить файл.
Это означает, что вы можете добавить в файл или перезаписать файл. Вы можете очистить файл с именем «yourfile», скопировав поверх него пустой (/ dev / null) файл.
cat / dev / null ваш файл
Если файл был исполнен разрешение, то вы можете попросить операционную систему запустить файл как если бы это была программа.Если это двоичный файл / программа, вы можете выполнить как и любая другая программа. Другими словами, если есть файл с именем «xyz», и он находится в вашем пути поиска, и файл является исполняемым, все, что вам нужно сделать для запуска программы, это ввести
xyz
Если файл является сценарием оболочки, то атрибут выполнения говорит, что вы может относиться к нему как к программе. Другими словами, вы можете создайте файл с помощью вашего любимого редактора, добавьте атрибут выполнения в это, и это «становится» программой.Однако, поскольку оболочка должна читать файл, сценарий оболочки должен быть читаемым и исполняемым. Скомпилированная программа не обязательно должна быть удобочитаемой.
r означает читать w означает запись и x означает e X ecute.
Просто, а?
Команда chmod (1) используется для изменения разрешения. Самый простой способ использования команды chmod — добавить или отнять права доступа к файлу. Простой плюс или минус используется для добавления или суммирования разрешения.
Возможно, вы захотите защитить себя от изменения важного файла. Удалите разрешение на запись файла «myfile» с помощью команды
chmod -w myfile
Если вы хотите сделать файл «myscript» исполняемым, введите
chmod + x myscript
Вы можете добавлять или удалять более одного из этих атрибутов одновременно
chmod -rwx файл chmod + wx файл
Вы также можете использовать «=», чтобы установить разрешение на точную комбинацию Эта команда удаляет разрешение на запись и выполнение, добавляя при этом разрешение на чтение:
chmod = r myfile
Обратите внимание, что вы можете изменить разрешения для файлов, которыми вы владеете.Это ты
может удалить все разрешения файла, а затем снова добавить их. Вы можете сделать файл «только для чтения», чтобы защитить его. Однако создание файла
только чтение не мешает вам удалить файл. Это потому что
файл находится в каталоге, и в каталогах также есть чтение, запись и
выполнить разрешение. И правила другие. Читать дальше.
используют те же разрешения, но имеют разные имея в виду. Да, очень разные значения. Это классический Unix: кратко, гибкий и очень тонкий.Хорошо — давайте рассмотрим основной каталог разрешения.
Если у каталога есть разрешение на чтение, вы можете увидеть, какие файлы находятся в каталог. То есть вы можете выполнить команду «ls» и просмотреть файлы внутри каталога. Однако разрешение на чтение каталога делает , а не , означает, что вы можете прочитать содержимое файлов в каталог.
Разрешение на запись означает, что вы можете добавить в каталог новый файл. Это также означает, что вы можете переименовать или переместить файлов в каталоге.
Execute позволяет использовать имя каталога при доступе к файлам внутри этого
каталог. Разрешение «x» означает, что каталог «доступен для поиска».
при поиске исполняемых файлов. Если это программа, вы можете выполнить
программа.
Это имеет смысл, если вы понимаете, что каталоги являются файлами как хорошо. Файл не хранится «внутри» каталога. Файлы хранятся в блоках данных, разбросанных по разделу диска. Каталог это специальный файл, содержащий информацию о доступе ко всем файлы ссылаются «внутри» каталога.
Предположим, у вас есть доступ на чтение к каталогу, но у вас нет доступ для чтения к файлам в каталоге. Вы все еще можете прочитать каталог или, точнее, информацию о статусе этого файла, как возвращается системным вызовом stat (). То есть вы можете увидеть имя файла, разрешения, размер, время доступа, владелец и группа, а также количество ссылок, потому что у вас есть доступ к каталогу. Файл сам хранится где-нибудь на диске (это место обозначено Номер i-узла.) Команда «ls -i» показывает номер i-узла для файл.
Запись
разрешение в каталоге позволяет вам изменять содержимое
каталог. Поскольку имя файла хранится в каталоге,
а не в файл, разрешение на запись в каталог позволяет переименовать
или удаление файлов и не требует разрешения на запись в файл.
Чтобы быть конкретным, если кто-то написал
разрешение на ваш домашний каталог, они могут переименовать или удалить ваш .login и поместите на его место новый файл.Разрешения
вашего файла .login не имеет значения. Кто-то может переименовать файл
даже если они не могут прочитать содержимое файла.
Разрешение на выполнение для каталога иногда называется поиском разрешение. Если вы нашли каталог, который дал вам выполнить разрешение, но не разрешение на чтение, вы можете использовать любой файл в этом каталог. Однако вы должны знать имя . Ты не можешь смотреть внутри каталога, чтобы узнать имена файлов. Думать о этот тип каталога как черный ящик.Вы можете бросить имена файлов в этот каталог, и иногда вы находите файл, иногда нет.
до сих пор я рассматривал разрешения как ваше разрешение или как не ваше разрешение. Разрешения на чтение, запись и выполнение хранятся в трех разных местах, называемых пользователем (u), группой (g), миром или другим (o).
Когда вы выполняете
chmod = r myfile
он меняет разрешения в трех местах. Когда вы перечисляете этот файл с помощью «ls -l», вы увидите
-r - r - r-- 1 grymoire admin 0 1 фев 19:30 myfile
Обратите внимание, что есть три символа «r» для трех разных типов разрешений.
У всех файлов есть связанный с ними владелец и группа.
Существует три набора разрешений на чтение / запись / выполнение: один набор для
пользователь файла, один набор для группы файла и
один комплект для всех остальных (другой).
Эти разрешения определяются 9 битами.
в i-узле информация и представлена
символы «rwxrwxrwx.» Первые три символа указывают пользователя,
средние три — группа, а последние три — мир. Если
разрешение неверно, дефис используется для обозначения отсутствия привилегий.Если бы вы хотели иметь файл данных, который можно было бы читать или писать, но
не хочу, чтобы кто-то другой видел, разрешение будет «rw ——-. »
Каждый человек принадлежит хотя бы к одной группе в системе Unix. Некоторый люди принадлежат более чем к одной группе. Если компьютер используется только один человек, то группы бесполезны, кроме установленного идентификатора группы программы, но это будет позже.
Предположим, у вас есть несколько человек, использующих компьютер, и вы хотите чтобы позволить людям в группе иметь доступ к каталогу.Давайте также говорят, что они принадлежат к той же группе, что и вы. Предположим, файл находится в каталог группы с группой «admin», и вы хотели разрешить им для чтения, и вы можете создать каталог, в котором есть чтение, запись и выполнить разрешение для группы. Но вы хотите предотвратить людей вне группы от чтения или изменения файла. Вы хотите файл, чтобы иметь разрешение «rw-rw —-» для пользователя и группы = чтение и пишите, а у других нет. Это может сделать команда chmod. Вы должны помнить, что команда
chmod = rw myfile
создаст разрешение «rw-rw-rw-«, что означает пользователя, группу и
другие читали и писали. Так как же поменять его на «rw-rw —-»?
У команды chmod, конечно же, есть параметры. используя «=», «-» или «=» изменяет права пользователя (u), группы (g) и другие (o). Вы можете явно укажите u, g или o в команде chmod:
chmod u = rw myfile chmod g = rw myfile chmod ug = rw myfile
Это удобно, но три приведенные выше команды не изменяют «другое» разрешение. Они изменяют только то, что указано. Чтобы удалить разрешения на чтение и запись для других, вы можете вместо этого ввести
chmod o = myfile chmod o-rw myfile
Первый устанавливает разрешение на ничего, а второй удаляет разрешение на чтение и запись.
Если вы хотите изменить разрешение группы, используйте «g» вместо «o»:
chmod g + r myfile chmod g-w myfile
Эти команды добавят разрешение на чтение и удаление записи. Вы можете комбинировать эти две команды
chmod g + r-w myfile
, если вы хотите объединить операцию в группе и другие, вы можете поставить запятую между разрешениями:
chmod g + r-w, o = rwx myfile
Кроме «u», «g» или «o», вы можете использовать «a» для обозначения всех трех. Следующие команды делают то же самое
chmod a = rw myfile chmod = rw myfile
Более простой способ указать эти 9 бит — использовать 3 восьмеричные цифры. вместо 9 символов. Восьмеричный представитель битов чтения, записи и выполнения, «rwx» — это
Читать 4 Напишите 2 Выполнить 1
Восьмеричное представление — это чисто компьютерная болтовня, и это была единственная форма, которая работала в ранних версиях Unix. Порядок такой же, как у «rwx», поэтому разрешение на чтение / запись или «rw-» можно описать восьмеричным числом 6 .Однако мы должны выразить разрешение всех трех частей, поэтому разрешение «rw ——-» (чтение / запись для пользователя, а группа и мир ничего не получают) составляет b00 . В Первое число указывает разрешение владельца файла. Второй номер указывает разрешения группы. Последнее число указывает разрешения всем, кто не является владельцем или не входит в группу файл.
Давайте рассмотрим различные комбинации. Я покажу буквенное, восьмеричное и значение.
+ ----- + --- + -------------------------- + | rwx | 7 | Читать, писать и выполнять | | rw- | 6 | Читать, писать | | r-x | 5 | Прочтите и выполните | | г-- | 4 | Читать, | | -wx | 3 | Напишите и выполните | | -w- | 2 | Написать | | --x | 1 | Выполнить | | --- | 0 | нет разрешений | + ------------------------------------ +
Вы можете использовать восьмеричную систему счисления, где три цифры соответствуют пользователю, затем группе, затем другим.
Возможно, это поможет
+ ------------ + ------ + ------- + | Разрешение | Восьмеричный | Поле | + ------------ + ------ + ------- + | rwx ------ | 700 | Пользователь | | --- rwx --- | 070 | Группа | | ------ rwx | 007 | Другое | + ------------ + ------ + ------- +
давайте сложим все это вместе. Я перечислю некоторые команды chmod в и символьное, и восьмеричное представление.
+ ------------------------ + ----------- + | chmod u = rwx, g = rwx, o = rx | chmod 775 | Для мировых исполняемых файлов | chmod u = rwx, g = rx, o = | chmod 750 | Только для исполняемых файлов по группе | chmod u = rw, g = r, o = r | chmod 644 | Для файлов, доступных для чтения во всем мире | chmod u = rw, g = r, o = | chmod 640 | Для групповых читаемых файлов | chmod u = rw, go = | chmod 600 | Для частных читаемых файлов | chmod u = rwx, go = | chmod 700 | Для частных исполняемых файлов + ------------------------ + ----------- +
Давайте также рассмотрим те же разрешения для каталогов.
+ ------------------------ + ----------- + | chmod u = rwx, g = rwx, o = rx | chmod 775 | Для всемирно читаемых каталогов | | | Члены группы могут менять файлы | chmod u = rwx, g = rx, o = | chmod 750 | Для групповых читаемых каталогов | | | Члены группы могут менять файлы | chmod u = rwx, go = | chmod 700 | Для частных директорий + ------------------------ + ----------- +
Последний пункт неуловим.При тестировании разрешений система просматривает группы по порядку. Когда Unix проверяет разрешения, порядок следующий.
- Если файл принадлежит пользователю, права пользователя определяют доступ.
- Если группа файла совпадает с группой пользователя, разрешение группы определяет доступ.
- Если пользователь не является владельцем файла и не входит в группу, то используется другое разрешение.
Если вам отказано в разрешении,
Unix не исследует следующую группу.Рассмотрим случай файла, который
принадлежит пользователю jo , входит в группу гостей и имеет
разрешения —— xrwx или 017 в восьмеричном формате. Он будет указан как
------ xrwx 1 jo гости 0 1 фев 20:47 myfile
Предположим, что каталог имеет разрешение 775 (доступ для чтения и поиска во всем мире). При рассмотрении этого файла точные разрешения выше означают:
- jo не может использовать файл.
- Любой в группе гостей может выполнить программу.
- Все остальные, кроме jo и членов группы гостей , могут читать, писать и выполнять программа.
Это не очень распространенный набор разрешений. Но есть способы его использования. Однако, чтобы действительно понять это, мы должны учитывать разрешение каталога. Помните, как я уже сказал, если у пользователя jo из гостевой группы есть разрешение на запись в каталог, он может переименовать или удалить файл.
Допустим, каталог / testme принадлежит суперпользователю и имеет
разрешение 711. Что это значит? Прежде всего, обратите внимание, что
В каталоге нет группы и мира для чтения или записи — просто выполните поиск.
Это означает, что пользователи не могут видеть, какие файлы находятся в этом каталог. Это также означает, что они должны знать имя файла, чтобы выполнить это.
Любой пользователь может ввести
/ testme / myfile
, и поскольку каталог доступен для поиска во всем мире, программа может быть выполнен.
А теперь вернемся к Джо и гостям (Хм. Звучит как поп-рок-группа 60-х). Если файл «/ testme / myfile» имеет разрешение 017, то Джо не может выполнить программу. Все в группе Гости могут, но только если файл представляет собой скомпилированную программу (а не сценарий оболочки). И остальной мир может выполнить программа. Однако они должны знать имя файла. Они не могут перечислить содержимое каталога.
люди используют аналогичный механизм, чтобы запретить одной группе пользователей
доступ к файлу или его использование.В приведенном выше случае jo не может прочитать
или напишите файл, который ей принадлежит. Она могла использовать команду chmod , чтобы
разрешить себе читать файл. Однако если файл был
в каталоге, принадлежащем кому-то другому (root), и каталог не дал
Джо разрешение на чтение или поиск, она не сможет найти файл
изменить его разрешение.
Давайте немного изменим ситуацию. Сделаем каталог в режиме 510. Давайте также сделаем файл «myfile» и каталог «/ testme» собственностью Джо.Предположим также, что программа «myfile» — это скомпилированная программа с разрешением 711.
Запустить программу может любой желающий в группе «гости». Однако, если администратор удалил кого-то из группы, он больше не сможет выполнять программу. Им необходимо выйти и снова войти в систему, а разрешение группы предоставляется во время входа в систему.
В большинстве случаев разрешения попадают в три случая:
- Информация носит персональный характер. Многие люди
каталог или два они хранят информацию, которой не хотят быть
общественные.Почта, вероятно, должна быть конфиденциальной, и весь ваш почтовый ящик
файлы должны находиться в каталоге с разрешением 700, запрещая
всем, кроме вас и системного администратора, доступ для чтения к вашему
буквы.
- Информация не является личной, но никому не следует возможность изменять информацию. Большинство моих каталогов настроены так Кстати, с разрешения 755.
- Файлы управляются командой людей. Это означает разрешение на запись группы или каталоги с режим 775.
Вы можете просто создать каталог с правильным разрешение, и поместите файлы в каталог, надеясь, что разрешения каталога будут «защищать» файлы в каталог.
Этого не достаточно. Предположим, у вас есть каталог с разрешение 755 и файл с разрешением 666 внутри каталога. Кто угодно может изменить содержимое этого файла, потому что в мире есть доступ для поиска в каталоге и доступ для записи в файл.
Что необходимо, так это механизм предотвращения любых новых
файл из мира записи.Этот механизм существует с umask команда. Если вы считаете, что новый каталог получит
разрешения 777, а новые файлы получают разрешения 666, umask Команда указывает разрешения для забрать у
все новые файлы. Чтобы «вычесть» разрешение на запись для мира из файла, 666
должно быть 002 «вычтено» из значения по умолчанию, чтобы получить 664. Чтобы
вычесть группу и запись мира, 666 должно быть удалено 022, чтобы оставить 644
как разрешение файла. Эти два значения umask как таковые
обычно полезно иметь определенные псевдонимы tcsh:
псевдоним open umask 002 псевдоним shut umask 022
С этими двумя значениями umask , новые каталоги будут иметь разрешения 775 или 755.У большинства людей есть umask значение одного из этих двух значений.
В дружной рабочей группе люди склонны использовать umask из 002, что позволяет другим участникам вашей группы вносить изменения в ваши файлы.
Тот, кто использует маску 022, причинит горе другим, работающим над проектом.
Попытка скомпилировать программу расстраивает, когда кто-то владеет файлами, которые вы
должен удалить, но не могу. Вы можете переименовать файлы, если это так,
или обратитесь за помощью к системному администратору.
Члены команды, которые обычно используют umask по умолчанию 022, должны найти означает изменение значения маски при работе над проектом.(Или иначе рискуете воспламенить своих коллег по работе!) Кроме откройте псевдоним выше, у некоторых людей есть псевдоним, который меняет каталоги и устанавливает маску для разрешения записи группы:
псевдоним proj "cd / usr / projects / proj; umask 002"
Это не идеально, потому что люди забывают использовать псевдонимы. У вас может быть частный файл оболочки в каждом каталоге проекта с именем .dir , содержащий строку
umask 002
Если у вас был следующий псевдоним
псевдоним cd 'chdir! *; если (-f.dir && -o .dir) source .dir '
При переходе на каталог проекта. У других людей могут быть похожие файлы в каталоге проекта. с другим именем. Еще один способ — запустить находит три раза в день и выполняет поиск принадлежащих вам файлов в каталоге проекта, которые иметь неправильное разрешение:
найти / usr / projects -user $ USER! -перми -020 -принт | \ xargs chmod g + w
Вы можете использовать команду crontab -e , чтобы определить, когда запускать эту команду.
Поскольку групповое разрешение на запись так важно в командном проекте, вам может быть интересно, как определяется группа нового файла? Ответ зависит от нескольких факторов. Прежде чем я расскажу об этом, вы должны отметить, что системы на базе Беркли и AT&T будет использовать разные механизмы для определения группы по умолчанию. Эти два варианта были объединены Sun, и Linux унаследовал подход Sun.
Первоначально Unix требовал указать новую группу с newgrp команда.Если был пароль для этой группы в / etc / group файл, и вы не были указаны как один из участников группы, вам нужно было ввести пароль, чтобы сменить группу.
Версии Unix на базе Беркли будут использовать текущий каталог для определения группа нового файла. То есть, если в текущем каталоге есть cad как группа справочника, любой файл, созданный в этом каталоге, будет в той же группе. Чтобы изменить группу по умолчанию, просто перейдите в другой каталог.
У обоих механизмов были свои плюсы и минусы. Беркли
основанный на нем механизм позволил удобно менять группы автоматически.
Однако существует фиксированный предел групп, к которым можно принадлежать, — 8 групп. SunOS 4 изменила это ограничение на 16 групп.
Sun поддерживает оба механизма обратной совместимости. Весь диск можно смонтировать либо механизм AT&T или Беркли. Если это необходимо контролировать для каждой директории используется специальный бит в правах доступа к файлу.Если раздел диска смонтирован без механизма группы Беркли, тогда в каталоге с этим специальным битом новые файлы будут иметь ту же группу как каталог, без специального бита группа всех новых файлов зависит от текущая группа пользователя.
Помимо девяти битов, определяющих чтение, запись и выполнение
(или поиск) разрешения для владельца, группы и мира,
есть еще три бита с особыми характеристиками.
Самая известная часть — это установить uid или установить идентификатор пользователя бит.У любого человека, выполняющего программу с этим набором битов, изменена идентификация пользователя. быть таким же, как владелец файла.
Благодаря этой простой возможности Unix позволяет пользователям получать особые привилегии.
контролируемым, временным образом.
Еще одна похожая насадка — комплект гид или устанавливает идентификатор группы бит, который меняет группу вместо пользователя. Это бит разрешения, который можно применить к каталогу, чтобы заставить его следуйте семантике группы Беркли.
Последний бит называется липкий бит. Он используется для сокращения времени запуска при выполнении программы. Более ранние версии Unix сохраняли «липкая» программа в области подкачки диска. При повторном выполнении липкой программы Системе не нужно искать файл в файловой системе. Однако на бездисковых рабочих станциях и ядрах, которые кэшируют последние файлы в памяти это не так много преимуществ, как раньше. Фактически, SunOS использовала его для обозначения специальных файлов, используемых бездисковыми клиентами.
Когда каталог становится липким, добавляется специальная функция безопасности. Это не позволяет кому-либо удалять или переименовывать файлы в каталоге, если они не владеют
файл. Это называется режимом «только добавление» для каталога. В
Каталог / tmp — хороший пример, когда это необходимо. Каталог
должен быть доступен для записи, чтобы быть полезным для других.
Добавляя липкий бит в этот каталог, вы не позволяете кому-либо
замена файла, принадлежащего моему другому пользователю.
Восьмеричное значение set uid bit is 4000 .то установить gid bit is 2000 , а липкая насадка 1000 . Эти странные восьмеричные значения не отображаются, когда вы их перечисляете. Вместо этого используется символьное представление. При использовании команды chmod
chmod u + s myfile
добавляет бит setuid. Установленный бит iD группы может быть установлен с помощью
chmod g + s myfile
Составить программу установить uid с использованием восьмеричного представления, команда будет
программа chmod 4755
В качестве альтернативы вы можете использовать символическую форму:
chmod u + s, g = rx, o = rx программа
Сделать установите программу gid , используйте одно из следующего:
программа chmod 2755 программа chmod g + s
Если файл является каталогом, вы должен использовать символическую форму. Прикрепленные файлы и каталоги можно создавать с помощью одной из этих двух форм:
chmod 1755 файл chmod u + t файл
Помимо использования найти для поиска этих битов разрешений, ls отображает разрешения, когда -l флаг используется. Если программа набор uid , «x» в области пользователя отображается как «s» Прикрепленный файл или каталог обозначается последним «x» отображается как «т.» Если соответствующий бит выполнения не установлен, буква заглавные.Заглавная буква — это признак того, что была выбрана необычная комбинация.
Linux поддерживает параметр + X.
Например, этот режим:
chmod a + X *
дает всем пользователям разрешение на выполнение файлов (или каталогов поиска), если любой мог раньше.
Вот диаграмма разрешений, отображаемая ls и соответствующие восьмеричные значения:
+ ------------------ + | rwxrwxrwx 777 | все разрешения предоставлены | rwxr-xr-x 755 | Группа и мир читаемых / eecutable | rwx ------ 700 | Частный | rwsr-xr-x 4755 | установить UID | rwxr-sr-x 2755 | установить GID | rwxr-xr-t 1755 | Липкий кусочек | rwSw-xr-x 4655 | setUID, но не исполняемый пользователем | rwxr-Sr-x 2745 | getGID, но не исполняется участниками группы | rwxr-xr-T 1754 | Липкий бит, но не исполняемый файл мира + ------------------ +
Этот документ переведен с помощью troff2html v0.21 22 сентября 2001 г.
Управление разрешениями и правами собственности на файлы — IBM Developer
Обзор
В этом руководстве вы узнаете, как управлять доступом к файлам с помощью правильного использования разрешений и прав владения для файлов и каталогов. Учиться:
- Управление разрешениями на доступ как к обычным, так и к специальным файлам, а также к каталогам
- Обеспечение безопасности с помощью таких режимов доступа, как suid, sgid и липкий бит
- Изменить маску создания файла
- Предоставить доступ к файлам членам группы
Это руководство поможет вам подготовиться к Задаче 104.5 в теме 104 экзамена 101 Linux Server Professional (LPIC-1). Цель имеет вес 3.
Пользователи, группы и владение файлами
К настоящему времени вы знаете, что Linux — это многопользовательская система, и что каждый пользователь принадлежит одной основной группе и, возможно, дополнительным группам. Также можно войти в систему как один пользователь и стать другим пользователем с помощью команд su
или sudo-s
. Право собственности на файлы в Linux и права доступа тесно связаны с идентификаторами пользователей и группами.
Мы представили некоторые концепции владения файлами и группами, описанные в этом руководстве, в предыдущем руководстве «Изучение Linux 101: управление дисковыми квотами». Этот учебник поможет вам более полно понять эти концепции.
Предварительные требования
Чтобы получить максимальную отдачу от руководств этой серии, вы должны иметь базовые знания Linux и работающую систему Linux, на которой вы можете практиковать команды, описанные в этом руководстве. Если не указано иное, в примерах в этом руководстве используется CentOS 6 с 2.6.32-573 ядро. Иногда разные версии программы форматируют выходные данные по-разному, поэтому ваши результаты могут не всегда выглядеть точно так, как в списках и цифрах, показанных здесь.
Если не указано иное, в примерах в этом руководстве используется Fedora 13 с ядром 2.6.34. Ваши результаты в других системах могут отличаться.
Пользователь и группы
Для начала давайте рассмотрим основную информацию о пользователях и группах.
Кто я
Если вы не стали другим пользователем, вашим ID останется тот, который вы использовали для входа в систему.Если вы стали другим пользователем, ваше приглашение может включать ваш идентификатор пользователя, как это делается в большинстве примеров в этом руководстве. Если ваше приглашение не включает ваш идентификатор пользователя, вы можете использовать команду whoami
, чтобы проверить свой текущий действующий идентификатор. В листинге 1 показаны некоторые примеры, в которых строки приглашения (из переменной среды PS1) отличаются от других примеров в этом руководстве. Наличие вашего идентификатора в строке приглашения может быть полезной функцией.
Листинг 1. Определение эффективного идентификатора пользователя
[ian @ attic4 ‑ cent ~] $ whoami
Ян
[ian @ attic4 ‑ cent ~] $ ksh ‑l
$ whoami
Ян
$ su jenni
Пароль:
[jenni @ attic4 ‑ cent ian] $ whoami
Дженни
[jenni @ attic4 ‑ cent ian] $ echo "$ PS1"
[\ u @ \ h \ W] \ $
[jenni @ attic4 ‑ cent ian] $ su - mary
Пароль:
[Мэри @ attic4 ‑ cent ~] $ whoami
Мэри
Показать ещеПоказать еще значокВ каких группах я
Аналогичным образом вы можете узнать, в каких группах вы состоите, с помощью команды groups
.Вы можете узнать информацию как о пользователях, так и о группах, используя команду id
. Добавьте параметр идентификатора пользователя в группы
или с идентификатором
, чтобы просматривать информацию для этого идентификатора пользователя вместо текущего идентификатора пользователя. В листинге 2 показаны некоторые примеры. Обратите внимание, что без идентификатора пользователя команда id
также отобразит контекст SELinux, а также базовую информацию об идентификаторе.
Листинг 2. Определение принадлежности к группе
[ian @ attic4 ‑ cent ~] $ id
uid = 1000 (ian) gid = 1000 (ian) группы = 1000 (ian), 1002 (разработка), 8093 (редактор) context =
неограниченный_у: неограниченный_р: неограниченный_т: s0 ‑ s0: c0.c1023
[ian @ attic4 ‑ cent ~] $ id ian
uid = 1000 (ian) gid = 1000 (ian) группы = 1000 (ian), 1002 (разработка), 8093 (редактор)
[ian @ attic4 ‑ cent ~] $ groups
ian редактор разработки
[ian @ attic4 ‑ cent ~] $ id, Дженни
uid = 1004 (jenni) gid = 1004 (jenni) группы = 1004 (jenni), 1002 (разработка)
[ian @ attic4 ‑ cent ~] $ groups, Дженни
Дженни: Развитие Дженни
[ian @ attic4 ‑ cent ~] $ su jenni
Пароль:
[jenni @ attic4 ‑ cent ian] $ группы
Дженни Девелопмент
[jenni @ attic4 ‑ cent ian] $ groups ian
ian: ian редактор разработки
Показать ещеПоказать еще значокВладение файлом и разрешения
Подобно тому, как каждый пользователь имеет идентификатор и является членом одной основной группы, каждый файл в системе Linux имеет одного владельца и одну группу, связанную с ним.
Обычные файлы
Используйте команду ls-l
для отображения владельца и группы.
Листинг 3. Определение права собственности на файл
[ian @ attic4 ‑ cent ~] $ ls ‑l / bin / bash .bashrc helloworld.C
‑Rw ‑ r ‑ r‑. 1 ian ian 124 16 октября 2014 г.bashrc
‑Rwxr ‑ xr ‑ x. 1 root root 2 23 июля, 14:55 / bin / bash
‑Rw ‑ rw ‑ r‑. 1 ian development 116 8 августа 21:40 helloworld.C
Показать ещеПоказать еще значокВ этом конкретном примере пользователь ian’s.Файл .bashrc принадлежит ему и находится в группе ian, которая является его основной группой. Точно так же / bin / bash принадлежит пользователю root и находится в корне группы. Однако helloworld.C принадлежит пользователю ian, но его группа занимается разработкой. Имена пользователей и имена групп происходят из разных пространств имен, поэтому данное имя может быть как именем пользователя, так и именем группы. Фактически, многие дистрибутивы по умолчанию создают соответствующую группу для каждого нового пользователя.
Модель разрешений Linux имеет три типа разрешений для каждого объекта файловой системы.Разрешения: чтение (r), запись (w) и выполнение (x). Разрешение на запись включает возможность изменять или удалять объект. Кроме того, эти разрешения указываются отдельно для владельца файла, членов группы файла и всех остальных.
Возвращаясь к первому столбцу листинга 3, обратите внимание, что он содержит строку из одиннадцати символов. Одиннадцатый символ добавлен недавно. Мы обсудим это через минуту. Первый символ описывает тип объекта ( -
для обычного файла в этом примере), а следующие девять символов представляют три группы по три символа.Первая группа указывает права на чтение, запись и выполнение для владельца файла. –
указывает, что соответствующее разрешение не предоставлено. Таким образом, пользователь ian может читать и записывать файл .bashrc, но не может его выполнять; в то время как root может читать и писать, и выполняют файл / bin / bash. Вторая группа указывает разрешения на чтение, запись и выполнение для группы файла. Члены группы разработки могут читать или писать файл helloworld.C ian, в то время как все остальные могут только читать его.Точно так же члены корневой группы и все остальные могут читать или выполнять файл / bin / bash.
Справочники
Каталогииспользуют те же флаги разрешений, что и обычные файлы, но интерпретируются по-разному.
- Разрешение на чтение для каталога позволяет пользователю с этим разрешением просматривать содержимое каталога.
- Разрешение на запись означает, что пользователь с этим разрешением может создавать или удалять файлы в каталоге.
- Разрешение на выполнение позволяет пользователю войти в каталог и получить доступ к любым подкаталогам.
Без разрешения на выполнение для каталога объекты файловой системы внутри каталога недоступны. Без разрешения на чтение в каталоге объекты файловой системы внутри каталога не отображаются в списке каталогов, но к этим объектам можно получить доступ, если известен полный путь к объекту на диске. Листинг 4 представляет собой искусственный пример, иллюстрирующий эти моменты.
Листинг 4. Разрешения и каталоги
[ian @ attic4 ‑ cent ~] $ ls ‑l / дом
всего 32
drwx ‑‑‑‑‑‑.4. Крис Крис 4096 8 августа 18:11 Крис
drwx ‑ x ‑‑‑. 4 разработка разработка 4096 7 авг 16:00 разработка
drwxr ‑ x ‑‑‑. 26 greg development 4096 8 августа 22:01 greg
drwx ‑‑‑‑‑‑. 42 ian ian 4096 8 августа 21:40 ian
drwx ‑‑‑‑‑‑. 26 ian ‑ 500 ian ‑ 500 4096 8 августа 21:59 ian ‑ 500
drwx ‑‑‑‑‑‑. 26 Дженни Дженни 4096 8 августа 21:52 Дженни
drwx ‑‑‑‑‑‑. 26 мэри мэри 4096 8 августа 21:53 мэри
drwx ‑‑‑‑‑‑. 26 testuser testuser 4096 7 августа 22:07 testuser
[ian @ attic4 ‑ cent ~] $ ls ‑a ~ greg /.ба *
/home/greg/.bash_history /home/greg/.bash_profile
/home/greg/.bash_logout /home/greg/.bashrc
[ian @ attic4 ‑ cent ~] $ ls ‑a ~ jenni
ls: невозможно открыть каталог / home / jenni: в доступе отказано
[ian @ attic4 ‑ cent ~] $ ls ‑a ~ разработка
ls: невозможно открыть каталог / home / development: в доступе отказано
[ian @ attic4 ‑ cent ~] $ head ‑n 3 ~ разработка / .bashrc
# .bashrc
# Источник глобальных определений
Показать ещеПоказать еще значок Первый символ длинного списка описывает тип объекта ( d
для каталога).Домашний каталог пользователя greg имеет разрешение на чтение и выполнение для членов группы разработчиков, поэтому пользователи mary и ian могут просматривать каталог. Домашний каталог пользователя jenni не имеет прав на чтение и выполнение для группы jenni или других пользователей, поэтому пользователь ian не может получить к нему доступ. Домашняя страница разработки пользователя имеет разрешение на выполнение, но не на чтение, поэтому пользователь ian не может перечислить содержимое, но может получить доступ к объектам в каталоге, если он знает, что они существуют.
Другие объекты файловой системы
Вывод ls-l
может содержать объекты файловой системы, отличные от файлов и каталогов, как показано первым символом в листинге.Мы увидим больше из них позже в этом уроке, а пока отметим наиболее распространенные возможные типы объектов.
Таблица 1. Типы объектов файловой системы
— | Обычный файл |
d | Директория |
l | |
b | Блок специального устройства |
p | FIFO |
s | Разъем |
Одиннадцатый символ
Одиннадцатый символ в длинном списке из команды ls
— недавнее усовершенствование, поэтому в некоторых дистрибутивах могут отображаться только первые десять символов.В других случаях одиннадцатый символ — это пробел, поэтому вы можете его не заметить. Этот символ указывает, применяется ли к файлу альтернативный метод доступа. Когда символ, следующий за битами режима файла, является пробелом, альтернативного метода доступа нет. Когда это печатный символ, то есть такой способ. Метод может быть, например, списком контроля доступа. GNU ls
использует символ «.» (Точка) для обозначения файла только с контекстом безопасности SELinux. Файлы с любой другой комбинацией альтернативных методов доступа помечаются знаком «+» (плюс).
Изменение разрешений
Добавление разрешений
Предположим, вы создали сценарий оболочки «Hello world». Когда вы впервые создаете сценарий, он обычно не будет исполняемым. Используйте команду chmod
с опцией + x
, чтобы добавить разрешения на выполнение, как показано в листинге 5.
Листинг 5. Создание исполняемого сценария оболочки
[ian @ attic4 ‑ cent ~] $ echo 'echo "Привет, мир!"'> hello.sh
[ian @ attic4 ‑ cent ~] $ ls ‑l hello.sh
‑Rw ‑ rw ‑ r‑.1 ian ian 20 8 августа 22:18 hello.sh
[ian @ attic4 ‑ cent ~] $ ./hello.sh
bash: ./hello.sh: В доступе отказано
[ian @ attic4 ‑ cent ~] $ chmod + x hello.sh
[ian @ attic4 ‑ cent ~] $ ./hello.sh
Привет мир!
[ian @ attic4 ‑ cent ~] $ ls ‑l hello.sh
‑Rwxrwxr ‑ x. 1 ian ian 20 8 августа 22:18 hello.sh
Показать ещеПоказать еще значок Вы можете использовать + r
для установки разрешений на чтение и + w
для установки разрешений на запись аналогичным образом. Фактически, вы можете использовать любую комбинацию r
, w
и x
вместе.Например, использование chmod + rwx
установит все права на чтение, запись и выполнение для файла. Эта форма chmod
добавляет разрешения, которые еще не установлены.
Избирательность
Вы могли заметить в приведенном выше примере, что разрешение на выполнение было установлено для владельца, группы, и других. Чтобы быть более избирательным, вы можете префикс выражения режима с u
, чтобы установить разрешение для пользователей, g
, чтобы установить его для групп, и o
, чтобы установить его для других.Указание a
устанавливает разрешение для всех пользователей, что эквивалентно его пропуску. В листинге 6 показано, как добавить пользователю и группе права на запись и выполнение для другой копии сценария оболочки.
Листинг 6. Выборочное добавление разрешений
[ian @ attic4 ‑ cent ~] $ echo 'echo "Привет, мир!"'> hello2.sh
[ian @ attic4 ‑ cent ~] $ chmod ug + xw hello2.sh
[ian @ attic4 ‑ cent ~] $ ls ‑l hello2.sh
‑Rwxrwxr‑. 1 ian ian 20 9 августа 06:22 hello2.sh
[
Показать ещеПоказать еще значокУдаление разрешений
Иногда вам нужно удалить разрешения, а не добавлять их.Просто измените +
на -
, и вы удалите все указанные разрешения, которые установлены. В листинге 7 показано, как удалить все разрешения для других пользователей в двух сценариях оболочки.
Листинг 7. Удаление разрешений
[ian @ attic4 ‑ cent ~] $ ls ‑l hello.sh
‑Rwxrwxr‑. 1 ian ian 20 9 августа 06:22 hello2.sh
‑Rwxrwxr ‑ x. 1 ian ian 20 8 августа 22:18 hello.sh
[ian @ attic4 ‑ cent ~] $ chmod o ‑ xrw hello.sh
[ian @ attic4 ‑ cent ~] $ ls ‑l привет, * .sh
‑Rwxrwx ‑‑. 1 ian ian 20 9 августа 06:22 hello2.ш
‑Rwxrwx ‑‑. 1 ian ian 20 8 августа 22:18 hello.sh
Показать ещеПоказать еще значок Вы можете изменять права доступа более чем к одному файлу одновременно. Как и в случае с некоторыми другими командами, которые вы встретили в учебниках по теме 103, вы даже можете использовать параметр -R
(или --recursive
) для рекурсивной работы с каталогами и файлами.
Настройка разрешений
Теперь, когда вы можете добавлять или удалять разрешения, вы можете задаться вопросом, как установить только определенный набор разрешений.Сделайте это, используя =
вместо +
или -
. Чтобы установить разрешения для вышеуказанных сценариев, чтобы другие пользователи не имели прав доступа, вы можете использовать chmod o = hello *
вместо команды, которую мы использовали для удаления разрешений.
Если вы хотите установить разные разрешения для пользователя, группы или другого, вы можете разделить разные выражения запятыми, например, ug = rwx, o = rx
, или вы можете использовать числовые разрешения, которые мы опишем ниже.
Восьмеричные разрешения
До сих пор вы использовали символы (ugoa и rxw) для указания разрешений.В каждой группе есть три возможных разрешения. Вы также можете установить разрешения, используя восьмеричные числа вместо символов. В разрешениях, установленных таким образом, используется до четырех восьмеричных цифр. Мы будем смотреть на первую цифру, когда будем обсуждать атрибуты. Вторая цифра определяет права пользователя, третья цифра определяет права группы, а четвертая цифра определяет другие разрешения. Каждая из этих трех цифр создается путем добавления желаемых настроек разрешений: чтение (4), запись (2) и выполнение (1). В примере для привет.sh в листинге 5 сценарий был создан с разрешениями -rw-r – r–, соответствующими восьмеричному числу 644. Установка разрешения на выполнение для всех изменила режим на 755.
Использование числовых разрешений очень удобно, когда вы хотите установить все разрешения сразу, не давая одинаковые разрешения для каждой из групп. Используйте Таблицу 2 в качестве удобного справочника по восьмеричным разрешениям.
Таблица 2. Числовые разрешения
rwx | 7 | ||
rw- | 10 | ||
r-- | 4 | ||
-wx | 3 | ||
-w- | 9 2100 | 9100 | 1 |
— | 0 |
Режимы доступа
Когда вы входите в систему, новый процесс оболочки запускается с вашими идентификаторами пользователя и группы.Это разрешения, которые регулируют ваш доступ к любым файлам в системе. Обычно это означает, что вы не можете получить доступ к файлам, принадлежащим другим, и не можете записывать системные файлы. Фактически, пользователи полностью зависят от других программ, выполняющих операции от нашего имени. Поскольку программы, которые вы запускаете, наследуют ваш идентификатор пользователя , они не могут получить доступ к объектам файловой системы, к которым вам не был предоставлен доступ.
Важным примером является файл / etc / passwd, который не может быть изменен обычными пользователями напрямую, потому что разрешение на запись разрешено только для root.Однако обычные пользователи должны иметь возможность каким-то образом изменять / etc / passwd всякий раз, когда им нужно изменить свой пароль. Итак, если пользователь не может изменить этот файл, как это можно сделать?
suid и sgid
Модель разрешений Linux имеет два специальных режима доступа: suid (установить идентификатор пользователя) и sgid (установить идентификатор группы). Когда для исполняемой программы установлены режимы доступа suid, она будет работать так, как если бы она была запущена владельцем файла, а не пользователем, который действительно запустил ее. Точно так же с установленными режимами доступа sgid программа будет работать так, как если бы инициирующий пользователь принадлежал к группе файла, а не к его собственной группе.Можно установить один или оба режима доступа.
В листинге 8 показано, что исполняемый файл passwd
принадлежит пользователю root:
Листинг 8. Режим доступа suid в / usr / bin / passwd
[ian @ attic4 ‑ cent ~] $ ls ‑l / usr / bin / passwd
‑Rwsr ‑ xr ‑ x. 1 корень root 30768 22 февраля 2012 г. / usr / bin / passwd
Показать ещеПоказать еще значок Обратите внимание, что вместо x
в тройке разрешений пользователя стоит s
. Это указывает на то, что для этой конкретной программы установлены биты suid и исполняемый бит.Таким образом, когда запускается passwd
, он будет выполняться так, как если бы пользователь root запустил его с полным доступом суперпользователя, а не пользователя, который его запустил. Поскольку passwd
работает с доступом root
, он может изменять / etc / passwd.
Биты suid и sgid занимают то же место, что и биты x
для пользователя и группы в длинном списке каталогов. Если файл является исполняемым, биты suid или sgid, если они установлены, будут отображаться в нижнем регистре s
. В противном случае они отображаются в верхнем регистре S
.
Хотя suid и sgid удобны и даже необходимы во многих случаях, неправильное использование этих режимов доступа может привести к нарушению безопасности системы. У вас должно быть как можно меньше программ suid. Команда passwd
— одна из немногих, для которой должен соответствовать .
Настройка suid и sgid
Биты suid и sgid устанавливаются и сбрасываются символически с помощью буквы s
. Например, u + s
устанавливает режим доступа suid, а g-s
удаляет режим sgid.В восьмеричном формате suid имеет значение 4 в первой (старшей) цифре, а sgid имеет значение 2.
Справочники и sgid
Когда для каталога включен режим sgid, любые файлы или каталоги, созданные в нем, наследуют идентификатор группы каталога. Это особенно полезно для деревьев каталогов, которые используются группой людей, работающих над одним проектом.
В листинге 9 показано, как пользователь greg может создать каталог, который могут использовать все пользователи группы разработки, а также пример того, как пользователь jenni может создать файл в каталоге.Созданный файл jenni.txt позволяет членам группы записывать в файл, поэтому jenni использует chmod g -w
для отключения возможности групповой записи.
Листинг 9. Режим доступа и каталоги sgid
[greg @ attic4 ‑ cent ~] $ mkdir lpi101
[greg @ attic4 ‑ cent ~] $ chmod g + ws lpi101
[greg @ attic4 ‑ cent ~] $ ls ‑ld lpi101
drwxrwsr ‑ x. 2 greg development 4096 9 августа 06:43 lpi101
[greg @ attic4 ‑ cent ~] $ su - Дженни
Пароль:
[jenni @ attic4 ‑ cent ~] $ touch ~ greg / lpi101 / jenni.txt
[jenni @ attic4 ‑ cent ~] $ ls ‑l ~ greg / lpi101 / jenni.текст
‑Rw ‑ rw ‑ r‑. 1 разработка jenni 0 9 августа 06:44 /home/greg/lpi101/jenni.txt
[jenni @ attic4 ‑ cent ~] $ chmod g ‑ w ~ greg / lpi101 / jenni.txt
[jenni @ attic4 ‑ cent ~] $ ls ‑l ~ greg / lpi101 / jenni.txt
‑Rw ‑ r ‑ r‑. 1 разработка jenni 0 9 августа 06:44 /home/greg/lpi101/jenni.txt
Показать ещеПоказать еще значокТеперь любой член группы разработчиков может создавать файлы в каталоге lpi101 пользователя greg. Как показано в листинге 10, другие члены группы не могут обновить файл gretchen.txt. Однако у них есть разрешение на запись в каталог и, следовательно, они могут удалить файл.
Листинг 10. Режим доступа sgid и владение файлом
[jenni @ attic4 ‑ cent ~] $ su - mary
Пароль:
[mary @ attic4 ‑ cent ~] $ echo "что-то" >> ~ greg / lpi101 / jenni.txt
‑Bash: /home/greg/lpi101/jenni.txt: В доступе отказано
[Мэри @ attic4 ‑ cent ~] $ rm ~ greg / lpi101 / jenni.txt
rm: удалить обычный пустой файл с защитой от записи /home/greg/lpi101/jenni.txt '? y
[Мэри @ attic4 ‑ cent ~] `$ ls ‑l ~ greg / lpi101
всего 0
Показать ещеПоказать еще значокЛипкая насадка
Вы только что видели, как любой, у кого есть разрешение на запись в каталог, может удалять файлы в нем.Это может быть приемлемо для группового проекта, но нежелательно для глобального общего файлового пространства, такого как каталог / tmp. К счастью, выход есть.
Оставшийся бит режима доступа называется липким битом. Он представлен символически t
и численно как 1 в восьмеричном разряде старшего разряда. Он отображается в длинном списке каталогов вместо флага исполняемого файла для других пользователей (последний символ) с тем же значением для верхнего и нижнего регистра, что и для suid и sgid.Если установлен для каталога, он разрешает только пользователю-владельцу или суперпользователю (root) удалять или отменять связь с файлом. В листинге 11 показано, как пользователь greg может установить бит закрепления в своем каталоге lpi101, а также показывает, что этот бит установлен для / tmp.
Листинг 11. Прикрепленные каталоги
[greg @ attic4 ‑ cent ~] $ chmod + t lpi101
[greg @ attic4 ‑ cent ~] $ ls ‑ld lpi101 / tmp
drwxrwsr ‑ t. 2 greg development 4096 9 августа 06:51 lpi101
drwxrwxrwt. 42 root root 4096 9 августа 06:53 / tmp
Показать ещеПоказать еще значокИсторически следует отметить, что системы UNIX® использовали бит закрепления на файлах, чтобы хранить исполняемые файлы в пространстве подкачки и избегать перезагрузки.Современные ядра Linux игнорируют липкий бит, если он установлен для файлов.
Обзор режима доступа
Таблица 3 суммирует символьное и восьмеричное представление для трех обсуждаемых здесь режимов доступа.
Таблица 3. Режимы доступа
suid | s с u | 4000 |
sg1061 | 09 900 g1061 09 900 0 2000||
липкий | т | 1000 |
Объединив это с предыдущей информацией о разрешениях, вы можете увидеть, что полное восьмеричное представление, соответствующее разрешениям greg lpi101 и режимам доступа drwxrwsr-t, равно 3775.Хотя команда ls
не отображает восьмеричные разрешения, вы можете отобразить их с помощью команды find
, как показано в
Листинг 12. Разрешения на печать в символьном и восьмеричном формате
[greg @ attic4 ‑ cent ~] $ find. ‑Name lpi101 ‑printf "% M% m% f \ n"
drwxrwsr ‑ t 3775 lpi101
Показать ещеПоказать еще значокНеизменяемые файлы
Режимы доступа и разрешения обеспечивают обширный контроль над тем, кто и что может делать с файлами и каталогами.Однако они не предотвращают такие вещи, как случайное удаление файлов пользователем root. Хотя это выходит за рамки темы 104.5 LPI, есть несколько дополнительных атрибутов , доступных в различных файловых системах, которые предоставляют дополнительные возможности. Один из них — неизменный атрибут . Если это установлено, даже root не может удалить файл, пока атрибут не будет снят.
Используйте команду lsattr
, чтобы узнать, установлен ли неизменяемый флаг (или любой другой атрибут) для файла или каталога.Чтобы сделать файл неизменяемым, используйте команду chattr
с флагом -i
.
Листинг 12 показывает, что пользователь root может создать неизменяемый файл, но не может удалить его, пока не будет снят флаг неизменяемости.
Листинг 12. Неизменяемые файлы
[root @ attic4 ‑ cent ~] #touch keep.me
[root @ attic4 ‑ cent ~] #chattr + i keep.me
[root @ attic4 ‑ cent ~] #lsattr keep.me
‑‑‑‑ i ‑‑‑‑‑‑‑ keep.me
[root @ attic4 ‑ cent ~] #rm ‑f keep.me
rm: невозможно удалить keep.me ': операция запрещена
[root @ attic4 ‑ cent ~] #chattr ‑i keep.меня
[root @ attic4 ‑ cent ~] `#rm ‑f keep.me
Показать ещеПоказать еще значок Для изменения неизменяемого флага требуются права доступа root или, по крайней мере, возможность CAP_LINUX_IMMUTABLE. Создание неизменяемых файлов часто делается в рамках усилий по обеспечению безопасности или обнаружению вторжений. См. Страницу руководства по возможностям ( mancapabilities
) для получения дополнительной информации.
Маска создания файла
При создании нового файла в процессе создания указываются разрешения, которые должен иметь новый файл.Часто запрашивается режим 0666, что делает файл доступным для чтения и записи любому пользователю. Каталоги обычно по умолчанию 0777. Однако на это разрешающее создание влияет значение umask , которое указывает, какие разрешения пользователь , а не хочет автоматически предоставлять вновь созданным файлам или каталогам. Система использует значение umask для уменьшения первоначально запрошенных разрешений. Вы можете просмотреть настройку umask с помощью команды umask
, как показано в листинге 13.
Листинг 13. Отображение восьмеричной маски umask
[ian @ attic4 ‑ cent ~] $ umask
0002
Показать ещеПоказать еще значок Помните, что umask указывает, какие разрешения должны быть предоставлены , а не . В системах Linux, где у пользователей нет частных групп, umask обычно по умолчанию 0022, который удаляет группу и другие права записи из новых файлов. Если у пользователей есть частная группа (как в системе CentOS, используемой в этих примерах), umask обычно по умолчанию имеет значение 0002, что удаляет разрешение на запись для других пользователей.Используйте опцию -S
, чтобы отобразить umask символически, в форме, которая показывает, какие разрешения разрешены .
Используйте команду umask
, чтобы установить umask, а также отобразить его. Итак, если вы хотите, чтобы ваши файлы были более приватными и запретили всем группам или другому доступу к вновь созданным файлам, вы должны использовать значение umask 0077. Или установите его символически, используя umask u = rwx, g =, o =
, как показано в Листинге 14.
Листинг 14.Установка маски
[ian @ attic4 ‑ cent ~] $ umask ‑S
u = rwx, g = rwx, o = rx
[ian @ attic4 ‑ cent ~] $ umask u = rwx, g =, o =
[ian @ attic4 ‑ cent ~] $ umask
0077
[ian @ attic4 ‑ cent ~] $ touch newfile
[ian @ attic4 ‑ cent ~] $ ls ‑l новый файл
‑Rw ‑‑‑‑‑‑. 1 ian ian 0 9 августа 07:09 newfile
Показать ещеПоказать еще значокПомните, что разрешение по умолчанию для вновь созданных файлов — 0666, а значения umask указывают, какой из этих битов должен быть удален (замаскирован). Поэтому разрешение на выполнение должно быть явно добавлено к файлу, если вы этого хотите.
Установка владельца файла и группы
Группа файлов
Чтобы изменить группу файла, используйте команду chgrp
с именем группы и одним или несколькими именами файлов. Вы также можете использовать номер группы, если хотите. Обычный пользователь должен владеть файлом, а также быть членом группы, в которую изменяется группа файла. Пользователь root может изменять файлы в любой группе. В листинге 15 показан пример.
Листинг 15. Смена владельца группы
[ian @ attic4 ‑ cent ~] $ touch file {1,2}
[ian @ attic4 ‑ cent ~] $ ls ‑l файл
‑Rw ‑ rw ‑ r‑.1 ian ian 0 9 августа 07:16 file1
‑Rw ‑ rw ‑ r‑. 1 ian ian 0 9 августа 07:16 file2
[ian @ attic4 ‑ cent ~] файл разработки $ chgrp1
[ian @ attic4 ‑ cent ~] $ chgrp 1002 file2
[ian @ attic4 ‑ cent ~] $ ls ‑l файл
‑Rw ‑ rw ‑ r‑. 1 ian development 0 9 августа 07:16 file1
‑Rw ‑ rw ‑ r‑. 1 ian development 0 9 августа 07:16 file2
Показать ещеПоказать еще значок Как и многие команды, описанные в этом руководстве, chgrp
имеет параметр -R
, позволяющий рекурсивно применять изменения ко всем выбранным файлам и подкаталогам.
Группа по умолчанию
Изучая режимы доступа, вы узнали, как установка режима sgid в каталоге приводит к тому, что новые файлы, созданные в этом каталоге, принадлежат группе этого каталога, а не группе пользователя, создавшего файл.
Вы также можете использовать команду newgrp
, чтобы временно изменить вашу основную группу на другую группу, членом которой вы являетесь. Будет создана новая оболочка, и когда вы выйдете из оболочки, ваша предыдущая группа будет восстановлена, как показано в листинге 16.
Листинг 16. Использование newgrp для временного изменения группы по умолчанию
[ian @ attic4 ‑ cent ~] $ groups
ian редактор разработки
[ian @ attic4 ‑ cent ~] $ newgrp development
[ian @ attic4 ‑ cent ~] $ groups
редактор-разработчик
[ian @ attic4 ‑ cent ~] $ touch file3
[ian @ attic4 ‑ cent ~] $ ls ‑l file3
‑Rw ‑ r ‑ r‑. 1 ian development 0 9 августа 07:21 file3
[ian @ attic4 ‑ cent ~] $ exit
выход
[ian @ attic4 ‑ cent ~] $ groups
ian редактор разработки
Показать ещеПоказать еще значокВладелец файла
Пользователь root может изменить владельца файла с помощью команды chown
.В простейшей форме синтаксис аналогичен команде chgrp
, за исключением того, что вместо имени или идентификатора группы используется имя пользователя или числовой идентификатор. Группу файла можно изменить одновременно, добавив двоеточие и имя или идентификатор группы сразу после имени или идентификатора пользователя. Если указано только двоеточие, то используется группа пользователя по умолчанию. Естественно, опция -R
применит изменение рекурсивно. В листинге 17 показан пример.
Листинг 17. Использование chown для изменения владельца файла
[ian @ attic4 ‑ cent ~] $ touch file4
[ian @ attic4 ‑ cent ~] $ su -
Пароль:
[root @ attic4 ‑ cent ~] #ls ‑l ~ ian / file4
‑Rw ‑ rw ‑ r‑.1 ian ian 0 9 августа 07:27 / home / ian / file4
[root @ attic4 ‑ cent ~] #chown greg ~ ian / file4
[root @ attic4 ‑ cent ~] #ls ‑l ~ ian / file4
‑Rw ‑ rw ‑ r‑. 1 greg ian 0 9 августа 07:27 / home / ian / file4
[root @ attic4 ‑ cent ~] #chown jenni: mary ~ ian / file4
[root @ attic4 ‑ cent ~] #ls ‑l ~ ian / file4
‑Rw ‑ rw ‑ r‑. 1 дженни мэри 0 9 августа 07:27 / home / ian / file4
[root @ attic4 ‑ cent ~] #chown: jenni ~ ian / file4
[root @ attic4 ‑ cent ~] #ls ‑l ~ ian / file4
‑Rw ‑ rw ‑ r‑. 1 Дженни Дженни 0 9 августа 07:27 / home / ian / file4
Показать ещеПоказать еще значокВ более старой форме указания пользователя и группы использовалась точка вместо двоеточия.Это больше не рекомендуется, поскольку имена, содержащие точку, могут вызвать путаницу.
На этом вы закончите знакомство с правами доступа к файлам и каталогам в Linux.
языковая независимость — В чем разница между «двоичными файлами» и «исполняемыми файлами» в контексте исполняемой программы?
Я часто вижу, что термины «двоичный» и «исполняемый» используются как синонимы для обозначения одного и того же.
Разве это не два термина для описания одного и того же; Исполняемая программа вывода после процесса компиляции, которую я могу запустить на терминале?
Что укрепляет мое предположение, что эти две вещи должны быть одинаковыми, так это то, что это обычная практика — предоставлять папку bin
(«bin» как сокращение от «двоичных файлов») внутри установочных папок приложения, для хранения исполняемых файлов, которые пользователи могут запускать.
Я прочитал вопрос и ответы на вопрос «В чем разница между двоичными и исполняемыми файлами, упомянутыми в руководстве ndisasm»? но вопрос и их ответ больше сосредоточены на соответствующих средах Clang и ndisasm.
Я также читал вопросы и ответы https://softwareengineering.stackexchange.com/questions/121224/what-are-binaries на форуме Software Engineering, но здесь также нет различия между исполняемым и двоичным файлом; только то, что в целом может относиться к термину «двоичный»:
Но, в Computing , двоичный относится к:
- Двоичный файл, состоящий не из текста, удобочитаемого человеком
- Executable, тип двоичного файла, который содержит машинный код для компьютера, чтобы выполнить
- Двоичный код, цифровое представление текста и данных
[Источник: https: // softwareengineering.stackexchange.com/a/121235/349225]
, где в контексте выходной программы процесса компиляции двоичный файл назывался тем же, что и исполняемый файл, а также:
Слово двоичных файлов используется как набор файлов, которые создаются после компиляции , по сути, объектного кода, который выполняется на машинах. (и виртуальные машины / среды выполнения в случае Java / .NET)
[Источник: https: //softwareengineering.stackexchange.com / a / 121234/349225 ]
, где упоминалось то же самое.
- В чем разница между «двоичными файлами» и «исполняемыми файлами» в контексте исполняемой программы?
- Где различие?
404 | Микро Фокус
Сформируйте свою стратегию и преобразуйте гибридную ИТ-среду.
Помогите вам внедрить безопасность в цепочку создания стоимости ИТ и наладить сотрудничество между ИТ-подразделениями, приложениями и службами безопасности.
Помогите вам быстрее реагировать и получить конкурентное преимущество благодаря гибкости предприятия.
Ускорьте создание гибридного облака с помощью услуг по консультированию, трансформации и внедрению.
Службы управления приложениями, которые позволяют поручить управление решениями экспертам, разбирающимся в вашей среде.
Услуги стратегического консалтинга для разработки вашей программы цифровой трансформации.
Полнофункциональное моделирование сценариев использования с предустановленными интеграциями в портфеле программного обеспечения Micro Focus, демонстрирующее реальный сценарий использования
Услуги экспертной аналитики безопасности, которые помогут вам быстро спроектировать, развернуть и проверить реализацию технологии безопасности Micro Focus.
Служба интеграции и управления услугами, которая оптимизирует доставку, гарантии и управление в условиях нескольких поставщиков.
Анализируйте большие данные с помощью аналитики в реальном времени и ищите неструктурированные данные.
Анализируйте большие данные с помощью аналитики в реальном времени и ищите неструктурированные данные.
Анализируйте большие данные с помощью аналитики в реальном времени и ищите неструктурированные данные.
Мобильные услуги, которые обеспечивают производительность и ускоряют вывод на рынок без ущерба для качества.
Анализируйте большие данные с помощью аналитики в реальном времени и ищите неструктурированные данные.