2013-09-17 3 views
2

в моей программе я должен создать скрытый файл, чтобы избежать удалить или модификацию файлакак создать скрытые файлы в Linux

PATH=/etc/ 
NAME = file 

поэтому я прошу, если есть функция с, которые позволяют сделать ?

благодарственное

+5

префикс имени с точкой – CapelliC

+1

'создайте скрытый файл, чтобы избежать удаления или изменения файла' - спасибо, не знал, что скрытые файлы не могут быть удалены/изменены. – devnull

+2

Вероятно, вы не хотите устанавливать переменную 'PATH' в'/etc/'при любых обстоятельствах. – bitmask

ответ

7

Вы можете просто добавить . в начало имени файла. Сказав, что если ваша цель состоит в том, чтобы не допустить изменения файла, измените разрешения на то, что не может быть изменено. Что-то вроде:

chmod 444 fileName 
+1

Это не скрывает файл и не позволяет никому удалять или редактировать его. – alk

+0

Если вы добавите '.' перед именем, это определенно скрывает файл. И это определенно не позволяет редактировать его, если вы 444 файл. Что касается удаления, вам придется изменить липкий бит в каталоге, который немного выходит за рамки. – Grammin

+0

Вы смущены тем, что он подразумевает под скрытым файлом. – Grammin

2

В LINUX Hidden файле начинаются с .(DOT)

, если вы создаете файлы с исходными .(DOT), эти файлы скрыты.

Вы можете использовать chmod для установки разрешений к файлу.

если вы установите только для чтения только тогда те, которые не могут быть изменены в программе

chmod 444 filename 

, если вы хотите использовать это с использованием C-языка system() функцию, чтобы выполнить эту команду

если Вы используете простой ls -alF вы можете увидеть эти файлы.

указанные ниже файлы скрытые файлы в LINUX

-rw------- 1 root root 27671 Sep 17 11:40 .bash_history 
-rw-r--r-- 1 root root 3512 Jul 23 16:30 .bashrc 
+0

Извините, что 'ls -lrt' не будет отображать * скрытые * файлы (т. Е. Те, которые начинаются с' .'). – devnull

+0

Извините, я удалил тот. Спасибо, что указали это. – Gangadhar

+0

Это не скрывает файл и не позволяет никому удалять или редактировать его. – alk

3

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

Скрытый означает, что только такие инструменты, как ls, шашки bash или графические диспетчеры файлов, не будут отображать файлы с настройками по умолчанию. Это может быть полезно для предотвращения несчастных случаев (см. Объяснение ниже) или просто для того, чтобы сохранить списки каталогов более чистыми. Вы можете попробовать команды ls -l $HOME и ls -al $HOME, чтобы увидеть различия.

В системах GNU/Linux и UNIX по умолчанию файлы, имя которых начинается с точки ., по умолчанию не отображаются, поскольку они скрыты. Как $HOME/.bashrc

Решение: Приставка имя файла с точкой:

.file 

О несчастных случаев. Скрытие файл может предотвратить вас от случайного удаления, когда вы печатаете что-то вроде:

rm * 

Глоб выше, не будут перечислены скрытые файлы, так что они не будут удалены.

+1

Это не скрывает файл, и никому не удалять или редактировать его. 'ls -a' показывает точечные файлы. – alk

+1

скрытые файлы не имеют никакого отношения к безопасности. Если вы спорите, значит, вы совершенно не правы в этом посте. – hek2mgl

+0

Я не знаю, из чего вы заключаете, я бы связал скрытые файлы и безопасность. Насколько я понимаю вопрос, который делает ОП. – alk

0

Конечно, вам нужно добавить '.' перед именем файла, и ваш файл не будет отображаться пользователем (за исключением того, что пользователь включит опцию show hidden files).Вы можете изменить attrybutes (chmod) на 755, и только пользователь может rwx, а другие могут rx.

1

В Linux нет скрытых файлов. В некоторых инструментах нет файлов, начинающихся с ., как уже упоминалось ранее.

В любом случае, вы можете поэкспериментировать с помещением управляющих символов, таких как new-line, в имя файла. См. Control characters in filenames are a terrible idea:

Некоторые управляющие символы, в частности символ выхода (ESC), могут вызывать всевозможные проблемы с отображением, включая проблемы с безопасностью. Терминалы (например, xterm, gnome-terminal, консоль Linux и т. Д.) Реализуют управляющие последовательности. Большинство разработчиков программного обеспечения не понимают, что простое отображение имен файлов может привести к проблемам безопасности, если они могут содержать контрольные символы. Программа GNU ls пытается защитить пользователей от этого эффекта по умолчанию (см. Параметр -N), но многие люди отображают имена файлов без фильтрации по ls - и проблема возвращается. В «Проблемы безопасности терминального эмулятора» Д.Моура (2003) кратко излагаются некоторые проблемы безопасности; современные эмуляторы терминала пытаются отключить самые опасные, но они все равно могут вызвать проблемы. Имя файла со встроенными управляющими символами может (когда отображается) заставлять функциональные клавиши переименовываться, устанавливать X-атомы, изменять отображения в заблуждение и т. Д. Чтобы противостоять этому, некоторые программы изменяют управляющие символы (такие как find и ls), что еще более затрудняет правильную обработку файлов с такими именами.

