ssfs annotate ssfs-server @ rev 4

Add ssfs-server the server side tool
author Christophe Lincoln <pankso@slitaz.org>
date Sat Jun 11 08:42:29 2011 +0200 (2011-06-11)
parents
children ef6a5580a9cb
rev   line source
pankso@4 1 #!/bin/sh
pankso@4 2 #
pankso@4 3 # SliTaz Secure File Storage server side tool.
pankso@4 4 #
pankso@4 5 # Copyright (C) SliTaz GNU/Linux - BSD License
pankso@4 6 # Author: Christophe Lincoln <pankso@slitaz.org>
pankso@4 7 #
pankso@4 8
pankso@4 9 app=$(basename $0)
pankso@4 10 [ -f "/etc/ssfs/$app.conf" ] && . /etc/ssfs/$app.conf
pankso@4 11 [ -f "./data/$app.conf" ] && . ./data/$app.conf
pankso@4 12
pankso@4 13 # Be sure we're root.
pankso@4 14 [ $(id -u) != 0 ] && gettext "You must be root to run:" && \
pankso@4 15 echo " $app" && exit 0
pankso@4 16
pankso@4 17 # Parse cmdline options.
pankso@4 18 for opt in $@
pankso@4 19 do
pankso@4 20 case "$opt" in
pankso@4 21 --login=*)
pankso@4 22 login=${opt#--login=} ;;
pankso@4 23 --id=*)
pankso@4 24 id=${opt#--id=} ;;
pankso@4 25 --pass=*)
pankso@4 26 pass=${opt#--pass=} ;;
pankso@4 27 --root=*)
pankso@4 28 root=${opt#--root=} ;;
pankso@4 29 *)
pankso@4 30 continue ;;
pankso@4 31 esac
pankso@4 32 done
pankso@4 33
pankso@4 34 [ "$root" ] || root=${SSFS_CHROOT}
pankso@4 35
pankso@4 36 #
pankso@4 37 # Functions
pankso@4 38 #
pankso@4 39
pankso@4 40 # Built-in help usage.
pankso@4 41 help() {
pankso@4 42 cat << EOT
pankso@4 43
pankso@4 44 $(echo -e "\033[1m$(gettext "Usage:")\033[0m") $app [command] [--option=]
pankso@4 45
pankso@4 46 $(echo -e "\033[1m$(gettext "Commands:")\033[0m")
pankso@4 47 help $(gettext "Display this short usage.")
pankso@4 48 users $(gettext "List users account and stats.")
pankso@4 49 adduser $(gettext "Add a user to the system with \$HOME in chroot.")
pankso@4 50 deluser $(gettext "Delete a user and remove \$HOME files.")
pankso@4 51 chroot $(gettext "Chroot to Ssfs storage root.")
pankso@4 52 gen-chroot $(gettext "Create a chroot for users files storage.")
pankso@4 53 clean-chroot $(gettext "Clean the chroot but skip home/ and root/.")
pankso@4 54
pankso@4 55 $(echo -e "\033[1m$(gettext "Options:")\033[0m")
pankso@4 56 --login= $(gettext "Login name for add or del an user.")
pankso@4 57 --id= $(gettext "User id for adduser command.")
pankso@4 58 --pass= $(gettext "User password for adduser.")
pankso@4 59 --root= $(gettext "The path to the Ssfs chroot.")
pankso@4 60
pankso@4 61 EOT
pankso@4 62 }
pankso@4 63
pankso@4 64 status() {
pankso@4 65 [ $? = 0 ] && echo " OK"
pankso@4 66 [ $? = 1 ] && echo -e " ERROR\n" && exit 1
pankso@4 67 }
pankso@4 68
pankso@4 69 user_paths() {
pankso@4 70 config=$SSFS_USERS/$login.conf
pankso@4 71 home=$root/./home/$login
pankso@4 72 }
pankso@4 73
pankso@4 74 user_info() {
pankso@4 75 cat << EOT
pankso@4 76
pankso@4 77 $(gettext "User login :") $login
pankso@4 78 $(gettext "User quota :") $QUOTA
pankso@4 79 $(gettext "Home usage :") $usage
pankso@4 80
pankso@4 81 EOT
pankso@4 82 }
pankso@4 83
pankso@4 84 # Create a custom config when adding user to handle quota and user info.
pankso@4 85 user_config() {
pankso@4 86 gettext "Creating Ssfs user configuration file..."
pankso@4 87 cat > $config << EOT
pankso@4 88 # Ssfs user configuration file.
pankso@4 89
pankso@4 90 LOGIN="$login"
pankso@4 91 QUOTA="$DEFAULT_QUOTA"
pankso@4 92 PUBLIC="no"
pankso@4 93 EOT
pankso@4 94 chmod 0600 $config && status
pankso@4 95 echo ""
pankso@4 96 }
pankso@4 97
pankso@4 98 #
pankso@4 99 # Commands
pankso@4 100 #
pankso@4 101
pankso@4 102 case "$1" in
pankso@4 103 users)
pankso@4 104 gettext -e "\nChecking:"; echo " /etc/passwd"
pankso@4 105 fgrep "Ssfs User" /etc/passwd | while read line
pankso@4 106 do
pankso@4 107 login=$(echo $line | cut -d ":" -f 1)
pankso@4 108 home="$root/home/$login"
pankso@4 109 usage=$(du -sm $home | awk '{print $1}')
pankso@4 110 config=$SSFS_USERS/$login.conf
pankso@4 111 . $config || gettext -e "WARNING: No config file\n"
pankso@4 112 user_info
pankso@4 113 done
pankso@4 114 users=$(ls $SSFS_USERS | wc -l)
pankso@4 115 gettext "Users:"; echo -e " $users\n" ;;
pankso@4 116 adduser)
pankso@4 117 # Add a Ssfs user to the system with $HOME in chroot.
pankso@4 118 [ -z "$login" ] && gettext -e "Missing user login name.\n" && exit 0
pankso@4 119 [ -z "$id" ] && gettext -e "Missing user id.\n" && exit 0
pankso@4 120 [ -z "$pass" ] && gettext -e "Missing user password.\n" && exit 0
pankso@4 121 user_paths
pankso@4 122
pankso@4 123 gettext -e "\nChecking:"; echo " /etc/passwd"
pankso@4 124 if grep ^$login: /etc/passwd; then
pankso@4 125 gettext -e "Exiting user already exist:"
pankso@4 126 echo -e " $login\n" && exit 0
pankso@4 127 fi
pankso@4 128 gettext "Creating user: $login..."
pankso@4 129 echo -e "$pass\n$pass" | \
pankso@4 130 adduser -h "$home" -g "Ssfs User" -u $id $login >/dev/null
pankso@4 131 status
pankso@4 132
pankso@4 133 # We dont want any files from /etc/skel.
pankso@4 134 gettext "Cleaning home and creating: Sync/..."
pankso@4 135 rm -rf $home && mkdir -p $home/Sync && status
pankso@4 136 gettext "Changing mode on user home: 0700..."
pankso@4 137 chown -R $login.$login $home
pankso@4 138 chmod 0700 $home && status
pankso@4 139
pankso@4 140 # Create a custom config peer user in SSFS_USERS.
pankso@4 141 [ ! -d "$SSFS_USERS" ] && mkdir -p $SSFS_USERS
pankso@4 142 user_config ;;
pankso@4 143 deluser)
pankso@4 144 [ -z "$login" ] && gettext -e "Missing user login name.\n" && exit 0
pankso@4 145 user_paths
pankso@4 146 gettext -e "\nDeleting user:"; echo -n " $login..."
pankso@4 147 deluser $login || status && status
pankso@4 148 gettext "Removing all files in:"; echo -n " $home..."
pankso@4 149 rm -rf $home && status
pankso@4 150 gettext "Removing user config:"; echo -n " $login.conf..."
pankso@4 151 rm -rf $config && status
pankso@4 152 echo "" ;;
pankso@4 153 chroot)
pankso@4 154 gettext -e "\nChanging root to:"; echo -e " $root\n"
pankso@4 155 chroot $root
pankso@4 156 gettext -e "\nBack to the host system:"
pankso@4 157 echo -e " $(hostname)\n" ;;
pankso@4 158 gen-chroot)
pankso@4 159 # Generated a minimal chroot for Ssfs users home.
pankso@4 160 if [ -d "$root/bin" ]; then
pankso@4 161 gettext -e "A chroot already exist in:"; echo " $root"
pankso@4 162 exit 0
pankso@4 163 fi
pankso@4 164 gettext -e "\nCreating chroot in:"; echo " $root"
pankso@4 165 gettext "Installing SliTaz base files..."
pankso@4 166 yes | tazpkg get-install slitaz-base-files --root=$root >/dev/null
pankso@4 167 status
pankso@4 168 gettext "Installing Busybox..."
pankso@4 169 yes | tazpkg get-install busybox --root=$root >/dev/null
pankso@4 170 status
pankso@4 171 gettext "Cleaning Ssfs chroot..."
pankso@4 172 rm -f $root/init
pankso@4 173 status && echo "" ;;
pankso@4 174 clean-chroot)
pankso@4 175 # clean up the storage chroot.
pankso@4 176 if [ ! -d "$root/bin" ] || [ ! -d "$root/usr" ]; then
pankso@4 177 gettext -e "No chroot found in:"; echo " $root"
pankso@4 178 exit 0
pankso@4 179 fi
pankso@4 180 gettext -e "\nChanging directory to:"; echo " $root"
pankso@4 181 cd $root
pankso@4 182 for dir in *
pankso@4 183 do
pankso@4 184 size=$(du -sh $dir | awk '{print $1}')
pankso@4 185 case "$dir" in
pankso@4 186 home|root)
pankso@4 187 gettext "Skipping:"; echo " $dir $size *" ;;
pankso@4 188 *)
pankso@4 189 gettext "Removing:"; echo " $dir $size"
pankso@4 190 rm -rf $dir ;;
pankso@4 191 esac
pankso@4 192 done && echo "" ;;
pankso@4 193 *)
pankso@4 194 help ;;
pankso@4 195 esac
pankso@4 196 exit 0