linux 用户鉴权文件学习

一、 /etc/sudoers

/etc/sudoers用于管理 Linux 系统上特权操作的访问控制列表(ACL)。该文件指定了哪些用户、组或主机可以执行特权命令,以及他们可以执行哪些命令。

# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for the details on how to write a sudoers file.
#

# Override builtin defaults
Defaults    syslog=auth,timestamp_timeout=300,!set_logname
Defaults:admin    lecture=always
Defaults:admin    lecture_file=/etc/sudoers.lecture
Defaults:admin    passwd_timeout=0.5
Defaults:hwnoc !requiretty

# Host alias specification

# Cmnd alias specification
Cmnd_Alias  SHELLS = /bin/sh,/bin/ash,/bin/bsh,/bin/bash,/bin/csh, \
            /bin/ksh,/bin/rsh,/bin/tcsh,/bin/zsh
Cmnd_Alias  VIETC = /usr/sbin/visudo,/usr/sbin/vipw,/usr/sbin/vigr
Cmnd_Alias  USERADD = /usr/sbin/useradd,/usr/sbin/adduser
Cmnd_Alias SUPERMIT = !/usr/bin/sudo *,!/bin/su *,/bin/su -c*,/bin/su [a-zA-Z0-9]*,!/bin/su *root*
Cmnd_Alias SUDOEXEC = /bin/sh [/~.a-zA-z0-9]*, /bin/sh -c*, \
                        /bin/ash [/~.a-zA-z0-9]*, /bin/ash -c*, \
                        /bin/bsh [/~.a-zA-z0-9]*, /bin/bsh -c*, \
                        /bin/bash [/~.a-zA-z0-9]*, /bin/bash -c*, \
                        /bin/csh [/~.a-zA-z0-9]*, /bin/csh -c*, \
                        /bin/ksh [/~.a-zA-z0-9]*, /bin/ksh -c*, \
                        /bin/rsh [/~.a-zA-z0-9]*, /bin/rsh -c*, \
                        /bin/tcsh [/~.a-zA-z0-9]*, /bin/tcsh -c*, \
                        /bin/zsh [/~.a-zA-z0-9]*, /bin/zsh -c*

## settings from ali local

# default
%users  ALL=(users) ALL
root    ALL=(ALL) ALL


Cmnd_Alias WHITELIST1 = /bin/grep
mysql  ALL=(ALL) NOPASSWD:WHITELIST1


Cmnd_Alias WHITELIST2 = /usr/bin/crontab -l -u admin,/usr/bin/crontab -u admin -l
guest  ALL=(ALL) NOPASSWD:WHITELIST2


appadmin  ALL=(ALL) NOPASSWD:ALL,SUPERMIT,!SHELLS,SUDOEXEC,!VIETC,!USERADD

%tbops  ALL=(ALL) ALL,SUPERMIT,!SHELLS,SUDOEXEC

%tbpe  ALL=(ALL) ALL,SUPERMIT,!SHELLS,SUDOEXEC,!VIETC

%tbdba  ALL=(ALL) ALL,SUPERMIT,!SHELLS,SUDOEXEC,!VIETC

%tbnoc  ALL=(ALL) ALL,SUPERMIT,!SHELLS,SUDOEXEC,!VIETC,!USERADD

%tbscm  ALL=(ALL) ALL,SUPERMIT,!SHELLS,SUDOEXEC,!VIETC,!USERADD

%tbdev  ALL=(ALL) ALL,SUPERMIT,!SHELLS,SUDOEXEC,!VIETC,!USERADD

%tbtest  ALL=(ALL) ALL,SUPERMIT,!SHELLS,SUDOEXEC,!VIETC,!USERADD

