Одна из самых типичных проблем, возникающих при осваивании механизма jail в FreeBSD, это сложности с удалением файловой системы машины.  При попытке удаления некоторых директорий возникает «непонятная» ошибка.

# rm -Rf ./bin
rm: ./bin/crontab: Operation permitted
rm: ./bin/chpass: Operation permitted
rm: ./bin/opieinfo: Operation permitted
rm: ./bin/login: Operation permitted
rm: ./bin/opiepasswd: Operation permitted
rm: ./bin/passwd: Operation permitted
rm: ./bin/rlogin: Operation permitted
rm: ./bin/rsh: Operation permitted
rm: ./bin/su: Operation permitted
rm: ./bin/ypchsh: Operation permitted
rm: ./bin/ypchfn: Operation permitted
rm: ./bin/ypchpass: Operation permitted
rm: ./bin/chsh: Operation permitted
rm: ./bin/chfn: Operation permitted
rm: ./bin/yppasswd: Operation permitted
rm: ./bin: Directory empty

Что бы это значило? Ведь мы же выполняем классическую не игнорируемую команду удаления  rm -Rf от имени суперпользователя. Для него ведь не существует понятие «Not permited«. А вот, оказывается, существует! Давайте внимательно проверим  флаги какого либо «неудаляемого» файла.

# ls -lo  ./bin/crontab
-r-sr-xr-x  1 root  wheel  schg 33944 Apr 13  2009 ./bin/crontab

Вот оно! Флаг schg — это системный флаг «неизменяемости», который может устанавливать только суперпользователь системы. Файлы с установленным флагом schg нельзя изменять вообще: редактировать, перемещать, заменять. Сама файловая система будет пресекать такие операции. Также этот флаг нельзя изменить, когда система работает на уровне безопасности 1 и выше.  По умолчанию FreeBSD работает с уровнем -1, можете проверить:

# sysctl -a |grep securelevel
kern.securelevel: -1

Удалить  флаг можно командой chflags, вот так, сразу для всей директории:

# chflags -Rf noschg ./bin

Проверяем отсутствие флага:

# ls -lo ./bin/crontab
-r-sr-xr-x  1 root  wheel  - 33944 Apr 13  2009 ./bin/crontab

Теперь можно нормально выполнить команду рекурсивного удаления директории.

# rm -Rf ./bin