Linux常用命令(用户及用户组相关操作)

Linux常用命令(博客地图):https://blog.youkuaiyun.com/sysukehan/article/details/105804511

用户及用户组基础知识请参考《Linux常用命令(用户及用户组基础知识)》

 

相关文件结构

/etc/passwd文件结构

例:root:x:0:0:root:/root:/bin/bash

1

2

3

4

5

6

7

root

X

0

0

root

/root

/bin/bash

账号名称

密码

UID

GID

用户信息说明

主文件夹

Shell

 

/etc/shadow文件结构

例:root:$6$yMuqjFCP$p6z3v3bTa842XU/HRjmWALrXv723ZTepEgwT1G2M3kSI2M7hyGak6api1LhJu8smwz5K8r8MER1O..5hjWM7R1:18340:0:99999:7:::

1

2

3

4

5

6

7

8

9

root

$6$yMuqjFCP$p6z3v3bTa842XU

/HRjmWALrXv723ZTepE

gwT1G2M3kSI2M7hyGak6api1LhJu8

smwz5K8r8MER1O..5hjWM7R1

18340

0

99999

7

账号名称

密码(加密后)

最近修改密码的日期

密码不可修改的日期

密码需要重新修改的日期

密码需要修改前的警告天数

密码过期后的宽限时间

账号失效日期

保留

 

/etc/group文件结构

例:adm:x:4:syslog,kehan

1

2

3

4

adm

x

4

syslog,kehan

用户组名称

用户组密码

GID

用户组支持的账号名称

 

用户组的查看和切换

初始用户组(effective group)

每个用户在他的/etc/passwd里面的第四列有所谓的GID,那个GID就是所谓的“初始用户组”。当用户登录系统时,立刻就拥有这个用户组的相关权限。初始用户组是不需要在/etc/group的第四个字段写入该账号的。

 

有效用户组(initial group)

在/etc/group的第四个字段中配置了账号,该账号就加入了这个用户组,这个用户组就是该账号的有效用户组。

 

有效与支持用户组的查看:groups

groups命令显示的第一个用户组就是root的有效用户组,这时候root用户创建的文件或目录,所属的用户组就是root的有效用户组,也就是root。

 

切换有效用户组:newgrp

为root添加一个用户组后,groups命令查询结果如下:

用newgrp命令切换有效用户组:

此时有效用户组变更为dbgroup,此时创建的文件或目录,所属用户组就是dbgroup了。

 

新增用户:useradd

useradd [-u UID] [-g 初始用户组] [-G 次要用户组]  [-mM] [-c 说明栏] [-d 主文件夹绝对路径] [-s shell] 用户账号名

参数:

-u:后面接的是UID,是一组数字。直接指定一个特定的UID给这个账号。

-g:后面接的用户组名就是前面提到的初始用户组,该用户组的GID会被放置到/etc/passwd的第四个字段内。

-G:后面接的组名则是这个账号还可以加入的用户组,这个参数会修改/etc/group内的相关数据。

-M:不要创建用户主文件夹(系统账号默认值)。

-m:创建用户主文件夹(一般账号默认值)。

-c:这个是/etc/passwd的第五列说明内容,可以随便设置。

-d:指定某个目录成为主文件夹,而不要使用默认值,要求使用绝对路径。

-r:创建一个系统的账号,这个账号的UID会有限制(参考/etc/login.defs)。

-s:后面接一个shell,若没有指定则默认是/bin/bash。

-e:后面接一个日期,格式为“YYYY-MM-DD”,此选项可写入shadow第八字段,即账号失效日的设置选项。

-f:后面接shadow的第七字段选项,指定密码是否会失效。0为立刻失效,-1为永不失效(密码只会过期而强制于登录时重新设置而已)。

不加参数地创建一个用户看系统做了哪些事情:

1、在/etc/passwd里面创建一行与账号相关的数据,包括创建UID/GID/主文件夹等。

2、在/etc/shadow里面将此账号的密码相关参数填入,但是尚未有密码。默认情况下账号密码永不过期。

3、在/etc/group里面加入一个与账号同名的目录作为用户的主文件夹,且权限为700.

还需要执行“passwd 用户名”命令设置用户密码后创建用户才算结束。可以看到此时密码字段是!,此时conan这个新账号是不能登录的,但是可以从root用户切换过去。

 

useradd默认参数

useradd参考文件(useradd默认参数来源):/etc/default/useradd

用useradd -D也可以调出默认配置。

1、GROUP=100:新建账号的初始用户组使用GID为100