# Compatible with the /home/staragent/plugins/osteam.src/osteam.cur/account.sh
Cmnd_Alias ALINOC_CMD = /usr/bin/kill,/usr/sbin/shutdown,/usr/sbin/halt,/usr/sbin/reboot,/bin/sh,/bin/ash,/bin/bsh,/bin/bash,/bin/csh,/bin/ksh,/bin/rsh,/bin/tcsh,/bin/zsh,/usr/bin/passwd,/usr/bin/chsh,/usr/bin/chfn,/usr/bin/su,/bin/su,/usr/sbin/su,/usr/sbin/visudo,/usr/sbin/vipw,/usr/sbin/vigr,/usr/sbin/useradd,/usr/sbin/adduser,/user/sbin/userdel,/user/sbin/usermod,/user/sbin/userpasswd,/user/sbin/groupadd,/user/sbin/groupdel,/user/sbin/groupmod,/usr/bin/sudo*,/bin/su*,/bin/su [a-zA-Z0-9]*,/bin/su *root*,/bin/chmod,/bin/chown,/bin/chattr,/bin/rm,/bin/rmdir,/sbin/rmmod,/sbin/insmod
hwnoc  ALL=(ALL) NOPASSWD:ALL,SUPERMIT,!VIETC,!USERADD,!ALINOC_CMD


admin  ALL=(ALL) NOPASSWD:ALL,SUPERMIT,!VIETC,!USERADD

%admin  ALL=(ALL) NOPASSWD:ALL,SUPERMIT,!VIETC,!USERADD

1.1、Defaults

定义默认信息,包括默认的用户、默认的命令、默认的主机等。

格式:Defaults parameter=value

如文件中的Defaults syslog=auth,timestamp_timeout=300,!set_logname这条规则意味着当用户使用 sudo 命令时,sudo 命令的执行信息将被记录到系统的安全日志中,并且超时时间为 5 分钟,而且不会记录当前用户的登录名信息。

  • syslog:指定日志级别和设备,这里的 auth 表示将 sudo 命令的执行信息记录在系统的安全日志中。
  • timestamp_timeout:指定 sudo 命令的超时时间,这里是 300 秒,也就是 5 分钟。
  • !set_logname:表示禁用记录当前用户的登录名信息。
格式:Defaults:admin parameter=value
# 针对admin用户设置
Defaults:admin    lecture=always
Defaults:admin    lecture_file=/etc/sudoers.lecture
Defaults:admin    passwd_timeout=0.5

lecture:指定 sudo 命令的提示信息,这里是 always,表示每次使用 sudo 命令时都会提示用户一条信息。
lecture_file:指定 sudo 命令的提示信息来源,这里是 /etc/sudoers.lecture,表示提示信息将从该文件中读取。
passwd_timeout:指定密码的超时时间,这里是 0.5,表示在输入密码后 0.5 秒内必须使用 sudo 命令,否则需要重新输入密码。

# 意味着当名为 admin 的用户使用 sudo 命令时,每次都会收到一条来自 /etc/sudoers.lecture 文件的提示信息,提醒用户操作的风险和注意事项。另外,用户必须在输入密码后 0.5 秒内使用 sudo 命令,否则需要重新输入密码。

Defaults:hwnoc !requiretty

!requiretty:表示不要求用户在 tty 控制台上使用 sudo 命令。

# 通常情况下,sudo 命令要求用户必须在 tty 控制台上输入密码,这样可以确保用户是在本地执行命令,而不是在远程机器上执行。然而,在某些情况下,用户可能需要在无 tty 的情况下使用 sudo 命令,如通过 ssh 等远程连接执行命令。这时就需要通过 !requiretty 参数来禁用 tty 控制台的要求。因此,这条规则意味着当名为 hwnoc 的用户使用 sudo 命令时,不需要在 tty 控制台上输入密码。

1.2、Cmnd_Alias

定义命令别名,将一个或多个命令映射到一个别名。

格式:Cmnd_Alias aliasname=command1,command2,...

与此类似的还有:

  • User_Alias:定义用户别名,将一个或多个用户映射到一个别名。

  • Runas_Alias:定义运行用户别名,将一个或多个运行用户映射到一个别名。

  • Host_Alias:定义主机别名,将一个或多个主机映射到一个别名。

1.3、对用户及用户组权限限制

