22 lines
1.1 KiB
Bash
22 lines
1.1 KiB
Bash
# A login shell's umask, and the mode of something it creates.
|
|
um() { runuser -l "$1" -c umask 2>/dev/null; }
|
|
made() {
|
|
local u=$1 kind=$2 f m
|
|
f=$(runuser -l "$u" -c 'd=$(mktemp -d); echo $d' 2>/dev/null)
|
|
[ -n "$f" ] || return 1
|
|
if [ "$kind" = file ]; then runuser -l "$u" -c "touch $f/t"; m=$(stat -c %A "$f/t"); else runuser -l "$u" -c "mkdir $f/d"; m=$(stat -c %A "$f/d"); fi
|
|
rm -rf "$f"
|
|
echo "$m"
|
|
}
|
|
|
|
task 1 "alice's new files are rw------- (umask 0077)"
|
|
need "su - alice -c umask prints 0077" '[ "$(um alice)" = 0077 ]'
|
|
need "a file alice creates is -rw-------" '[ "$(made alice file)" = -rw------- ]'
|
|
need "the umask is set in one of alice's own files" 'grep -Eqs "^[[:space:]]*umask[[:space:]]+0?077" /home/alice/.bashrc /home/alice/.bash_profile /home/alice/.profile'
|
|
|
|
task 2 "Everyone's new directories are rwxr-x--- (umask 0027)"
|
|
need "su - bob -c umask prints 0027" '[ "$(um bob)" = 0027 ]'
|
|
need "a directory bob creates is drwxr-x---" '[ "$(made bob dir)" = drwxr-x--- ]'
|
|
need "the umask is in a file in /etc/profile.d/" 'grep -Eqs "^[[:space:]]*umask[[:space:]]+0?027" /etc/profile.d/*.sh'
|
|
need "alice still has 0077" '[ "$(um alice)" = 0077 ]'
|