其他开发工具

Linux:添加用户和用户管理那些命令和知识整理

2021-10-31  本文已影响0人  xiaogp

摘要:Linuxuseraddpasswd/etc/passwd/etc/shadow/etc/sudoers~/.profile~/.bashrc

Linux用户和用户组管理

(1)Linux多用户多任务

Linux/Unix是一个多用户多任务的操作系统;多用户通过SSH客户端工具等远程工具等远程登录服务器来进行,只要具有相关用户的权限,任何人都是可以上去操作访问服务器,每个用户可以同时开启很多的服务任务和进程。

(2)Linux系统用户角色划分

用户在系统中是分角色的,在Linux系统中,由于角色的不同,权限和所完成的任务也不同,用户的角色是通过UID(用户ID)和GID(组ID)识别的;特别是UID,一个UID是唯一标识一个系统用户的账号,用户角色分为超级用户程序用户普通用户,三种的UID范围如下

(3)用户和用户组
(4)用户和用户组的对应关系

用户和用户组的对应关系有:一对一一对多多对一多对多

(5)用户及用户组配置文件介绍

Linux系统中下的账户文件主要有/etc/passwd/etc/shadow/etc/group/etc/gshadow四个文件

(base) root@VM-16-11-ubuntu:~# ll /etc/passwd
-rw-r--r-- 1 root root 1806 Oct 30 11:57 /etc/passwd

/etc/passwd文件中每行定义一个用户账号,有多少行就表示多少个账号,在一行中内容之间又通过:号划分了7个字段,这7个字段分别定义了账号的不同属性,passwd文件实际内容如下

(base) root@VM-16-11-ubuntu:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
lighthouse:x:1000:1000::/home/lighthouse:/bin/bash
xiaogp:x:1001:1001::/home/xiaogp:/bin/bash
mysql:x:113:116:MySQL Server,,,:/nonexistent:/bin/false

各字段含义如下
字段1(xiaogp):帐号名,这是用户登陆时使用的账户名称,在系统中是唯一的,不能重名
字段2(x):密码占位符x;早期的unix系统中,该字段是存放账户和密码的,由于安全原因,后来把这个密码字段内容移到/etc/shadow中了
字段3(1001):UID,范围是0-65535
字段4(1001):GID;范围是0-65535;当添加用户时,默认情况下会同时建立一个与用户同名UID和GID相同的组
字段5(空):用户说明;这个字段是对这个账户的说明
字段6(/home/xiaogp):宿主目录;用户登陆后首先进入的目录,一般与/home/用户名这样的目录
字段7(/bin/bash):登录的Shell, 当前用户登陆后所使用的shell,在centos/rhel系统中,默认的shell是bash

再看一下用户密码管理文件/etc/shadow,该文件的权限为root可读可写,其他非shadow用户组的用户没有可读权限

(base) root@VM-16-11-ubuntu:~# ll /etc/shadow
-rw-r----- 1 root shadow 1164 Oct 31 13:10 /etc/shadow

再看下内容,同样根据:分割

(base) root@VM-16-11-ubuntu:~# cat /etc/shadow
root:!:17751:0:99999:7:::
daemon:*:17737:0:99999:7:::
bin:*:17737:0:99999:7:::
lighthouse:!:18929:0:99999:7:::
xiaogp:$6$fBSvKJTY$Rft1wTRJAzEOARW87el2vl8UX5XCHLv5yfPDfkk4jRPceY3vHJBrh1DlvKi2L9.48PU3gNkVMUyq4pbqXzgWK1:18929:0:99999:7:::
mysql:!:18930:0:99999:7:::

各字段含义如下
字段1(xiaogp):帐号名称
字段2($6$fBSvKJTY$Rft1wTRJAzEOARW87el2vl8UX5XCHLv5yfPDfkk4jRPceY3vHJBrh1DlvKi2L9.48PU3gNkVMUyq4pbqXzgWK1):加密的密码
字段3(18929):最近更改密码的时间;从1970/1/1到上次修改密码的天数
字段4(0):禁止修改密码的天数;从1970/1/1开始,多少天之内不能修改密码,默认值为0
字段5(99999):用户必须更改口令的天数;密码的最长有效天数,默认值为99999
字段6(7):警告更改密码的期限;密码过期之前警告天数,默认值为7;在用户密码过期前多少天提醒用户更改密码
字段7(空):不活动时间;密码过期之后账户宽限时间 3+5;在用户密码过期之后到禁用账户的天数
字段8(空):帐号失效时间,默认值为空;从1970/1/1日起,到用户被禁用的天数
字段9(空):保留字段(未使用)


查看用户和用户组

当前用户直接在/bin/bash的Shell的开头展示,显示为用户名@主机名,比如现在ubuntu用户

(base) ubuntu@VM-16-11-ubuntu:~$ 

还可以使用whoami打印出当前登录是哪个用户

(base) ubuntu@VM-16-11-ubuntu:~$ whoami
ubuntu

可以使用w命令打印出当前服务器登录的用户和远程主机IP,登录时间等信息

(base) ubuntu@VM-16-11-ubuntu:~$ w
 15:17:41 up 2 days,  1:23,  4 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
xiaogp    pts/0    114.243.170.211  12:10    2:06m  0.10s  0.01s sshd: xiaogp [priv]  
xiaogp    pts/1    114.243.170.211  13:51    1:26m  0.02s  0.02s -bash
xiaogp    pts/2    114.243.170.211  14:37    2.00s  0.09s  0.00s sshd: xiaogp [priv]  
ubuntu   pts/3    114.243.170.211  15:15    1:57   0.01s  0.01s -bash