admin  ALL=(ALL) NOPASSWD:ALL,SUPERMIT,!VIETC,!USERADD

解释:

  • admin:指定用户名为 admin。
  • ALL:指定所有主机都适用该规则。
  • (ALL):指定使用任何用户身份执行命令。
  • NOPASSWD:ALL:表示在执行 sudo 命令时不需要输入密码。
  • SUPERMIT:指定 SUPERMIT 命令别名,可以在执行 sudo 命令时调用。
  • !VIETC:表示不允许执行 VIETC 命令别名。
  • !USERADD:表示不允许执行 USERADD 命令别名。

因此,这条规则意味着用户 admin 在所有主机上可以使用 sudo 命令以任何用户身份执行任何命令,而且不需要输入密码。此外,用户 admin 可以使用 SUPERMIT 命令别名,但是不能使用 VIETC 和 USERADD 命令别名,以保证系统的安全性和稳定性。

%tbops  ALL=(ALL) ALL,SUPERMIT,!SHELLS,SUDOEXEC

这条规则意味着 tbops 用户组中的用户可以在所有主机上使用 sudo 命令以任何用户身份执行任何命令,同时也可以使用 SUPERMIT 命令别名和 SUDOEXEC 命令别名。但是,用户不允许执行 SHELLS 命令别名,以保证系统的安全性和稳定性。

二、 /etc/passwd

/etc/passwd是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。
文件示例如下:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

格式为:

用户名:密码:用户标识号:组标识号:注释性描述:主目录:登录 Shell

具体解释如下表:

字段解释
用户名代表用户账户的字符串,通常长度不超过 8 个字符,并且由大小写字母和/或数字组成
密码存放着加密后的用户密码字,但是由于安全隐患,现在多数 Linux 系统使用 shadow 技术将真正的加密后的用户密码字存放到 /etc/shadow 文件中
UID一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的。
GID记录用户所属的用户组。它对应着 /etc/group 文件中的一条记录。
用户信息记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。
用户主目录用户的起始工作目录,即用户在登录到系统之后所处的目录。
登录shell用户登录后启动的进程,也就是用户与 Linux 系统之间的接口。

密码字段x*的区别

x:表示用户密码已经被加密,实际密码存储在 /etc/shadow 文件中。
*:表示密码字段为空,也就是用户无法通过密码登录,比如系统用户或者没有密码的用户

各种 /etc/passwd 之间的区别

文件名介绍
/etc/passwd这是最常见的 /etc/passwd 文件,用于存储所有用户账户的信息,包括用户名、UID、GID、密码、用户信息、主目录和默认 shell 程序等。
/etc/passwd-这是 /etc/passwd 文件的备份文件,通常在管理员对 /etc/passwd 文件进行修改时,系统会自动创建该备份文件。
/etc/passwd+这是一些 Linux 发行版(如 Gentoo)使用的 /etc/passwd 文件,与普通 /etc/passwd 文件的格式略有不同,一般包括用户名、UID、GID、用户信息和主目录等。
/etc/passwd.org这是一些 Linux 发行版(如 Debian)的 /etc/passwd 文件备份,通常备份的时间点与系统安装时的 /etc/passwd 文件相同。
/etc/passwd-这是 AIX 操作系统中的 /etc/passwd 文件,与普通的 /etc/passwd 文件的格式略有不同,一般包括用户名、UID、GID、用户信息、主目录、默认 shell 程序和账号过期时间等。

管理/etc/passwd 文件命令

useradd
创建用户useradd-test,并设置密码为123,并同时创建一个与用户名相同的用户组,作为用户的主组

useradd -p 123 -U useradd-test
$ cat /etc/passwd | grep useradd-test
useradd-test:x:1000:1000::/home/useradd-test:/bin/bash

$ cat /etc/shadow | grep useradd-test
useradd-test:123:19562:0:99999:7:::

由上可知,useradd 创建用户设置密码是明文的,无法加密,加密需要使用passwd命令

passwd
修改用户密码

