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:
copilot-swe-agent[bot]
2025-12-28 15:55:25 +00:00
parent 5f366534aa
commit e1acbfc231
10 changed files with 250 additions and 12 deletions

1
.gitignore vendored
View File

@@ -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

View File

@@ -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

View File

@@ -1 +1,3 @@
root:x:0: root:x:0:
spark:x:1000:
sudo:x:27:spark

View File

@@ -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

View File

@@ -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
View 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

View 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

View 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

View File

@@ -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"

View File

@@ -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");