Linux系统用户账号权限 基础概念与操作指南

敲了这么多年代码,对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