Linux系统管理指南
目录
用户管理
在 Linux 系统中创建一个新用户并确保其拥有独立的 /home 目录和运行环境是一个非常标准的操作。
通常有两种主要方法:使用友好的 adduser 命令(推荐)或底层的 useradd 命令。
方法一:使用 adduser 命令(最简单,推荐)
在 Ubuntu、Debian 等系统上,adduser 是一个交互式脚本,会自动为你创建家目录、设置 Shell 并引导你设置密码。
-
执行创建命令:
Bash
sudo adduser username(将
username替换为你想要的名字) -
按照提示操作:
- 系统会要求你输入并确认密码。
- 会询问一些用户信息(全名、房间号等),这些可以按 Enter 跳过。
- 最后输入 Y 确认信息正确。
优点: 自动创建 /home/username 目录,并从 /etc/skel 复制默认配置文件(如 .bashrc),确保环境独立且立即可用。
方法二:使用 useradd 命令(通用,更底层)
如果你使用的是 CentOS、RHEL 或习惯使用底层工具,可以使用 useradd。注意: 默认情况下它可能不会创建家目录,所以需要带上参数。
-
执行创建命令:
Bash
sudo useradd -m -s /bin/bash username-m:强制创建用户的家目录/home/username。-s /bin/bash:指定用户的默认 Shell(通常选 bash)。
-
设置密码:
Bash
sudo passwd username输入两次密码即可。
确保“独立性”与安全性
虽然新用户已经有了独立的目录,但为了确保该账号与其他账号完全隔离(即其他普通用户无法进入该目录),你可以调整权限:
1. 限制目录访问权限
默认情况下,有些系统的 /home 目录权限允许其他用户读取。如果你想让该账号完全独立私有,可以执行:
Bash
sudo chmod 700 /home/username
这样,除了该用户本人和 root,任何人都无法进入或查看该目录下的文件。
2. 赋予 sudo 权限(可选)
如果你希望这个独立账号也能执行管理任务,可以将其加入 sudo 组:
- Ubuntu/Debian:
sudo usermod -aG sudo username - CentOS/RHEL:
sudo usermod -aG wheel username
验证新用户
你可以尝试切换到新用户来测试环境是否配置成功:
Bash
su - username
输入密码后,使用 pwd 查看是否在 /home/username 目录下,使用 ls -a 查看是否有独立的配置文件(如 .profile)。
您是想为这个账号配置特定的软件运行环境(如独立的 Python 或 Node.js 环境),还是只需要基础的系统账号隔离?
1. 创建新用户
基本创建用户
# 创建新用户
sudo useradd username
# 创建用户并自动创建家目录
sudo useradd -m username
# 创建用户并指定家目录
sudo useradd -m -d /home/customdir username
# 创建用户并指定shell
sudo useradd -m -s /bin/bash username
# 创建用户并添加注释
sudo useradd -m -c "User Full Name" username
创建用户并设置密码
# 创建用户后设置密码
sudo passwd username
# 一次性创建用户并设置密码
sudo useradd -m username && sudo passwd username
创建系统用户(用于运行服务)
# 创建无登录权限的系统用户
sudo useradd -r -s /usr/sbin/nologin servicename
2. 删除用户
# 仅删除用户账号
sudo userdel username
# 删除用户及其家目录
sudo userdel -r username
# 强制删除(即使用户已登录)
sudo userdel -f username
3. 修改用户信息
# 修改用户名
sudo usermod -l newname oldname
# 修改用户家目录
sudo usermod -d /new/home/path -m username
# 修改用户shell
sudo usermod -s /bin/zsh username
# 锁定用户账号
sudo usermod -L username
# 解锁用户账号
sudo usermod -U username
# 修改用户UID
sudo usermod -u 1500 username
# 设置账号过期时间
sudo usermod -e 2024-12-31 username
4. 查看用户信息
# 查看当前登录用户
whoami
# 查看所有用户
cat /etc/passwd
# 查看用户详细信息
id username
# 查看用户所属组
groups username
# 查看最近登录用户
last
# 查看当前登录的所有用户
who
w
# 查看用户密码信息
sudo chage -l username
用户权限管理
1. 文件和目录权限
权限表示方式
rwx rwx rwx
│ │ │
│ │ └─── 其他用户权限
│ └─────── 组权限
└─────────── 所有者权限
r = 读权限 (4)
w = 写权限 (2)
x = 执行权限 (1)
修改文件权限
# 使用符号模式
chmod u+x file.sh # 给所有者添加执行权限
chmod g-w file.txt # 移除组的写权限
chmod o=r file.txt # 设置其他用户只有读权限
chmod a+r file.txt # 给所有用户添加读权限
# 使用数字模式
chmod 755 file.sh # rwxr-xr-x
chmod 644 file.txt # rw-r--r--
chmod 600 private.key # rw-------
chmod 777 public.txt # rwxrwxrwx(不推荐)
# 递归修改目录权限
chmod -R 755 /path/to/directory
修改文件所有者
# 修改文件所有者
sudo chown username file.txt
# 修改文件所有者和组
sudo chown username:groupname file.txt
# 递归修改目录所有者
sudo chown -R username:groupname /path/to/directory
# 仅修改组
sudo chgrp groupname file.txt
2. sudo权限管理
添加用户到sudo组
# Ubuntu/Debian系统
sudo usermod -aG sudo username
# CentOS/RHEL系统
sudo usermod -aG wheel username
# 验证sudo权限
sudo -l -U username
编辑sudoers文件
# 使用visudo安全编辑sudoers(推荐)
sudo visudo
sudoers配置示例
# 给用户完全sudo权限
username ALL=(ALL:ALL) ALL
# 给用户无需密码的sudo权限
username ALL=(ALL) NOPASSWD: ALL
# 限制用户只能执行特定命令
username ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl
# 给组sudo权限
%groupname ALL=(ALL:ALL) ALL
# 允许用户以特定用户身份运行命令
username ALL=(root) /usr/bin/service
3. 特殊权限
# SUID (Set User ID) - 以文件所有者身份执行
chmod u+s file
chmod 4755 file
# SGID (Set Group ID) - 以文件所属组身份执行
chmod g+s file
chmod 2755 file
# Sticky Bit - 只有所有者可以删除文件(常用于/tmp)
chmod +t directory
chmod 1777 directory
组管理
1. 创建和删除组
# 创建新组
sudo groupadd groupname
# 创建指定GID的组
sudo groupadd -g 1500 groupname
# 删除组
sudo groupdel groupname
2. 管理组成员
# 添加用户到组
sudo usermod -aG groupname username
# 添加用户到多个组
sudo usermod -aG group1,group2,group3 username
# 设置用户的主组
sudo usermod -g primarygroup username
# 从组中移除用户(需要重新设置用户的组列表)
sudo gpasswd -d username groupname
# 查看组成员
getent group groupname
3. 查看组信息
# 查看所有组
cat /etc/group
# 查看当前用户所属组
groups
# 查看指定用户所属组
groups username
# 查看组详细信息
getent group groupname
系统管控
1. 进程管理
# 查看进程
ps aux # 查看所有进程
ps -ef # 查看所有进程(另一种格式)
pstree # 树状显示进程
top # 实时查看进程
htop # 增强版top(需安装)
# 查找特定进程
ps aux | grep processname
pgrep processname
# 终止进程
kill PID # 正常终止
kill -9 PID # 强制终止
killall processname # 终止所有同名进程
pkill processname # 通过名称终止进程
# 后台运行进程
command & # 后台运行
nohup command & # 后台运行且不受终端关闭影响
# 查看后台任务
jobs
fg %1 # 将后台任务调到前台
bg %1 # 继续运行后台任务
2. 服务管理(systemd)
# 启动服务
sudo systemctl start servicename
# 停止服务
sudo systemctl stop servicename
# 重启服务
sudo systemctl restart servicename
# 重新加载配置
sudo systemctl reload servicename
# 查看服务状态
sudo systemctl status servicename
# 开机自启
sudo systemctl enable servicename
# 禁用开机自启
sudo systemctl disable servicename
# 查看所有服务
systemctl list-units --type=service
# 查看启动失败的服务
systemctl --failed
3. 系统监控
# CPU和内存监控
top # 实时监控
htop # 增强版监控
vmstat 1 # 每秒更新系统状态
# 内存使用
free -h # 查看内存使用
cat /proc/meminfo # 详细内存信息
# 磁盘使用
df -h # 查看磁盘空间
du -sh /path # 查看目录大小
du -h --max-depth=1 # 查看当前目录各子目录大小
# 网络监控
netstat -tuln # 查看监听端口
ss -tuln # 现代版netstat
iftop # 实时网络流量(需安装)
nethogs # 按进程显示网络使用(需安装)
# 系统负载
uptime # 系统运行时间和负载
w # 查看登录用户和负载
4. 日志管理
# 查看系统日志
sudo journalctl # 查看所有日志
sudo journalctl -f # 实时查看日志
sudo journalctl -u servicename # 查看特定服务日志
sudo journalctl --since "2024-01-01" # 查看指定日期后的日志
sudo journalctl --since today # 查看今天的日志
# 传统日志文件
tail -f /var/log/syslog # 实时查看系统日志
tail -f /var/log/auth.log # 实时查看认证日志
less /var/log/messages # 查看消息日志
# 清理日志
sudo journalctl --vacuum-time=7d # 清理7天前的日志
sudo journalctl --vacuum-size=1G # 保留最多1G日志
5. 防火墙管理
UFW(Ubuntu/Debian)
# 启用防火墙
sudo ufw enable
# 禁用防火墙
sudo ufw disable
# 查看状态
sudo ufw status verbose
# 允许端口
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 拒绝端口
sudo ufw deny 23/tcp
# 允许特定IP访问
sudo ufw allow from 192.168.1.100
# 删除规则
sudo ufw delete allow 80/tcp
# 重置防火墙
sudo ufw reset
firewalld(CentOS/RHEL)
# 启动防火墙
sudo systemctl start firewalld
# 查看状态
sudo firewall-cmd --state
# 允许服务
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 允许端口
sudo firewall-cmd --permanent --add-port=8080/tcp
# 重新加载配置
sudo firewall-cmd --reload
# 查看规则
sudo firewall-cmd --list-all
6. 定时任务(Cron)
# 编辑当前用户的crontab
crontab -e
# 查看当前用户的crontab
crontab -l
# 删除当前用户的crontab
crontab -r
# 编辑其他用户的crontab(需要root权限)
sudo crontab -u username -e
Crontab格式
# 分 时 日 月 周 命令
# * * * * * command
# 示例:
0 2 * * * /path/to/backup.sh # 每天凌晨2点执行
*/5 * * * * /path/to/script.sh # 每5分钟执行
0 0 * * 0 /path/to/weekly.sh # 每周日午夜执行
0 9-17 * * 1-5 /path/to/work.sh # 工作日9点到17点每小时执行
7. 系统更新和维护
Ubuntu/Debian
# 更新软件包列表
sudo apt update
# 升级已安装的软件包
sudo apt upgrade
# 升级系统(包括内核)
sudo apt full-upgrade
# 自动清理不需要的包
sudo apt autoremove
# 清理下载的软件包缓存
sudo apt clean
CentOS/RHEL
# 更新软件包
sudo yum update
# 或使用dnf(新版本)
sudo dnf update
# 清理缓存
sudo yum clean all
8. 系统资源限制
# 查看当前限制
ulimit -a
# 设置最大打开文件数
ulimit -n 4096
# 编辑系统限制文件
sudo vim /etc/security/limits.conf
# 限制配置示例:
# username soft nofile 4096
# username hard nofile 8192
# username soft nproc 2048
# username hard nproc 4096
安全最佳实践
1. 用户安全
# 强制用户下次登录时更改密码
sudo passwd -e username
# 设置密码策略
sudo vim /etc/login.defs
# 设置密码最小长度(在/etc/security/pwquality.conf)
sudo vim /etc/security/pwquality.conf
# minlen = 12
# dcredit = -1 # 至少一个数字
# ucredit = -1 # 至少一个大写字母
# lcredit = -1 # 至少一个小写字母
# ocredit = -1 # 至少一个特殊字符
# 禁止root直接SSH登录
sudo vim /etc/ssh/sshd_config
# PermitRootLogin no
sudo systemctl restart sshd
2. SSH安全
# 修改SSH配置
sudo vim /etc/ssh/sshd_config
# 推荐配置:
# Port 2222 # 修改默认端口
# PermitRootLogin no # 禁止root登录
# PasswordAuthentication no # 禁用密码登录(使用密钥)
# PubkeyAuthentication yes # 启用密钥认证
# MaxAuthTries 3 # 最大认证尝试次数
# ClientAliveInterval 300 # 客户端保活间隔
# ClientAliveCountMax 2 # 最大保活次数
# 重启SSH服务
sudo systemctl restart sshd
# 设置SSH密钥认证
ssh-keygen -t rsa -b 4096
ssh-copy-id -i ~/.ssh/id_rsa.pub username@server
3. 系统审计
# 安装auditd
sudo apt install auditd # Ubuntu/Debian
sudo yum install audit # CentOS/RHEL
# 启动审计服务
sudo systemctl start auditd
sudo systemctl enable auditd
# 查看审计日志
sudo ausearch -m USER_LOGIN
sudo ausearch -ua username
4. 常用安全检查
# 检查是否有空密码账户
sudo awk -F: '($2 == "") {print $1}' /etc/shadow
# 查看最近登录失败的记录
sudo lastb
# 检查可疑进程
ps aux | grep -E 'bash|sh|python|perl'
# 检查监听端口
sudo netstat -tulpn
# 检查计划任务
sudo crontab -l -u root
ls -la /etc/cron.*
5. 备份重要文件
# 备份用户信息
sudo cp /etc/passwd /etc/passwd.bak
sudo cp /etc/shadow /etc/shadow.bak
sudo cp /etc/group /etc/group.bak
# 备份sudo配置
sudo cp /etc/sudoers /etc/sudoers.bak
# 创建系统备份脚本
#!/bin/bash
BACKUP_DIR="/backup/system"
DATE=$(date +%Y%m%d)
tar -czf $BACKUP_DIR/etc-$DATE.tar.gz /etc
tar -czf $BACKUP_DIR/home-$DATE.tar.gz /home
快速参考
常用命令速查
| 功能 | 命令 |
|---|---|
| 创建用户 | sudo useradd -m username |
| 设置密码 | sudo passwd username |
| 删除用户 | sudo userdel -r username |
| 添加sudo权限 | sudo usermod -aG sudo username |
| 修改文件权限 | chmod 755 file |
| 修改文件所有者 | sudo chown user:group file |
| 查看进程 | ps aux 或 top |
| 启动服务 | sudo systemctl start service |
| 查看日志 | sudo journalctl -f |
| 查看磁盘 | df -h |
| 查看内存 | free -h |
| 查看端口 | sudo netstat -tulpn |
注意事项
- 使用sudo谨慎操作:所有系统级别的操作都需要root权限,请确保理解命令的作用
- 备份重要数据:在进行重大系统更改前,请先备份重要配置文件
- 测试环境:建议先在测试环境验证命令,再在生产环境执行
- 日志记录:重要操作建议记录日志,便于问题追溯
- 权限最小化:遵循最小权限原则,不要随意给予过高权限
- 定期更新:保持系统和软件包及时更新,修补安全漏洞
- 密码策略:使用强密码,定期更换,不要重复使用
- 监控审计:定期检查系统日志和用户活动
留言