在知道用户之后可以查看当前用户所在的用户组,使用groups或者id命令

(base) ubuntu@VM-16-11-ubuntu:~$ groups `whoami`
ubuntu : ubuntu adm cdrom sudo dip plugdev lpadmin sambashare

冒号后面的就是所属的用户组

(base) ubuntu@VM-16-11-ubuntu:~$ id ubuntu
uid=500(ubuntu) gid=500(ubuntu) groups=500(ubuntu),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),114(sambashare)

groups后面就是所属的用户组
再看root用户可见root所属root组,是一对一的关系

(base) ubuntu@VM-16-11-ubuntu:~$ id root
uid=0(root) gid=0(root) groups=0(root)

添加/删除用户和用户组

添加用户使用useradd命令,可以使用从那时-s指定shell,-p指定登录密码,-g指定用户组列表,默认会生成一个同名和group,必须以root权限操作

(base) ubuntu@VM-16-11-ubuntu:~$ useradd test -s /bin/bash 
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.

切换到root用户

(base) ubuntu@VM-16-11-ubuntu:~$ sudo -s
(base) root@VM-16-11-ubuntu:~# useradd -s /bin/bash -m test

设置密码,在新建了用户之后直接使用passwd设置,必须设置了密码之后才能用其他普通用户登录,否则只能在root下进入

(base) root@VM-16-11-ubuntu:~# passwd test
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
(base) root@VM-16-11-ubuntu:~# 

切换到test用户,登录的目录是test的根目录/home/test

(base) root@VM-16-11-ubuntu:~# exit
exit
(base) ubuntu@VM-16-11-ubuntu:~$ su - test
Password: 
test@VM-16-11-ubuntu:~$ 
test@VM-16-11-ubuntu:~$ pwd
/home/test

看下/etc/passwd下多了用户test,uid,gid都是1002

test@VM-16-11-ubuntu:~$ less /etc/passwd |grep test
test:x:1002:1002::/home/test:/bin/bash

看下test用户的用户信息,test输出test组

test@VM-16-11-ubuntu:~$ id test
uid=1002(test) gid=1002(test) groups=1002(test)

如果忘记了test用户的密码,可以在root下直接使用passwd覆盖之前的密码

test@VM-16-11-ubuntu:~$ exit
logout
(base) ubuntu@VM-16-11-ubuntu:~$ sudo -s
(base) root@VM-16-11-ubuntu:~# passwd test
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
(base) root@VM-16-11-ubuntu:~# exit
exit
(base) ubuntu@VM-16-11-ubuntu:~$ su - test
Password: 
test@VM-16-11-ubuntu:~$ 

下一步删除该用户,使用userdel命令

(base) root@VM-16-11-ubuntu:/home# userdel test

加上-r可以彻底删除,此时用户根目录及文件将被删除,再次查看/etc/passwd已经没有test这一行


从新用户切换到root

下面用新用户test切换到root权限下,发现test不在sudoers文件中,不被允许sudo

test@VM-16-11-ubuntu:~$ sudo -s
[sudo] password for test: 
test is not in the sudoers file.  This incident will be reported.

下面来介绍以下/etc/sudoers这个文件,当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限,确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认,若密码输入成功,则开始执行sudo后续的命令,先简单地看一下/etc/sudoers是个啥

test@VM-16-11-ubuntu:~$ ll /etc/sudoers
-r--r----- 1 root root 860 Oct 30 09:06 /etc/sudoers

尼玛还是个root文件,果断切换root看之,直接看最后两行是现有的两个普通的用户

lighthouse ALL=(ALL) NOPASSWD: ALL
ubuntu  ALL=(ALL:ALL) NOPASSWD: ALL

再加一行使得test用户在所有计算机上

test ALL=(ALL:ALL) ALL

第一列::test指定要操作的用户
第二列:ALL代表所有计算机
第三列:ALL:ALL代表所有用户
第四列:ALL代表所有操作
合在一起就是允许test用户在所有计算机上以所有用户身份运行所有命令,如果加入NOPASSWD则切入root不需要输入密码,再次sudo到root,输入密码成功

test@VM-16-11-ubuntu:~$ sudo -s
[sudo] password for test: 
root@VM-16-11-ubuntu:~#

新用户的环境变量配置

test用户在根目录/home/test下生成~/.profile~/.bashrc

(base) test@VM-16-11-ubuntu:~$ ll
total 32
drwxr-xr-x 2 test test 4096 Oct 31 21:38 ./
drwxr-xr-x 6 root root 4096 Oct 31 20:08 ../
-rw------- 1 test test  827 Oct 31 21:38 .bash_history
-rw-r--r-- 1 test test  220 Apr  5  2018 .bash_logout
-rw-r--r-- 1 test test 3555 Oct 31 21:37 .bashrc
-rw------- 1 test test   31 Oct 31 21:36 .lesshst
-rw-r--r-- 1 test test  807 Apr  5  2018 .profile

在刚登录Linux时,首先启动/etc/profile 文件,然后再启动用户目录下的 /.bash_profile、/.bash_login或 /.profile文件中的其中一个,执行的顺序为:/.bash_profile、~/.bash_login、 ~/.profile,看下.profile文件

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

其中这段会调用根目录下的.bashrc的文件,因此要修改test用户的环境变量直接复制其他一个永不的即可

root@VM-16-11-ubuntu:~# cp /home/ubuntu/.bashrc /home/test/
上一篇下一篇

猜你喜欢

热点阅读