LINUX.ORG.RU

Голый rm обходит права доступа?

 ,


0

1

В «удалятор» на Go сделал такую политику: Указывается название цели. Потом цель ищется в каком-то месте, в каталогах и подкаталогах его. Если вдруг она находится - спрашивает оно у юзера о том, нужна ли юзеру цель; если нет - удаляет через exec.Command("rm", "%v", current_target). Ошибку, при наличии, выводит в

if orth_err := exec.Run(); orth_err != nil{ 
   fmt.Println(orth_err)
   return
}

В действительности, когда файл находится, rm(а точнее ранний вариант использования rm -f) его быстро сносит, без каких-либо проблем. Тогда я решил прикольнуться и, от рута, забрать себе права на файл. По идее, юзер обыкновенный, не принадлежащий группе рута, не должен мочь удалить такой файл из-за неналичия прав, ОДНАКО, ему удаётся!

Убрал -f, попробовал удалить голым rm - получается. Тогда я снова присвоил права на файл руту, но уже чтобы Owner = root, Group = root. rm справляется, ни смотря ни на что. Однако, уже в таком случае, запущенный вручную rm, говорит о защите от записи(но удалить всё равно может, если написать y), а в удаляторе он выдаёт Код ошибки 1 и, без вопросов, удаляет файл.

Суть оригинального эксперимента быда в том, чтобы узнать, передаст ли запущенный от рута удалятор права суперпользователя на команду rm.

Минутка код-ревью.

fmt.Println(orth_err)

Для простого логирования ошибок принято использовать log.Println.

return

А ошибку принято возвращать вызывающей функции. Но если это main, то принято завершать работу программы с кодом ошибки, что делает os.Exit. Либо, если пакет log уже используется, log.Fatal.

Pro tip: чтобы задать формат логов, нужно использовать методы log.SetPrefix и log.SetFlags.

kaldeon
()