在Linux系统中,用户管理和权限控制是保证系统安全和资源有效利用的基础。用户管理涉及到创建用户、删除用户、修改用户属性、用户组管理等内容。
在Linux系统中,所有操作都与用户相关联。用户可以是人、进程或系统程序,操作系统通过用户身份来进行权限和资源的分配。Linux系统将用户分为以下几类:
root
用户,拥有系统的最高权限,能够执行所有操作。nobody
、www-data
等。每个用户在Linux系统中有唯一的用户ID(UID
),通过UID
来识别和管理用户。
root
用户的UID
为0,普通用户的UID
从1000或500开始(视系统配置而定)。UID
。在Linux中,useradd
命令用于创建新的用户账户。基本语法如下:
useradd [选项] 用户名
$ sudo useradd newuser
默认情况下,useradd
命令会在/etc/passwd
中为用户生成基本的信息,并在/home
目录下创建用户的主目录/home/newuser
。但请注意,默认情况下,新创建的用户不会有密码,用户不能登录,除非为其设置密码。
使用passwd
命令为用户设置密码:
$ sudo passwd newuser
系统会提示输入并确认密码。密码设置完成后,用户newuser
即可登录。
useradd
命令有一些常用选项可以用于自定义用户的属性:
-m
:为用户创建主目录。-d
:指定用户的主目录。-s
:指定用户的默认shell。-g
:指定用户的主组。-G
:为用户指定附加组。-u
:指定用户的UID。示例:
$ sudo useradd -m -d /custom/home/newuser -s /bin/bash -g users -G sudo newuser
此命令为用户newuser
指定了主目录/custom/home/newuser
、登录shell为/bin/bash
,并将其添加到主组users
及附加组sudo
。
使用usermod
命令可以修改用户的各种信息,如用户的组、主目录、shell等。
usermod [选项] 用户名
-l 新用户名
:修改用户名。-d 目录
:修改用户主目录。-g 组名
:修改用户的主组。-G 组名列表
:修改用户所属的附加组。-s shell
:修改用户登录时使用的shell。示例:
$ sudo usermod -s /bin/zsh newuser
$ sudo usermod -d /new/home/directory newuser
使用userdel
命令可以删除用户账户。基本语法如下:
userdel [选项] 用户名
$ sudo userdel newuser
此命令只会删除用户账户,不会删除用户的主目录及文件。
如果想删除用户账户及其主目录,可以使用-r
选项:
$ sudo userdel -r newuser
使用id
命令查看用户的UID、GID及其所属的组:
id [用户名]
示例:
$ id newuser
uid=1001(newuser) gid=1001(newuser) groups=1001(newuser),27(sudo)
uid=1001(newuser)
:表示用户newuser
的UID是1001。gid=1001(newuser)
:表示用户newuser
的主组ID是1001。groups=1001(newuser),27(sudo)
:表示用户newuser
属于两个组,分别是newuser
组和sudo
组。使用groupadd
命令可以创建新的用户组。基本语法如下:
groupadd [选项] 组名
示例:
$ sudo groupadd newgroup
此命令创建了一个名为newgroup
的新用户组。
使用groupdel
命令可以删除用户组:
$ sudo groupdel newgroup
注意:删除用户组时,确保该组内没有用户,否则系统会报错。
groupmod
命令用于修改用户组的信息,如更改组名或GID。
groupmod [选项] 组名
$ sudo groupmod -n newgroupname oldgroupname
此命令将oldgroupname
组的名字修改为newgroupname
。
使用usermod
命令可以将用户添加到一个或多个组中。
newuser
添加到newgroup
组:$ sudo usermod -aG newgroup newuser
其中,-a
选项表示追加附加组(不覆盖现有的组),-G
指定组名。
newuser
从所有附加组中移除,并只将其加入newgroup
组:$ sudo usermod -G newgroup newuser
使用groups
命令可以查看用户所属的组:
$ groups 用户名
示例:
$ groups newuser
newuser : newuser sudo newgroup
表示用户newuser
属于newuser
、sudo
、newgroup
三个组。
/etc/passwd
文件/etc/passwd
文件存储了系统中所有用户的信息。每个用户的记录格式如下:
用户名:密码占位符:UID:GID:用户信息:主目录:登录shell
示例:
newuser:x:1001:1001::/home/newuser:/bin/bash
解释:
newuser
:用户名。x
:密码占位符(实际密码存储在/etc/shadow
中)。1001
:用户的UID。1001
:用户的GID。::
:用户信息(可选)。/home/newuser
:用户的主目录。/bin/bash
:用户的登录shell。/etc/shadow
文件/etc/shadow
文件存储了用户的密码及其账户相关信息。该文件的权限非常严格,只有超级用户可以读取。每条记录格式如下:
用户名:加密密码:最近一次修改日期:最小密码修改天数:最大密码有效天数:警告天数:密码失效天数:账号失效天数
示例:
newuser:$6$randomsalt$hashedpassword:18721:0:99999:7:::
``
`
解释:
- `newuser`:用户名。
- `$6$randomsalt$hashedpassword`:加密后的密码。
- `18721`:最近一次修改密码的日期(自1970年1月1日起的天数)。
- `0`:最小密码修改天数。
- `99999`:最大密码有效天数。
- `7`:密码过期前的警告天数。
### 4.3 `/etc/group` 文件
`/etc/group`文件存储了系统中所有用户组的信息。每个组的记录格式如下:
```bash
组名:密码占位符:GID:组成员列表
示例:
sudo:x:27:newuser
解释:
sudo
:组名。x
:密码占位符。27
:组的GID。newuser
:组成员。Linux用户管理是系统管理中的一个重要部分,涉及到用户和用户组的创建、修改、删除及权限分配。通过使用useradd
、usermod
、userdel
等命令,可以高效地管理系统中的用户账户。用户组的管理也通过groupadd
、groupmod
等命令来实现,从而使系统的权限控制更加细致和灵活。