Linux系统用户账号权限 基础概念与操作指南
- Linux笔记
- 2天前
- 13热度
- 0评论
敲了这么多年代码,对Linux 账号权限管理一直是一知半解,是时候打通一下任督二脉了。
入门
Linux 账号权限管理是一个复杂的主题,涉及用户和组的管理、文件和目录的权限设置、以及更高级的安全策略。
1.用户和组
- 用户(User):每个用户都有一个唯一的用户名(UID)和密码。
- 组(Group):用户可以属于一个或多个组,组可以拥有多个用户。
查看用户信息:
cat /etc/passwd
查看组信息:
cat /etc/group
cat 命令用于查看文件内容。/etc/passwd 文件包含用户信息,/etc/group 文件包含组信息。
创建用户:
sudo useradd username
sudo passwd username
- useradd 命令用于创建一个新的用户账户。sudo 用于以超级用户(root)的权限执行该命令,因为创建用户通常需要管理员权限。
- passwd 命令用于设置或更改用户的密码。sudo 用于以超级用户(root)的权限执行该命令,因为设置或更改用户密码通常需要管理员权限。
详细说明
- 用户信息存储位置:新用户的信息会被存储在 /etc/passwd 文件中。
- 用户主目录:默认情况下,useradd 会为新用户创建一个主目录(通常是 /home/username)。
- 默认 Shell:默认情况下,新用户的登录 Shell 会被设置为 /bin/bash 或系统默认的 Shell。
- 用户组:新用户会被添加到一个默认的用户组中,通常是 users 或 newuser。
创建组:
sudo groupadd groupname
将用户添加到组:
sudo usermod -aG groupname username
2.文件和目录权限
查看文件权限:
ls -l filename
修改文件权限:
sudo chmod 755 filename
修改文件所有者和组:
sudo chown username:groupname filename
pwd(Print Working Directory)用来显示当前工作目录
3.登录和切换用户
登录用户:
su - username
切换用户:
su username
高级权限管理
高级权限管理在 Linux 系统中涉及更细致和复杂的权限控制机制,以确保系统的安全性和灵活性。
1.使用 ACL(Access Control List)
设置 ACL:
sudo setfacl -m u:username:rwx filename
sudo setfacl -m g:groupname:rwx filename
- setfacl 命令用于设置文件或目录的访问控制列表(ACL)。-m 选项用于修改 ACL,u:username:rwx 表示用户 username 有读写执行权限,g:groupname:rwx 表示组 groupname 有读写执行权限。
查看 ACL:
sudo getfacl filename
- getfacl 命令用于查看文件或目录的访问控制列表(ACL)。
sudo命令允许授权的用户以另一个用户的身份(通常是超级用户root)运行命令,sudo是“superuser do”的缩写
2.管理 Sudo 权限
编辑 sudoers 文件:
sudo visudo
- visudo 命令用于安全地编辑 /etc/sudoers 文件,确保语法正确。编辑后保存文件,系统会自动检查语法。
添加用户到 sudo 组:
sudo usermod -aG sudo username
- usermod 是一个在类 Unix 系统中用于修改用户账户属性的命令。它提供了多种选项,可以修改用户的用户名、用户ID、用户组、登录Shell等。
3.限制用户登录
禁用用户登录:
sudo usermod -s /sbin/nologin username
4.使用 PAM 模块
配置密码策略:
sudo nano /etc/pam.d/common-password
- nano 是一个简单的文本编辑器,用于编辑文件。/etc/pam.d/common-password 文件的主要作用是定义系统在处理用户密码相关操作时的行为,例如设置密码的复杂性要求、密码的更新策略、密码的存储方式等。
添加或修改:
password requisite pam_pwquality.so retry=3 minlen=8 difok=3
安全策略和监控
在Linux系统中,安全策略和监控是确保系统安全、稳定运行的关键环节。
1.使用 SSH 密钥认证
生成 SSH 密钥:
ssh-keygen -t rsa -b 4096
- ssh-keygen 用于生成 SSH 密钥对,包括公钥和私钥。默认情况下,生成的密钥对会存储在用户的 ~/.ssh 目录中。
分发公钥:
ssh-copy-id username@server_ip
- ssh-copy-id 用于将本地用户的公钥复制到远程服务器的 ~/.ssh/authorized_keys 文件中,从而实现无密码登录。
ssh-copy-id -i ~/.ssh/id_rsa.pub user@localhost
- -i ~/.ssh/id_rsa.pub:指定要复制的公钥文件。
- user@localhost:目标用户和主机名(本机)。
ssh-copy-id 通常不需要 root 权限来执行,但可能需要对目标用户的主目录和 .ssh 目录进行写操作的权限
禁用密码登录:
sudo nano /etc/ssh/sshd_config
# 设置
PasswordAuthentication no
ChallengeResponseAuthentication no
2.定期检查用户活动
查看登录记录:
last
- last 命令用于查看用户的登录记录,包括登录时间、登录 IP 等信息。
查看用户权限:
groups username
实战
1.创建一个安全的开发环境
1. 创建开发用户
sudo useradd devuser
sudo passwd devuser
2. 创建开发目录并设置权限
sudo mkdir -p /data/dev
sudo chown devuser:devuser /data/dev
sudo chmod 755 /data/dev
3. 设置 SSH 密钥认证
ssh-keygen -t rsa -b 4096
ssh-copy-id devuser@your_server_ip
4. 禁用密码登录
sudo nano /etc/ssh/sshd_config
# 设置
PasswordAuthentication no
ChallengeResponseAuthentication no