0

hek2mgl - частично да - есть. Попробуйте удалить через rm -rf * весь контент каталога. Вот почему, например .htaccess скрыт.

+0

'rm -rf. *' Удаляет все точечные файлы. – alk

+0

Я не говорил о том, может ли скрытый файл удаляться или не может быть удален :) В большинстве случаев вы печатаете только *, а скрытый файл, такой как файлы conf, не удаляется. – podwysoc

0

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

Имейте в виду, что Unix-подобные системы на самом деле не скрыты, когда задействованный ресурс должен оставаться видимым (читаемым, предположительно), как отмечали другие. Подготовить '.' к имени файла помогает в некоторых важных контекстах (по умолчанию ls(1) поведение и оболочка *) в частности), но только до сих пор. Но несколько методов могут помочь скрыть то, что и где ваше приложение спасает вещи, если это имеет значение.

Рассмотрите возможность использования двумя командами оболочки, например, следующих команд в каталоге с его липким набором бит (например, tmp). (К сожалению не писать C, но я думаю, что сценарий проще показать в оболочке.)

Как Боб:

$ umask 066 
$ mkdir /tmp/.hidden 
$ umask 022 
$ echo xyzzy > /tmp/.hidden/mysecret.txt 
$ ls -la /tmp/.hidden 
total 28 
drwx--x--x 2 bob users 4096 Sep 17 11:19 . 
drwxrwxrwt 27 root root 20480 Sep 17 11:26 .. 
-rw-r--r-- 1 bob users 6 Sep 17 11:19 mysecret.txt 

Как Алиса. Обратите внимание, что попытки поиска в /tmp/.hidden завершаются с ошибкой, но если она знает имя файла в каталоге с установленным только выполнением, но не разрешенным чтением, она может прочитать файл. Она не может много работать с /tmp/.hidden, как только она будет правильно создана. Если бы она была вынуждена угадать имя секретного файла, это также может быть проблемой в зависимости от того, как создается имя.

$ ls /tmp | grep hidden 
$ ls -a /tmp | grep hidden 
.hidden 
$ file /tmp/.hidden 
/tmp/.hidden: directory 
$ ls /tmp/.hidden 
ls: cannot open directory /tmp/.hidden: Permission denied 
$ echo /tmp/.hidden/* 
/tmp/.hidden/* 
$ file /tmp/.hidden/mysecret.txt 
/tmp/.hidden/mysecret.txt: ASCII text 
$ cat /tmp/.hidden/mysecret.txt 
xyzzy 
$ rm -f /tmp/.hidden/mysecret.txt 
rm: cannot remove '/tmp/.hidden/mysecret.txt': Permission denied 
$ mv /tmp/.hidden /tmp/Hidden_No_More 
mv: cannot move '/tmp/.hidden' to '/tmp/Hidden_No_More': Operation not permitted 
$ rm -rf /tmp/.hidden 
rm: cannot remove '/tmp/.hidden': Permission denied 

В этом случае наличие скрытой директории может быть скрыто, но ls -a показывает свое название. Тщательно выбранные права доступа к каталогам запрещают пользователям, не являющимся пользователем root, и пользователям, не являющимся пользователями Bob, перечислять или изменять его содержимое. Использование каталога с липкими битами, например/tmp, предотвращает переименование или удаление «блогосбыта» каталога. Любой, кто знает имя «секретного» файла в скрытом каталоге, может его прочитать. Но только Боб и корень могут изменять эти «секретные» файлы или «скрытый» каталог.

Вы можете сделать все вышеперечисленное в программе на языке C; эквиваленты существуют в виде библиотеки и системных вызовов - видеть вещи, как chmod(2), mkdtemp(3), umask(2), режим аргумент open(2) и т.д.

1

Если вы используете ядро> = 3.11, вы можете попробовать O_TMPFILE -flag. Это ядро ​​было выпущено 14.09.2013. Debian Jessie использует Kernel 3.16. поэтому эта функция должна быть доступна во всех популярных популярных дистрибутивах.

Новость об этом sounds promising. Файл будет недоступен извне. Никакой другой процесс или не может получить доступ к этому файлу .. ни читать, ни писать. Но файл будет потерян, как только ручка будет закрыта. Или свяжите его с обычным файлом. Но тогда он будет доступен как любой другой файл.

Если это не вариант для вас (например, ваш файл должен быть постоянным): неудача. В linux нет реального «скрытого» файла. Вы можете скрыть ваши постоянные файлы как защищенные, как файлы на окнах со скрытым атрибутом: добавьте имя с точкой. Как заявили другие: ls -a покажут их.

Кроме того, вы можете создать пользователя специально для вашего использования и сделать файл доступным для чтения и записи только для этого пользователя или поместить его в папку, где только ваш пользователь имеет rw-доступ. Другие пользователи могут видеть этот файл, но не смогут получить к нему доступ. Но если root приходит и хочет заглянуть в него, вы проиграли.

Смежные вопросы