sliplogin [选项] 用户名
| 选项 | 说明 |
|---|---|
-p 协议 |
指定SLIP协议变体:cslip, slip, adaptive |
-v |
详细模式,显示调试信息 |
-d |
启用调试输出 |
-c |
启用压缩的SLIP(CSLIP) |
-s 速度 |
设置串行端口速度 |
-m MTU |
设置最大传输单元(MTU) |
-l 线路 |
指定串行线路设备 |
SLIP(Serial Line Internet Protocol)是一种在串行线路上传输IP数据报的简单协议:
SLIP协议数据帧格式:END | IP数据报 | END,其中END字符(0xC0)作为帧边界
为指定用户启用SLIP连接:
# 在/etc/passwd中添加SLIP用户
# 格式:sliplogin:x:1002:1002:SLIP Login:/tmp:/usr/sbin/sliplogin
# 启动sliplogin
sliplogin slipuser
这通常在getty或类似的登录管理器调用。
启用压缩的SLIP协议以提高性能:
# 使用CSLIP协议
sliplogin -c slipuser
# 或指定协议变体
sliplogin -p cslip slipuser
使用详细模式进行调试:
# 启用详细输出和调试
sliplogin -v -d slipuser
# 指定串行端口和速度
sliplogin -v -l /dev/ttyS0 -s 115200 slipuser
这对于故障排除非常有用。
配置SLIP连接的特定参数:
# 设置MTU(最大传输单元)
sliplogin -m 1006 slipuser
# 组合多个选项
sliplogin -p adaptive -s 57600 -m 1500 -v slipuser
自适应SLIP(adaptive)可以根据需要自动切换普通SLIP和CSLIP。
在系统中配置SLIP用户:
# 1. 添加SLIP用户到/etc/passwd
sudo useradd -M -s /usr/sbin/sliplogin -d /tmp slipuser
# 2. 设置密码(如果需要)
sudo passwd slipuser
# 3. 或者在/etc/passwd中手动添加
# slipuser:x:1002:1002:SLIP Login:/tmp:/usr/sbin/sliplogin
# 4. 检查用户配置
grep slipuser /etc/passwd
创建SLIP配置文件:
# 创建/etc/slip.hosts文件
sudo nano /etc/slip.hosts
# 内容示例:
# slipuser 192.168.100.1 192.168.100.2 255.255.255.0 normal -mtu 1500
# 格式:用户名 本地IP 远程IP 网络掩码 模式 其他选项
# 创建/etc/slip.login脚本
sudo nano /etc/slip.login
# 内容示例:
#!/bin/sh
# 简单的SLIP登录脚本
/sbin/sliplogin $1
# 设置执行权限
sudo chmod +x /etc/slip.login
配置串行端口以支持SLIP:
# 1. 配置串行端口
sudo stty -F /dev/ttyS0 115200 cs8 -parenb -cstopb
# 2. 使用getty管理串行端口登录
# 在/etc/inittab中添加(SysV init系统):
# S0:12345:respawn:/sbin/getty -L 115200 ttyS0 vt100
# 对于systemd系统,创建服务:
sudo nano /etc/systemd/system/serial-getty@ttyS0.service
# 3. 启动串行服务
sudo systemctl start serial-getty@ttyS0.service
配置传统的SLIP拨号服务器:
#!/bin/bash
# 配置SLIP拨号服务器脚本
# 1. 安装必要软件
sudo apt-get install slattach sliplogin mgetty
# 2. 配置调制解调器
sudo cat > /etc/mgetty+sendfax/mgetty.config << 'EOF'
port ttyS0
speed 115200
data-only y
modem-type usr
rings 1
answer-time 30
EOF
# 3. 配置SLIP
sudo cat > /etc/slip.hosts << 'EOF'
# 用户名 本地IP 远程IP 网络掩码 模式
dialuser 192.168.10.1 192.168.10.100 255.255.255.0 normal
EOF
# 4. 创建登录脚本
sudo cat > /etc/slip.login << 'EOF'
#!/bin/sh
# SLIP登录脚本
REMOTE_IP="$2"
LOCAL_IP="$3"
NETMASK="$4"
MTU="$6"
# 设置SLIP接口
/sbin/sliplogin -v -p adaptive "$1"
# 配置网络
ifconfig sl0 $LOCAL_IP pointopoint $REMOTE_IP netmask $NETMASK mtu $MTU
route add $REMOTE_IP gw $LOCAL_IP
EOF
sudo chmod +x /etc/slip.login
echo "SLIP拨号服务器配置完成"
通过串口连接嵌入式设备:
#!/bin/bash
# 通过SLIP连接嵌入式Linux设备
# 1. 配置串行端口
configure_serial_port() {
local port=$1
local speed=$2
echo "配置串行端口 $port 速度为 $speed"
sudo stty -F $port $speed cs8 -parenb -cstopb cread clocal
sudo chmod 666 $port
}
# 2. 启动SLIP连接
start_slip_connection() {
local port=$1
local local_ip=$2
local remote_ip=$3
echo "启动SLIP连接"
echo "端口: $port"
echo "本地IP: $local_ip"
echo "远程IP: $remote_ip"
# 使用slattach附加串行端口到网络接口
sudo slattach -p slip -s 115200 -L $port &
SL_PID=$!
sleep 2
# 配置网络接口
sudo ifconfig sl0 $local_ip pointopoint $remote_ip up
sudo route add $remote_ip gw $local_ip
echo "SLIP连接已建立,进程ID: $SL_PID"
}
# 3. 测试连接
test_connection() {
local remote_ip=$1
echo "测试连接..."
ping -c 4 $remote_ip
if [ $? -eq 0 ]; then
echo "连接成功"
return 0
else
echo "连接失败"
return 1
fi
}
# 使用示例
configure_serial_port "/dev/ttyUSB0" "115200"
start_slip_connection "/dev/ttyUSB0" "192.168.1.1" "192.168.1.2"
test_connection "192.168.1.2"
| 特性 | SLIP | PPP | 说明 |
|---|---|---|---|
| 协议复杂度 | 简单 | 复杂 | SLIP设计简单,PPP功能更丰富 |
| 错误检测 | 无 | 有 | PPP包含错误检测和纠正 |
| 认证支持 | 无(依赖外部) | 有(PAP/CHAP) | PPP内置认证协议 |
| 多协议支持 | 仅IP | 多协议 | PPP支持IP、IPX等多种协议 |
| 压缩支持 | CSLIP(有限) | 多种压缩算法 | PPP压缩更高效 |
| 配置协商 | 静态配置 | 动态协商 | PPP可协商IP地址等参数 |
| 现代使用 | 基本淘汰 | 广泛使用 | PPP是拨号和串行连接的标准 |
推荐迁移到PPP的原因:
基本迁移步骤:
# 1. 安装PPP软件包
sudo apt-get install ppp # Debian/Ubuntu
sudo yum install ppp # RHEL/CentOS
# 2. 配置PPP服务器(/etc/ppp/options)
sudo nano /etc/ppp/options
# 3. 配置PPP认证(/etc/ppp/pap-secrets或/etc/ppp/chap-secrets)
sudo nano /etc/ppp/pap-secrets
# 4. 创建PPP连接脚本
sudo nano /etc/ppp/peers/dialup
# 5. 启动PPP连接
sudo pppd call dialup
# 6. 验证连接
ifconfig ppp0
ping -c 4 远程主机
sliplogin:
slattach:
使用场景:
# sliplogin示例(多用户拨号)
# 在/etc/passwd中配置用户shell为sliplogin
dialuser:x:1001:1001:,,,:/tmp:/usr/sbin/sliplogin
# slattach示例(简单连接)
sudo slattach -p slip -s 115200 /dev/ttyS0
sudo ifconfig sl0 192.168.1.1 pointopoint 192.168.1.2 up
选择建议:如果需要用户认证和授权,使用sliplogin;如果只是简单的点对点连接,使用slattach。
调试sliplogin连接的步骤:
1. 启用详细日志
# 使用详细模式启动sliplogin
sliplogin -v -d slipuser 2>&1 | tee /tmp/sliplogin.log
# 或者修改/etc/slip.login脚本
#!/bin/sh
exec /usr/sbin/sliplogin -v "$@" 2>&1 | logger -t sliplogin
2. 检查系统日志
# 查看系统日志中的sliplogin条目
sudo grep sliplogin /var/log/auth.log
sudo grep sliplogin /var/log/syslog
sudo journalctl -u sliplogin # systemd系统
3. 测试串行连接
# 测试串行端口通信
sudo stty -F /dev/ttyS0 115200
echo "TEST" > /dev/ttyS0
# 使用minicom或screen测试串口
sudo apt-get install minicom
sudo minicom -D /dev/ttyS0 -b 115200
4. 检查网络配置
# 检查SLIP接口是否创建
ifconfig sl0
ip link show sl0
# 检查路由表
route -n
ip route show
# 检查防火墙设置
sudo iptables -L -n | grep sl0
5. 常见问题及解决方法
在现代Linux系统中的支持情况:
1. 软件包可用性
# 检查是否可用
apt-cache search sliplogin # Debian/Ubuntu
yum search sliplogin # RHEL/CentOS
dnf search sliplogin # Fedora
# 安装命令
sudo apt-get install sliplogin # Debian/Ubuntu
sudo yum install sliplogin # RHEL/CentOS(可能不在默认仓库)
2. 内核支持
# 检查内核是否支持SLIP
grep SLIP /usr/src/linux/.config # 如果编译了内核
grep SLIP /boot/config-$(uname -r)
# 加载SLIP内核模块(如果需要)
sudo modprobe slip
lsmod | grep slip
3. 现代替代方案
4. 遗留系统支持
一些现代Linux发行版仍然包含sliplogin,主要是为了:
建议:对于新项目,推荐使用PPP或其他现代协议。只有在需要与遗留设备通信时才考虑SLIP。
虽然SLIP本身安全性有限,但可以采取以下措施提高安全性:
1. 网络隔离
# 使用独立的网络段
# 在/etc/slip.hosts中使用私有IP地址
slipuser 10.0.100.1 10.0.100.2 255.255.255.0 normal
# 配置防火墙隔离
sudo iptables -A FORWARD -i sl0 -j DROP # 禁止SLIP接口转发
sudo iptables -A INPUT -i sl0 -j DROP # 禁止从SLIP接口输入
2. 认证加强
# 使用强密码
sudo passwd slipuser
# 定期更换密码
echo "slipuser:新密码" | sudo chpasswd
# 限制登录尝试
# 配置PAM限制(/etc/pam.d/login)
3. 日志监控
# 启用详细日志
# 修改/etc/slip.login
#!/bin/sh
logger -t sliplogin "用户 $1 从 $TTY 登录"
exec /usr/sbin/sliplogin -v "$@"
# 监控日志文件
sudo tail -f /var/log/auth.log | grep sliplogin
4. 访问控制
# 限制串行端口访问
sudo chmod 600 /dev/ttyS0
sudo chown root:dialout /dev/ttyS0
# 使用组权限管理
sudo groupadd slipusers
sudo usermod -a -G slipusers slipuser
sudo chgrp slipusers /usr/sbin/sliplogin
sudo chmod 4750 /usr/sbin/sliplogin
5. 定期审计
#!/bin/bash
# SLIP安全审计脚本
echo "=== SLIP安全审计 $(date) ==="
# 检查活动连接
echo "活动SLIP连接:"
ifconfig | grep -A 2 sl
# 检查用户配置
echo "SLIP用户配置:"
grep sliplogin /etc/passwd
# 检查配置文件权限
echo "配置文件权限:"
ls -la /etc/slip.hosts /etc/slip.login 2>/dev/null
# 检查日志
echo "最近登录尝试:"
grep sliplogin /var/log/auth.log | tail -5
最佳实践:如果可能,迁移到PPP并使用其内置的加密和认证功能。
#!/bin/bash
# SLIP系统维护脚本
MAINT_LOG="/var/log/slip_maintenance.log"
log_message() {
echo "[$(date)] $1" >> $MAINT_LOG
}
check_slip_status() {
echo "=== SLIP状态检查 ==="
# 检查服务状态
if systemctl is-active --quiet sliplogin; then
echo "sliplogin服务: 运行中"
else
echo "sliplogin服务: 停止"
fi
# 检查网络接口
if ifconfig | grep -q sl0; then
echo "SLIP接口: 存在"
ifconfig sl0
else
echo "SLIP接口: 不存在"
fi
# 检查连接
netstat -an | grep :slip
}
perform_maintenance() {
echo "=== 执行维护任务 ==="
# 重启服务
sudo systemctl restart sliplogin 2>/dev/null
# 清理日志
sudo find /var/log -name "*sliplogin*" -type f -mtime +30 -delete
# 备份配置
sudo tar -czf /backup/slip_config_$(date +%Y%m%d).tar.gz \
/etc/slip.hosts /etc/slip.login 2>/dev/null
}
# 主程序
log_message "开始SLIP维护"
check_slip_status >> $MAINT_LOG
perform_maintenance >> $MAINT_LOG
log_message "SLIP维护完成"