mirror of
https://github.com/johndoe6345789/SparkOS.git
synced 2026-04-24 13:34:56 +00:00
Add regular user spark and clone-sparkos.sh script, default to non-root login
Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com>
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -66,6 +66,7 @@ rootfs/boot/*
|
|||||||
!rootfs/README.txt
|
!rootfs/README.txt
|
||||||
!rootfs/etc/
|
!rootfs/etc/
|
||||||
!rootfs/root/
|
!rootfs/root/
|
||||||
|
!rootfs/home/
|
||||||
|
|
||||||
# CodeQL
|
# CodeQL
|
||||||
_codeql_detected_source_root
|
_codeql_detected_source_root
|
||||||
|
|||||||
@@ -18,7 +18,13 @@ Directory Structure:
|
|||||||
/usr - User programs
|
/usr - User programs
|
||||||
/var - Variable data
|
/var - Variable data
|
||||||
/root - Root home directory
|
/root - Root home directory
|
||||||
/home - User home directories
|
/home/spark - Default user home directory
|
||||||
|
|
||||||
|
Default User:
|
||||||
|
Username: spark (UID 1000)
|
||||||
|
Home: /home/spark
|
||||||
|
Sudo: Full access without password
|
||||||
|
Scripts: ~/clone-sparkos.sh for installing spark CLI
|
||||||
|
|
||||||
Network Configuration:
|
Network Configuration:
|
||||||
/etc/network/interfaces - Wired network (DHCP)
|
/etc/network/interfaces - Wired network (DHCP)
|
||||||
@@ -26,10 +32,11 @@ Network Configuration:
|
|||||||
/sbin/init-network - Network initialization script
|
/sbin/init-network - Network initialization script
|
||||||
|
|
||||||
Bootstrap Process:
|
Bootstrap Process:
|
||||||
1. System boots with wired networking (DHCP)
|
1. System boots as 'spark' user with wired networking (DHCP)
|
||||||
2. Use git to clone spark CLI repository
|
2. Run ~/clone-sparkos.sh to install spark CLI
|
||||||
3. Use spark CLI to configure WiFi and system
|
3. Use spark CLI to configure WiFi and system
|
||||||
4. Install additional packages via spark CLI
|
4. Install additional packages via spark CLI
|
||||||
|
5. Use 'sudo' for any root-level operations
|
||||||
|
|
||||||
Note: This is a minimal system. You'll need to populate /bin and /usr/bin
|
Note: This is a minimal system. You'll need to populate /bin and /usr/bin
|
||||||
with actual binaries (busybox, git, sudo) from a proper Linux system
|
with actual binaries (busybox, git, sudo) from a proper Linux system
|
||||||
|
|||||||
@@ -1 +1,3 @@
|
|||||||
root:x:0:
|
root:x:0:
|
||||||
|
spark:x:1000:
|
||||||
|
sudo:x:27:spark
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
root:x:0:0:root:/root:/bin/sh
|
root:x:0:0:root:/root:/bin/sh
|
||||||
|
spark:x:1000:1000:SparkOS User:/home/spark:/bin/sh
|
||||||
|
|||||||
@@ -2,9 +2,15 @@
|
|||||||
|
|
||||||
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
|
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
|
||||||
export PS1='SparkOS:\w\$ '
|
export PS1='SparkOS:\w\$ '
|
||||||
export HOME=/root
|
|
||||||
export TERM=linux
|
export TERM=linux
|
||||||
|
|
||||||
|
# Set HOME based on user
|
||||||
|
if [ "$(id -u)" = "0" ]; then
|
||||||
|
export HOME=/root
|
||||||
|
else
|
||||||
|
export HOME=/home/$(whoami)
|
||||||
|
fi
|
||||||
|
|
||||||
# Welcome message
|
# Welcome message
|
||||||
echo "Welcome to SparkOS!"
|
echo "Welcome to SparkOS!"
|
||||||
echo "Type 'help' for available commands"
|
echo "Type 'help' for available commands"
|
||||||
|
|||||||
15
rootfs/etc/sudoers
Normal file
15
rootfs/etc/sudoers
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# SparkOS Sudoers Configuration
|
||||||
|
# Allow spark user to run any command without password
|
||||||
|
|
||||||
|
# Default settings
|
||||||
|
Defaults env_reset
|
||||||
|
Defaults secure_path="/bin:/sbin:/usr/bin:/usr/sbin"
|
||||||
|
|
||||||
|
# Root can run anything
|
||||||
|
root ALL=(ALL:ALL) ALL
|
||||||
|
|
||||||
|
# Spark user can run anything without password
|
||||||
|
spark ALL=(ALL:ALL) NOPASSWD: ALL
|
||||||
|
|
||||||
|
# Include sudoers.d directory
|
||||||
|
@includedir /etc/sudoers.d
|
||||||
12
rootfs/home/spark/.profile
Normal file
12
rootfs/home/spark/.profile
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# SparkOS User Shell Configuration
|
||||||
|
|
||||||
|
# Set prompt
|
||||||
|
PS1='SparkOS:\w\$ '
|
||||||
|
|
||||||
|
# Aliases
|
||||||
|
alias ll='ls -lah'
|
||||||
|
alias ..='cd ..'
|
||||||
|
|
||||||
|
# Environment
|
||||||
|
export EDITOR=vi
|
||||||
|
export PAGER=less
|
||||||
50
rootfs/home/spark/clone-sparkos.sh
Executable file
50
rootfs/home/spark/clone-sparkos.sh
Executable file
@@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# SparkOS CLI Installation Script
|
||||||
|
# This script clones the SparkOS CLI repository
|
||||||
|
|
||||||
|
echo "SparkOS CLI Installation"
|
||||||
|
echo "========================"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
SPARK_REPO="https://github.com/johndoe6345789/spark-cli.git"
|
||||||
|
INSTALL_DIR="$HOME/spark-cli"
|
||||||
|
|
||||||
|
echo "This script will clone the SparkOS CLI to: $INSTALL_DIR"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if git is available
|
||||||
|
if ! command -v git >/dev/null 2>&1; then
|
||||||
|
echo "Error: git is not installed"
|
||||||
|
echo "Please install git to continue"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if directory already exists
|
||||||
|
if [ -d "$INSTALL_DIR" ]; then
|
||||||
|
echo "Warning: $INSTALL_DIR already exists"
|
||||||
|
echo -n "Do you want to remove it and re-clone? (y/N): "
|
||||||
|
read answer
|
||||||
|
if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
|
||||||
|
rm -rf "$INSTALL_DIR"
|
||||||
|
else
|
||||||
|
echo "Installation cancelled"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clone the repository
|
||||||
|
echo "Cloning spark CLI repository..."
|
||||||
|
if git clone "$SPARK_REPO" "$INSTALL_DIR"; then
|
||||||
|
echo ""
|
||||||
|
echo "SparkOS CLI cloned successfully!"
|
||||||
|
echo ""
|
||||||
|
echo "Next steps:"
|
||||||
|
echo " 1. cd $INSTALL_DIR"
|
||||||
|
echo " 2. Follow the installation instructions in the repository"
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "Error: Failed to clone repository"
|
||||||
|
echo "Please check your network connection and try again"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
@@ -19,10 +19,13 @@ echo "Creating directory structure..."
|
|||||||
mkdir -p "$ROOTFS_DIR"/{bin,sbin,etc,proc,sys,dev,tmp,usr/{bin,sbin,lib,lib64},var,root,home}
|
mkdir -p "$ROOTFS_DIR"/{bin,sbin,etc,proc,sys,dev,tmp,usr/{bin,sbin,lib,lib64},var,root,home}
|
||||||
mkdir -p "$ROOTFS_DIR/etc"/{init.d,network}
|
mkdir -p "$ROOTFS_DIR/etc"/{init.d,network}
|
||||||
mkdir -p "$ROOTFS_DIR/var"/{log,run}
|
mkdir -p "$ROOTFS_DIR/var"/{log,run}
|
||||||
|
mkdir -p "$ROOTFS_DIR/home/spark"
|
||||||
|
mkdir -p "$ROOTFS_DIR/etc/sudoers.d"
|
||||||
|
|
||||||
# Set permissions
|
# Set permissions
|
||||||
chmod 1777 "$ROOTFS_DIR/tmp"
|
chmod 1777 "$ROOTFS_DIR/tmp"
|
||||||
chmod 700 "$ROOTFS_DIR/root"
|
chmod 700 "$ROOTFS_DIR/root"
|
||||||
|
chmod 755 "$ROOTFS_DIR/home/spark"
|
||||||
|
|
||||||
# Create basic config files
|
# Create basic config files
|
||||||
echo "Creating configuration files..."
|
echo "Creating configuration files..."
|
||||||
@@ -40,11 +43,14 @@ EOF
|
|||||||
# /etc/passwd
|
# /etc/passwd
|
||||||
cat > "$ROOTFS_DIR/etc/passwd" << 'EOF'
|
cat > "$ROOTFS_DIR/etc/passwd" << 'EOF'
|
||||||
root:x:0:0:root:/root:/bin/sh
|
root:x:0:0:root:/root:/bin/sh
|
||||||
|
spark:x:1000:1000:SparkOS User:/home/spark:/bin/sh
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# /etc/group
|
# /etc/group
|
||||||
cat > "$ROOTFS_DIR/etc/group" << 'EOF'
|
cat > "$ROOTFS_DIR/etc/group" << 'EOF'
|
||||||
root:x:0:
|
root:x:0:
|
||||||
|
spark:x:1000:
|
||||||
|
sudo:x:27:spark
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# /etc/fstab
|
# /etc/fstab
|
||||||
@@ -66,6 +72,27 @@ nameserver 1.1.1.1
|
|||||||
nameserver 1.0.0.1
|
nameserver 1.0.0.1
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# /etc/sudoers - Sudo configuration
|
||||||
|
cat > "$ROOTFS_DIR/etc/sudoers" << 'EOF'
|
||||||
|
# SparkOS Sudoers Configuration
|
||||||
|
# Allow spark user to run any command without password
|
||||||
|
|
||||||
|
# Default settings
|
||||||
|
Defaults env_reset
|
||||||
|
Defaults secure_path="/bin:/sbin:/usr/bin:/usr/sbin"
|
||||||
|
|
||||||
|
# Root can run anything
|
||||||
|
root ALL=(ALL:ALL) ALL
|
||||||
|
|
||||||
|
# Spark user can run anything without password
|
||||||
|
spark ALL=(ALL:ALL) NOPASSWD: ALL
|
||||||
|
|
||||||
|
# Include sudoers.d directory
|
||||||
|
@includedir /etc/sudoers.d
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod 0440 "$ROOTFS_DIR/etc/sudoers"
|
||||||
|
|
||||||
# /etc/network/interfaces - Wired network configuration
|
# /etc/network/interfaces - Wired network configuration
|
||||||
cat > "$ROOTFS_DIR/etc/network/interfaces" << 'EOF'
|
cat > "$ROOTFS_DIR/etc/network/interfaces" << 'EOF'
|
||||||
# SparkOS Network Configuration
|
# SparkOS Network Configuration
|
||||||
@@ -86,9 +113,15 @@ cat > "$ROOTFS_DIR/etc/profile" << 'EOF'
|
|||||||
|
|
||||||
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
|
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
|
||||||
export PS1='SparkOS:\w\$ '
|
export PS1='SparkOS:\w\$ '
|
||||||
export HOME=/root
|
|
||||||
export TERM=linux
|
export TERM=linux
|
||||||
|
|
||||||
|
# Set HOME based on user
|
||||||
|
if [ "$(id -u)" = "0" ]; then
|
||||||
|
export HOME=/root
|
||||||
|
else
|
||||||
|
export HOME=/home/$(whoami)
|
||||||
|
fi
|
||||||
|
|
||||||
# Welcome message
|
# Welcome message
|
||||||
echo "Welcome to SparkOS!"
|
echo "Welcome to SparkOS!"
|
||||||
echo "Type 'help' for available commands"
|
echo "Type 'help' for available commands"
|
||||||
@@ -111,6 +144,78 @@ export EDITOR=vi
|
|||||||
export PAGER=less
|
export PAGER=less
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# Create .profile for spark user
|
||||||
|
cat > "$ROOTFS_DIR/home/spark/.profile" << 'EOF'
|
||||||
|
# SparkOS User Shell Configuration
|
||||||
|
|
||||||
|
# Set prompt
|
||||||
|
PS1='SparkOS:\w\$ '
|
||||||
|
|
||||||
|
# Aliases
|
||||||
|
alias ll='ls -lah'
|
||||||
|
alias ..='cd ..'
|
||||||
|
|
||||||
|
# Environment
|
||||||
|
export EDITOR=vi
|
||||||
|
export PAGER=less
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Create clone-sparkos.sh script for spark user
|
||||||
|
cat > "$ROOTFS_DIR/home/spark/clone-sparkos.sh" << 'EOF'
|
||||||
|
#!/bin/sh
|
||||||
|
# SparkOS CLI Installation Script
|
||||||
|
# This script clones the SparkOS CLI repository
|
||||||
|
|
||||||
|
echo "SparkOS CLI Installation"
|
||||||
|
echo "========================"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
SPARK_REPO="https://github.com/johndoe6345789/spark-cli.git"
|
||||||
|
INSTALL_DIR="$HOME/spark-cli"
|
||||||
|
|
||||||
|
echo "This script will clone the SparkOS CLI to: $INSTALL_DIR"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if git is available
|
||||||
|
if ! command -v git >/dev/null 2>&1; then
|
||||||
|
echo "Error: git is not installed"
|
||||||
|
echo "Please install git to continue"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if directory already exists
|
||||||
|
if [ -d "$INSTALL_DIR" ]; then
|
||||||
|
echo "Warning: $INSTALL_DIR already exists"
|
||||||
|
echo -n "Do you want to remove it and re-clone? (y/N): "
|
||||||
|
read answer
|
||||||
|
if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
|
||||||
|
rm -rf "$INSTALL_DIR"
|
||||||
|
else
|
||||||
|
echo "Installation cancelled"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clone the repository
|
||||||
|
echo "Cloning spark CLI repository..."
|
||||||
|
if git clone "$SPARK_REPO" "$INSTALL_DIR"; then
|
||||||
|
echo ""
|
||||||
|
echo "SparkOS CLI cloned successfully!"
|
||||||
|
echo ""
|
||||||
|
echo "Next steps:"
|
||||||
|
echo " 1. cd $INSTALL_DIR"
|
||||||
|
echo " 2. Follow the installation instructions in the repository"
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "Error: Failed to clone repository"
|
||||||
|
echo "Please check your network connection and try again"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x "$ROOTFS_DIR/home/spark/clone-sparkos.sh"
|
||||||
|
|
||||||
# Create a simple help script
|
# Create a simple help script
|
||||||
cat > "$ROOTFS_DIR/bin/sparkos-help" << 'EOF'
|
cat > "$ROOTFS_DIR/bin/sparkos-help" << 'EOF'
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
@@ -125,6 +230,14 @@ Default Packages:
|
|||||||
- Git (for installing spark CLI)
|
- Git (for installing spark CLI)
|
||||||
- Sudo (privilege elevation)
|
- Sudo (privilege elevation)
|
||||||
|
|
||||||
|
Default User:
|
||||||
|
Username: spark
|
||||||
|
Home: /home/spark
|
||||||
|
Privileges: Full sudo access (no password required)
|
||||||
|
|
||||||
|
To run commands as root: sudo <command>
|
||||||
|
To become root: sudo -i
|
||||||
|
|
||||||
Available commands:
|
Available commands:
|
||||||
ls, cd, pwd - Navigate filesystem
|
ls, cd, pwd - Navigate filesystem
|
||||||
cat, less - View files
|
cat, less - View files
|
||||||
@@ -144,7 +257,7 @@ Network:
|
|||||||
To test DNS: ping google.com
|
To test DNS: ping google.com
|
||||||
|
|
||||||
Next Steps:
|
Next Steps:
|
||||||
1. Install spark CLI: git clone <spark-repo>
|
1. Install spark CLI: ~/clone-sparkos.sh
|
||||||
2. Use spark CLI to configure WiFi and system
|
2. Use spark CLI to configure WiFi and system
|
||||||
3. Install additional packages as needed
|
3. Install additional packages as needed
|
||||||
|
|
||||||
@@ -213,7 +326,13 @@ Directory Structure:
|
|||||||
/usr - User programs
|
/usr - User programs
|
||||||
/var - Variable data
|
/var - Variable data
|
||||||
/root - Root home directory
|
/root - Root home directory
|
||||||
/home - User home directories
|
/home/spark - Default user home directory
|
||||||
|
|
||||||
|
Default User:
|
||||||
|
Username: spark (UID 1000)
|
||||||
|
Home: /home/spark
|
||||||
|
Sudo: Full access without password
|
||||||
|
Scripts: ~/clone-sparkos.sh for installing spark CLI
|
||||||
|
|
||||||
Network Configuration:
|
Network Configuration:
|
||||||
/etc/network/interfaces - Wired network (DHCP)
|
/etc/network/interfaces - Wired network (DHCP)
|
||||||
@@ -221,10 +340,11 @@ Network Configuration:
|
|||||||
/sbin/init-network - Network initialization script
|
/sbin/init-network - Network initialization script
|
||||||
|
|
||||||
Bootstrap Process:
|
Bootstrap Process:
|
||||||
1. System boots with wired networking (DHCP)
|
1. System boots as 'spark' user with wired networking (DHCP)
|
||||||
2. Use git to clone spark CLI repository
|
2. Run ~/clone-sparkos.sh to install spark CLI
|
||||||
3. Use spark CLI to configure WiFi and system
|
3. Use spark CLI to configure WiFi and system
|
||||||
4. Install additional packages via spark CLI
|
4. Install additional packages via spark CLI
|
||||||
|
5. Use 'sudo' for any root-level operations
|
||||||
|
|
||||||
Note: This is a minimal system. You'll need to populate /bin and /usr/bin
|
Note: This is a minimal system. You'll need to populate /bin and /usr/bin
|
||||||
with actual binaries (busybox, git, sudo) from a proper Linux system
|
with actual binaries (busybox, git, sudo) from a proper Linux system
|
||||||
@@ -234,6 +354,12 @@ EOF
|
|||||||
echo ""
|
echo ""
|
||||||
echo "Root filesystem structure created at: $ROOTFS_DIR"
|
echo "Root filesystem structure created at: $ROOTFS_DIR"
|
||||||
echo ""
|
echo ""
|
||||||
|
echo "User configuration:"
|
||||||
|
echo " - Default user: spark (UID 1000)"
|
||||||
|
echo " - Home directory: /home/spark"
|
||||||
|
echo " - Sudo access: Enabled (no password required)"
|
||||||
|
echo " - Clone script: /home/spark/clone-sparkos.sh"
|
||||||
|
echo ""
|
||||||
echo "Network configuration:"
|
echo "Network configuration:"
|
||||||
echo " - Wired networking (DHCP) configured for eth0"
|
echo " - Wired networking (DHCP) configured for eth0"
|
||||||
echo " - DNS: 8.8.8.8, 1.1.1.1, 8.8.4.4, 1.0.0.1"
|
echo " - DNS: 8.8.8.8, 1.1.1.1, 8.8.4.4, 1.0.0.1"
|
||||||
|
|||||||
24
src/init.c
24
src/init.c
@@ -28,16 +28,34 @@ static void spawn_shell() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pid == 0) {
|
if (pid == 0) {
|
||||||
// Child process - exec shell
|
// Child process - exec shell as spark user (uid 1000, gid 1000)
|
||||||
|
|
||||||
|
// Set user and group IDs to spark user
|
||||||
|
if (setgid(1000) != 0) {
|
||||||
|
perror("setgid failed");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if (setuid(1000) != 0) {
|
||||||
|
perror("setuid failed");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
char *argv[] = {"/bin/sh", "-l", NULL};
|
char *argv[] = {"/bin/sh", "-l", NULL};
|
||||||
char *envp[] = {
|
char *envp[] = {
|
||||||
"HOME=/root",
|
"HOME=/home/spark",
|
||||||
"PATH=/bin:/sbin:/usr/bin:/usr/sbin",
|
"PATH=/bin:/sbin:/usr/bin:/usr/sbin",
|
||||||
"TERM=linux",
|
"TERM=linux",
|
||||||
"PS1=SparkOS# ",
|
"PS1=SparkOS$ ",
|
||||||
|
"USER=spark",
|
||||||
|
"LOGNAME=spark",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Change to home directory
|
||||||
|
if (chdir("/home/spark") != 0) {
|
||||||
|
perror("chdir failed");
|
||||||
|
}
|
||||||
|
|
||||||
execve("/bin/sh", argv, envp);
|
execve("/bin/sh", argv, envp);
|
||||||
|
|
||||||
perror("failed to exec shell");
|
perror("failed to exec shell");
|
||||||
|
|||||||
Reference in New Issue
Block a user