系统上面GID为100即是users这个用户组,这个设置意思是让新用户账号的初始用户组为users。但是不同的Linux表现不一样,有的Linux版本默认的用户组名为与账号名相同的用户组。这是因为针对用户组的角度有两种不同的机制:

1、私有用户组机制:系统会创建一个与账号一样的用户组给用户作为初始用户组。这种用户组的设置机制会比较有保密性,这是因为用户都有自己的用户组,而且主文件夹权限将会设置为700(仅有自己可进入自己的主文件夹之故。使用这种机制将不会参考GROUP=100这个配置。

2、公共用户组机制:就是以GROUP=100这个设置值作为新建账号的初始用户组,因此每个账号都属于users这个用户组,且默认主文件夹通常的权限会是“drwxr-xr-x”,由于每个账号都属于users用户组,因此大家可以互相分享主文件夹内的数据。

2、HOME=/home:用户主文件夹的基准目录(basedir)

用户的主文件夹通常是与账号同名的目录,这个目录将会放在此设置值的目录后面。所以conan的主文件夹就是/home/conan。

3、INACTIVE=-1:密码过期后是否会失效的设置

0代表过期后立刻失效,-1代表密码永不失效,30代表过期后30天失效。

4、EXPIRE=:账号失效日期

就是/etc/shadow文件内的第八字段,可以直接设置账号在哪个日期后直接失效,而不理会密码的问题,通常不会设置此选项。

5、SHELL=/bin/sh:默认使用的shell程序文件名

6、SKEL=/etc/skel:用户主文件夹参考基准目录

指定用户主文件夹参考基准目录,新用户主文件夹的内容都是从/etc/skel中拷贝过去的。

7、CREATE_MAIL_SPOOL=no:是否创建用户的mailbox

 

UID/GID默认密码参数

UID/GID密码参数的参考文件/etc/login.defs

mailbox所在目录

MAIL_DIR /var/mail:用户默认邮件信箱放置目录。

shadow密码第4,5,6字段内容

PASS_MAX_DAYS  99999:/etc/shadow的第5列,更改密码后需要再次更改密码的天数

PASS_MIN_DAYS   0:/etc/shadow的第4列,更改密码后不可更改密码的天数

PASS_WARN_AGE 7:/etc/shadow的第6列,密码过期前会警告的天数

UID/GID指定数值

UID_MIN               1000:一般账号最小UID

UID_MAX                     60000:一般账号最大UID

GID_MIN               1000:一般用户组最小GID

GID_MAX                     60000:一般用户组最大GID

系统计算新一般用户账号ID逻辑:先参考UID_MIN取得最小值,由/etc/passwd查找最大的UID数值,将两者相比,找出最大的那个加1就是新账号的UID。如果当前最大UID是2000,那么新UID就是2001,1000~1999就会空出来。

如果是创建系统账号,那么就会找出比500小的最大的那个UID+1.

用户删除与密码设置值

USERGROUPS_ENAB yes:如果使用userdel去删除一个账号,且该账号所属的初始用户组已经没有人隶属于该用户组了,那么就删除掉该用户组。

CREATE_HOME yes:我的系统上没有这个参数,所以没有自动创建新用户的主文件夹,加上这个配置后再创建一般用户,系统会自动创建新用户的主文件夹。

所以在使用useradd创建账号时至少会参考以下三个文件:

/etc/default/useradd

/etc/login.defs

/etc/skel/*

 

修改密码:passwd

所有用户都可以用passwd修改自己的密码。

只有root用户可以用“passwd 账号”来修改其他账号的密码。

参数:

-l:锁定账号,通过在/etc/shadow第二列最前面加上!使密码失效。

-u:解锁账号,和-l相对。

-S:列出密码相关参数,即shadow文件内的大部分信息。

-n:后面接天数,shadow的第4字段,多久不可修改密码天数。

-x:后面接天数,shadow的第5字段,多久内必须要改动密码。

-w:后面接天数,shadow的第6字段,密码过期前的警告天数。

-i:后面接“日期”,shadow的第7字段,密码失效日期。

root使用passwd命令可以设置各种各样的密码,几乎不会受密码复杂度的限制。

chage -l 账号名可以用来替代passwd -S 账号名,列出的信息更易读。

 

修改用户参数:usermod

usermod username

参数:

-c:后面接账号的说明,即/etc/passwd第五列的说明,可以加入一些账号的说明。

-d:后面接账号的主文件夹,即修改/etc/passwd的第6列。

-e:后面接日期,格式是YYYY-MM-DD,也就是在/etc/shadow内的第8个字段数据。

-f:后面接天数,为shadow的第7字段,密码过期后的账号宽限时间。

-g:后面接初始用户组,修改/etc/passwd的第四个字段,即是GID的字段。

-G:后面接次要用户组,修改这个用户组能够支持的用户组。

-a:与-G合用可增加次要用户组的支持而非设置(usermod -G dbgroup -a root)。

-l:后面接账号名称,即是修改账号名称,/etc/passwd的第一列。

-s:后面接Shell的实际文件,例如/bin/bash或/bin/sh等。

-u:后面接UID数字,即/etc/passwd第三列的数据。

-L:暂时将用户的密码冻结,让他无法登录,其实仅改/etc/shadow的密码。

-U:将/etc/shadow密码列的!去掉。

 

删除用户:userdel

userdel [-r] username

参数:

-r:连同用户的主文件夹一起删除。

删除的用户数据有:

用户账号/密码相关参数:/etc/passwd,/etc/shadow

用户组相关参数:/etc/group,/etc/gshadow

用户个人文件数据:/home/username,/var/spool/mail/username

想要完整删除某个用户,最好先用find / -user username查出系统内属于username的文件,删掉这些文件后再执行userdel -r username。

 

查询用户相关信息:id

查询自己的相关GID/UID等信息:id

查询其他账号的相关GID/UID等信息:id username

 

新增用户组:groupadd

groupadd 用户组名

参数:

-g:后面接某个特定的GID,用来直接给予某个GID。

-r:新建系统用户组。

 

修改group相关参数:groupmod

groupmod [-g gid] [-n group_name] 用户组名

参数:

-g:修改既有的GID。

-n:修改既有的组名。

不要随意修改GID,容易造成系统资源的混乱。

 

删除用户组:groupdel

groupdel groupname

只有没有账号以groupname为初始用户组的情况下才可以删除该用户组。

 

切换用户:su

su - [username]

不带username代表这切换到root用户。

不带-的情况下shell不会加载目标username的环境变量。

退出切换的用户:exit

 

切换身份进行某项任务:sudo

sudo [-b] [-u 新用户账号]

参数:

-b:将后续的命令让系统自动执行,而不与目前的shell产生影响。

-u:后面可以接欲切换的用户,若无此项则代表切换身份为root。

如:以sshd身份在/tmp下面新建一个名为mysshd的文件。

sudo -u sshd touch /tmp/mysshd

sudo可以切换身份来进行某项任务。在上述命令中,因为无法使用su – sshd去切换系统账号(因为系统账号的shell是/sbin/nologin),这个时候就可以使用sudo命令以sshd的权限在/tmp下面新建文件。但是sudo默认只有root能使用,因为sudo的执行流程是这样的:

1)当用户执行sudo时,系统于/etc/sudoers文件中查找该用户是否有执行sudo的权限;

2)当用户具有可执行sudo的权限后,便让用户输入用户自己的密码来确认;

3)若密码输入成功,便开始执行sudo后续接的命令;

4)root执行sudo时不需要输入密码。若欲切换的身份与执行者身份相同,也不需要输入密码;

sudo执行的重点是能否使用sudo必须要看/etc/sudoers的设置值,而可使用sudo的是通过输入用户自己的密码来执行后续的命令串。

除了root之外的账号,若想要使用sudo执行属于root的权限命令,则root需要先使用visudo去修改/etc/sudoers,让该账号能够使用全部或部分的root命令功能。使用visudo是因为/etc/sudoers是有语法的,如果设置错误会造成无法使用sudo命令的不良后果。使用visudo去修改,结束离开修改界面时,系统会去检验/etc/sudoers的语法。


常用的修改sudoers的方法就是使单一用户可进行root的所有命令,那么加上root下方那一行即可:


kehan ALL=(ALL:ALL) ALL

四个参数的意义是:

1)用户账号:系统的哪个账号可以使用sudo这个命令,默认为root这个账号。

2)登录者的来源主机名:这个账号由哪台主机连接到本Linux主机,意思是这个账号可能是由哪一台网络主机连接过来的,这个设置值可以指定客户端计算机(信任用户的意思)。ALL意思是可来自任何一台网络主机。

3)可切换的身份:这个账号可以切换成什么身份来执行后续的命令,ALL意思是可以切换成任何人。

4)可执行的命令:这个命令务必使用绝对路径编写,ALL意思是可以执行任何命令。

一般为了让其他账户具有和root一样的权限,就指定账号后全部设置为ALL。

 

参考资料

《鸟哥的Linux私房菜基础学习篇(第三版)》

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值