$ sudo passwd useradd-test
Changing password for user useradd-test.
New password: 
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
Retype new password: 
passwd: all authentication tokens updated successfully.
cat /etc/shadow | grep useradd-test
useradd-test:$6$k.sul8dF$pgZaR8zG1BYjIp9vTemeROXhA2npYLqUfblpZnCgChyVtr4yi9QZSyMLOtqyH85b2ONXeMK.RJU1awlDEUMww/:19562:0:99999:7:::

usermod 修改属性

$ usermod -c "useradd test" useradd-test

$ cat /etc/passwd | grep useradd-test
useradd-test:x:1000:1000:useradd test:/home/useradd-test:/bin/bash

usermod常见参数

参数命令含义
-lusermod -l newname oldname修改用户的用户名,其中 newname 是新的用户名,oldname 是旧的用户名。
-cusermod -c "User Info" username修改用户的用户信息,其中 “User Info” 是用户信息,username 是要修改信息的用户名。
-gusermod -g groupname username修改用户所属的主组,其中 groupname 是要更改的用户组名,username 是要修改的用户名。
-Gusermod -G group1,group2 username将用户添加到多个用户组中,其中 group1、group2 是要添加的用户组,username 是要修改的用户名。
-susermod -s /bin/bash username修改用户的默认 shell 程序,其中 /bin/bash 是新的 shell 程序,username 是要修改的用户名。
-dusermod -d /home/newhome username修改用户的主目录,其中 /home/newhome 是新的主目录,username 是要修改的用户名。
-eusermod -e 2022-12-31 username修改用户账号的过期时间,其中 2022 年 12 月 31 日是账号过期的日期,username 是要修改的用户名。
-pusermod -p password username修改用户的密码,其中 password 是新的密码,username 是要修改密码的用户名。需要注意的是,这种方式无法对密码进行加密,因此不太安全,建议使用 passwd 命令来设置密码。
-uusermod -u uid username修改用户的 UID,其中 uid 是新的用户 ID,username 是要修改的用户名。

userdel删除账号

userdel useradd-test

三、 /etc/shadow

/etc/shadow 目录是用于存储用户密码信息的文件目录,也被称为“影子文件”。该目录只有root用户拥有读权限,其他用户不能直接查看或修改该目录下的文件。
格式如下:

用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

具体解释:

字段含义
用户名(Username)该字段指定了用户的登录名。
加密的密码(Password)该字段存储了用户的密码,使用加密算法进行加密。
最近一次修改密码的时间(Last change)该字段指定了密码上次被修改的时间,表示距离 1970 年 1 月 1 日的天数。
最小密码生存期(Minimum days)该字段指定了密码修改后必须经过多少天才能再次修改密码。
最大密码生存期(Maximum days)该字段指定了密码的有效期,表示密码自上次修改后可以保持多长时间。
密码过期警告时间(Warning days)该字段指定了在密码过期前提醒用户的天数。
帐号失效时间(Inactive days)该字段指定了多少天用户没有登录系统后,帐号会被自动失效。
帐号失效日期(Account expiration)该字段指定了帐号的终止日期,表示距离 1970 年 1 月 1 日的天数。

/etc/shadow*!!区别

在 /etc/shadow 文件中,两个特殊字符 * 和 !! 都表示该用户账户无法登录系统,但它们之间有一些细微的区别。

  • *:如果 /etc/shadow 文件中的密码字段为 *,则表示该用户账户已被锁定,无法使用密码进行登录。这种情况通常是由于管理员手动锁定用户账户导致的。

  • !!:如果 /etc/shadow 文件中的密码字段为 !!,则表示该用户账户已被禁用,无法使用密码进行登录。这种情况通常是由于系统自动禁用用户账户,例如密码过期或用户长时间未登录系统等。

需要注意的是,无论是 * 还是 !!,都表示该用户账户无法登录系统,但它们之间的区别在于,* 表示用户账户是被管理员手动锁定的,而 !! 则表示用户账户是被系统自动禁用的。在实际使用中,管理员需要根据实际情况进行相应的处理,以确保系统的安全性和稳定性。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值