+94
-39
@@ -1,45 +1,60 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# =======================
|
||||
# 1. Télécharger et compiler ELOG
|
||||
# =======================
|
||||
rm -rf /tmp/elog-build && mkdir -p /tmp/elog-build
|
||||
cd /tmp/elog-build
|
||||
git clone --recursive https://bitbucket.org/ritt/elog
|
||||
cd elog
|
||||
make -j"$(nproc)"
|
||||
mkdir -p "$HOME/.local/bin"
|
||||
cp elogd "$HOME/.local/bin/"
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
|
||||
# =======================
|
||||
# 2. Préparer l'instance
|
||||
# =======================
|
||||
INSTANCE_DIR="/tmp/elog_instance"
|
||||
mkdir -p "$INSTANCE_DIR/logbooks/demo"
|
||||
LOGBOOK_DIR="$INSTANCE_DIR/logbooks/demo"
|
||||
YEAR_DIR="$LOGBOOK_DIR/$(date +%Y)"
|
||||
mkdir -p "$YEAR_DIR"
|
||||
|
||||
chmod 1777 /tmp
|
||||
chmod -R 777 "$INSTANCE_DIR"
|
||||
|
||||
# Génération des hashes avec elogd
|
||||
MD5_PASS=$(~/.local/bin/elogd -P testpassword md5)
|
||||
SHA1_PASS=$(~/.local/bin/elogd -P testpassword sha1)
|
||||
CRYPT_PASS=$(~/.local/bin/elogd -P testpassword crypt)
|
||||
|
||||
# Création du fichier users.xml avec plusieurs utilisateurs
|
||||
# =======================
|
||||
# 3. Créer users.xml (mot de passe en clair)
|
||||
# =======================
|
||||
cat > "$INSTANCE_DIR/users.xml" <<EOF
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<list>
|
||||
<!-- Mot de passe en clair -->
|
||||
<user>
|
||||
<name>clear</name>
|
||||
<name>robot</name>
|
||||
<password>testpassword</password>
|
||||
<full_name>Clear Password</full_name>
|
||||
</user>
|
||||
<!-- MD5 -->
|
||||
<user>
|
||||
<name>md5</name>
|
||||
<password>${MD5_PASS}</password>
|
||||
<full_name>MD5 Password</full_name>
|
||||
</user>
|
||||
<!-- SHA1 -->
|
||||
<user>
|
||||
<name>sha1</name>
|
||||
<password>${SHA1_PASS}</password>
|
||||
<full_name>SHA1 Password</full_name>
|
||||
</user>
|
||||
<!-- crypt(3) -->
|
||||
<user>
|
||||
<name>crypt</name>
|
||||
<password>${CRYPT_PASS}</password>
|
||||
<full_name>Crypt Password</full_name>
|
||||
<full_name>Robot User</full_name>
|
||||
<last_logout>0</last_logout>
|
||||
<last_activity>0</last_activity>
|
||||
<email>robot@example.com</email>
|
||||
</user>
|
||||
</list>
|
||||
EOF
|
||||
|
||||
# Config ELOG pour qu'il lise ce fichier
|
||||
sudo chown nobody:nogroup "$INSTANCE_DIR/users.xml"
|
||||
chmod 644 "$INSTANCE_DIR/users.xml"
|
||||
|
||||
# DEBUG users.xml
|
||||
echo "=== DEBUG: droits users.xml ==="
|
||||
ls -l "$INSTANCE_DIR/users.xml"
|
||||
echo "=== DEBUG: contenu users.xml ==="
|
||||
cat "$INSTANCE_DIR/users.xml"
|
||||
echo "=== DEBUG: qui peut lire ? ==="
|
||||
sudo -u nobody cat "$INSTANCE_DIR/users.xml" || echo "❌ nobody ne peut pas lire"
|
||||
|
||||
# =======================
|
||||
# 4. Configuration ELOG
|
||||
# =======================
|
||||
cat > "$INSTANCE_DIR/elogd.cfg" <<EOF
|
||||
[global]
|
||||
Port = 8080
|
||||
@@ -47,25 +62,65 @@ Logbook dir = $INSTANCE_DIR/logbooks
|
||||
Resource dir = $INSTANCE_DIR
|
||||
Allow HTML = 1
|
||||
List after submit = 0
|
||||
User = $(id -un)
|
||||
Group = $(id -gn)
|
||||
Password file = $INSTANCE_DIR/users.xml
|
||||
Encrypt passwords = 0
|
||||
Login expiration = 24
|
||||
Admin user = robot
|
||||
Self register = 0
|
||||
Admin user = clear
|
||||
|
||||
[demo]
|
||||
Subdir = demo
|
||||
Preset Author = robot
|
||||
Login user = robot
|
||||
Menu commands = List, New, Edit, Reply, Duplicate, Find, Config, Logout, Help
|
||||
Required Attributes = Author
|
||||
EOF
|
||||
|
||||
# Lancer ELOG
|
||||
# =======================
|
||||
# 5. Lancer ELOG
|
||||
# =======================
|
||||
pkill -f 'elogd -c' 2>/dev/null || true
|
||||
~/.local/bin/elogd -c "$INSTANCE_DIR/elogd.cfg" -vvv &
|
||||
sleep 2
|
||||
|
||||
# Tester toutes les combinaisons
|
||||
for user in clear md5 sha1 crypt; do
|
||||
echo "=== Test connexion: $user:testpassword ==="
|
||||
RESPONSE=$(curl -s -u "$user:testpassword" http://localhost:8080/demo)
|
||||
if echo "$RESPONSE" | grep -q "redir"; then
|
||||
echo "❌ Échec pour $user"
|
||||
echo "✅ ELOG démarré sur http://localhost:8080"
|
||||
echo " → Utilisateur : robot"
|
||||
echo " → Mot de passe : testpassword"
|
||||
|
||||
# =======================
|
||||
# 6. Tester différentes combinaisons de mot de passe
|
||||
# =======================
|
||||
function test_connexion() {
|
||||
local mode=$1
|
||||
local pwd=$2
|
||||
|
||||
echo "=== Test connexion: $mode:$pwd ==="
|
||||
RESP=$(curl -s -u "robot:$pwd" http://localhost:8080/demo)
|
||||
if [[ "$RESP" == *"List of Messages"* || "$RESP" == *"redir"* ]]; then
|
||||
echo "✅ Succès pour $mode"
|
||||
else
|
||||
echo "✅ Succès pour $user"
|
||||
echo "❌ Échec pour $mode"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Test clair
|
||||
test_connexion "clear" "testpassword"
|
||||
|
||||
# Test md5
|
||||
MD5PWD=$(echo -n "testpassword" | md5sum | awk '{print $1}')
|
||||
sed -i "s|<password>.*</password>|<password>$MD5PWD</password>|" "$INSTANCE_DIR/users.xml"
|
||||
test_connexion "md5" "testpassword"
|
||||
|
||||
# Test sha1
|
||||
SHA1PWD=$(echo -n "testpassword" | sha1sum | awk '{print $1}')
|
||||
sed -i "s|<password>.*</password>|<password>$SHA1PWD</password>|" "$INSTANCE_DIR/users.xml"
|
||||
test_connexion "sha1" "testpassword"
|
||||
|
||||
# Test crypt
|
||||
CRYPTPWD=$(openssl passwd -crypt "testpassword")
|
||||
sed -i "s|<password>.*</password>|<password>$CRYPTPWD</password>|" "$INSTANCE_DIR/users.xml"
|
||||
test_connexion "crypt" "testpassword"
|
||||
|
||||
echo "=== Tests terminés ==="
|
||||
|
||||
Reference in New Issue
Block a user