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 |