Jak odebrat sticky bit u adresářů

Jak odebrat sticky bit s adresářů, co znamenají další bity?

V rámci reorganizace adresářů/souborů ve sdílené složce vznikla potřeba povolit všem uživatelům mající přístup ke složce mazat a přejmenovávat soubory v rámci složky.

Omezení je nastaveno pomocí sticky bitu, který se používá u adresářů k tomu, aby uživatelé s právem zápisu do souborů v adresáři nemohli odstranit soubory, které nevlastní.

Ve výpisu příkazu getfacl je to vidět:

# file: tmp/a/
# owner: michal
# group: michal
# flags: sst
user::rwx
group::r-x
other::r-x

Řádek 4 určuje setuid (s), setgid (s), a sticky (t) bity. Buď písmeno představující bit, nebo pomlčka (-).

Setuid (s)

Setuid nebo SUID je nastaveno v poli pro spuštění vlastníkem, aby bylo běžným uživatelům umožněno spustit aplikaci převzetím identity vlastníka souboru.

Setgid (s)

Setgid nebo SGID má stejný účel jako setuid, ale souvisí s oprávněními skupiny.

Sticky bit (t)

Sticky bit se u adresářů používá k tomu, aby uživatelé s právem zápisu do souborů v adresáři nemohli odstranit soubory, které nevlastní.

K odebrání sticky bitu se dá použít skript:

#!/bin/bash

# Removes sticky bit from a directory (recursivelly)

if [ -z "${1}" ]; then
    echo "Invalid usage. Missing target dir" >&2
    exit 2
fi

target_dir="${1}"

if [ ! -d "${target_dir}" ]; then
    echo "The target dir ${target_dir} does not exist or is not a directory" >&2
    exit 2
fi

while read -r dir; do
    echo "Removing sticky bit from: ${dir}"
    chmod -t "${dir}" || {
        echo "Could not remove the sticky bit. Aborted." >&2
        exit 1
    }

done <<< "$(find "${target_dir}" -type d)"