300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 用户用户组 与密码管理 su sudo命令 限制root远程登陆

用户用户组 与密码管理 su sudo命令 限制root远程登陆

时间:2021-10-10 08:04:06

相关推荐

用户用户组 与密码管理 su sudo命令 限制root远程登陆

独角兽企业重金招聘Python工程师标准>>>

用户配置文件和密码文件

cat /etc/passwd 用户核心的配置文件

如果密码文件如果删除了,所有用户就登不上去了。

[root@aming1 ~]# cat /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinsystemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologinsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinpolkitd:x:998:996:User for polkitd:/:/sbin/nologintss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinchrony:x:997:995::/var/lib/chrony:/sbin/nologinaming:x:1000:1000::/home/aming:/bin/bashaming2:x:1001:1001::/home/aming2:/bin/bash

/etc/passwd 用“ : ”分为7段,每个字段都有具体的含义

·第一个字段为用户名·第二字段之前是存放的是该账号的密码.早期的Unix系统口令确实存放在这里,因为安全因素,后来就存放到了/etc/shadow中了,所·以用“x”来代替·第三个字段为一个数字,表示用户的“uid”。·第四个字段也是数字,表示为组标识号,称为“gid”·第五个字段为注释说明,没有实际意义。·第七段是用户的shell。如果是/sbin/nologin。则不允许登陆。

etc/shadow 密码配置文件

[root@aming1 ~]# cat /etc/shadowroot:$6$TPvL1jnqi26yNubi$CnNodDe5nuT4WHIybkUvhS0.lSBNJUvYTov8VtEztJ0LKjo9cvAE2yFSzhzqom6bttBzgdC/9s7l8LDPmGjSD1::0:99999:7:::bin:*:17110:0:99999:7:::daemon:*:17110:0:99999:7:::adm:*:17110:0:99999:7:::lp:*:17110:0:99999:7:::sync:*:17110:0:99999:7:::shutdown:*:17110:0:99999:7:::halt:*:17110:0:99999:7:::mail:*:17110:0:99999:7:::operator:*:17110:0:99999:7:::games:*:17110:0:99999:7:::ftp:*:17110:0:99999:7:::nobody:*:17110:0:99999:7:::systemd-bus-proxy:!!:17607::::::systemd-network:!!:17607::::::dbus:!!:17607::::::polkitd:!!:17607::::::tss:!!:17607::::::postfix:!!:17607::::::sshd:!!:17607::::::chrony:!!:17607::::::aming:!!:17666:0:99999:7:::aming2:!!:17666:0:99999:7:::

/etc/shadow 分为9个字段。

·第一段为用户名,与/etc/passwd 对应·第二个字段为用户密码。是加密的。使用SHA-512加密方式加密的密码。无法反编译,即使相同的密码加密字符也会不同。如果!!代表密码为空是不能登陆的,如果是*则代表该用户是锁定的。·第三个字段是上次更改密码的日期。这个数字以1970年1月1日和上次更改密码的日期计算而来。单位是“天”。·第四段是要过多少天才可以更改密码。默认是0,就不受限制。·第五段为密码多少天后到期。·第六段为密码到期前多少天来进行提醒。·第七段为账号失效期限,比如设置为3,如果密码到期,再过3天,这个账号会被锁定而失效。·第8段为生命周期,也是从1970年1月1日开始算的,如果过期账号则作废。·第九段是保留段,没有实际意义。

在这里第二段的加密字符即使密码相同加密字符也是不一样的,采用的是SHA-512加密方式。

aming:$6$MesREyTp$J/IgN6.oT7uBJ292J.LLGC1dMQkN7ckgq0Olz/zDchzs6rQdWSee2o0fiJt8wPIHCNX4bNTOrsQsqsCTqhSPm.:17670:0:99999:7:::aming2:$6$l.NeS.LF$EQGwaMvyhvJnAz0eoAbUDXsTwEwbHvAOlqjFHCTWOUykSf0mzC6j0HwEFzUpvcSOZM6R2.jvN8qTsupdC2ho4.:17670:0:99999:7:::

用户管理

用法如下

useradd 增加用户

-u:自定义UID-g:自定义用户组-d: 自定义用户家目录-M:表示不建立家目录-s :表示自定义shell

添加用户,默认uid是从1000开始的。

[root@aming1 ~]# useradd aming3[root@aming1 ~]# tail -n3 /etc/passwdaming:x:1000:1000::/home/aming:/bin/bashaming2:x:1001:1001::/home/aming2:/bin/bashaming3:x:1002:1002::/home/aming3:/bin/bash[root@aming1 ~]#

-u 与 -g 自定义UID与用户组

[root@aming1 ~]# tail -3 /etc/groupaming:x:1000:aming2:x:1001:aming3:x:1002:[root@aming1 ~]# useradd -u 1111 -g aming linyu1[root@aming1 ~]# tail -n2 /etc/passwdaming3:x:1002:1002::/home/aming3:/bin/bashlinyu1:x:1111:1000::/home/linyu1:/bin/bash

用 -d -s 自定义家目录与shell

[root@aming1 ~]# useradd -u 1113 -g aming -d /home/linyu111 -s /sbin/nologin linyu3[root@aming1 ~]# tail -n2 /etc/passwdlinyu2:x:1112:1000::/home/aming:/sbin/nologinlinyu3:x:1113:1000::/home/linyu111:/sbin/nologin

-M:表示不建立家目录(并不是该用户没有家目录,只是没有创建)

[root@aming1 ~]# useradd -M user1[root@aming1 ~]# tail -n1 /etc/passwduser1:x:1114:1114::/home/user1:/bin/bash[root@aming1 ~]# ls /home/aming aming2 aming3 linyu1 linyu111

用户的家目录是可以更改的。可vi编辑etc/passwd 直接更改,

家目录是可以手动创建的。但是新建用户的家目录光有空文件夹不行,里面还要有bash ,不然会显示不正常。,在ls -la /etc/skel/ 有用户配置文件的模板,这里有模板,cp到新建的家目录里就可以了。然后赋予该目录有该用户与组的权限!

[root@aming1 ~]# ls -la /etc/skel/ 总用量 24drwxr-xr-x. 2 root root 62 3月 17 18:59 .drwxr-xr-x. 77 root root 8192 5月 19 15:02 ..-rw-r--r--. 1 root root 18 8月 3 .bash_logout-rw-r--r--. 1 root root 193 8月 3 .bash_profile-rw-r--r--. 1 root root 231 8月 3 .bashrc

cp /etc/skel/.bash* /home/user

userdel 删除用户的命令。

[root@aming1 ~]# userdel linyu3[root@aming1 ~]# tail -n3 /etc/passwdlinyu1:x:1111:1000::/home/linyu1:/bin/bashlinyu2:x:1112:1000::/home/aming:/sbin/nologinuser1:x:1114:1114::/home/user1:/bin/bash[root@aming1 ~]# ls /home/aming aming2 aming3 linyu1 linyu111

可以看到删除用户后,用户的家目录并没有被删除。(留给管理员,确定这个家目录没有用了之后在手动删掉。)

userdel -r 选项可以连同用户家目录同时删除。

用户组管理

groupadd 增加组命令

[root@aming1 ~]# groupadd grp1[root@aming1 ~]# tail -n1 /etc/groupgrp1:x:1002:

用-g自定义新建用户组的gid 。groupadd -g 1006 group4

[root@localhost ~]# groupadd -g 1006 group4[root@localhost ~]# tail -n5 /etc/groupchrony:x:995:grp1:x:1000:grp2:x:1001:grp3:x:1002:group4:x:1006:

一般新建的组或者用户都是从1000 gid/uid开始的。1000以前都是为系统来保留的。

用户组管理文件 (还有用户组的密码文件在etc/gshadow)

[root@aming1 ~]# cat /etc/grouproot:x:0:bin:x:1:daemon:x:2:sys:x:3:adm:x:4:games:x:20:tape:x:30:video:x:39:ftp:x:50:lock:x:54:audio:x:63:utempter:x:35:ssh_keys:x:999:input:x:998:systemd-journal:x:190:systemd-bus-proxy:x:997:systemd-network:x:192:dbus:x:81:polkitd:x:996:tss:x:59:dip:x:40:postdrop:x:90:postfix:x:89:sshd:x:74:chrony:x:995:aming:x:1000:aming2:x:1001:[root@aming1 ~]#

groupdel 删除组命令

[root@aming1 ~]# groupdel grp1[root@aming1 ~]# tail -n2 /etc/grogroff/ group group- [root@aming1 ~]# tail -n2 /etc/groupaming:x:1000:aming2:x:1001:

不能直接删除有用户的组。需要先删除用户,在删除用户组。

系统自动备份用户,用户组管理及密码文件

[root@localhost ~]# ls /etc/passwd/etc/passwd[root@localhost ~]# ls /etc/passwdpasswd passwd- [root@localhost ~]# ls /etc/shadowshadow shadow- [root@localhost ~]# ls /etc/shadowshadow shadow- [root@localhost ~]# ls /etc/gsgshadow gshadow- gss/

后面带“-”号的文件就是系统自动备份的文件。

如果误删了配置文件可以copy一份带“-”号的进行恢复。

不过备份文件可能稍有误差,比如刚刚建立的用户还没有备份。恢复的时候就没有哪些没来得及备份的用户。

usermod 更改用户属性的命令

以下是用法:

usermod – u 111 username 更改uid

usermod -g 1010 username 更改 gid

usermod –d /home/safasfa username 更改家目录

usermod -s /sbin/nologin username 更改shell

usermod –G 添加扩展组

每个用户可以通过 id username命令来查看一个用户的uid,gid,组,扩展组的。

[root@aming1 ~]# id aming2uid=1001(aming2) gid=1001(aming2) 组=1001(aming2)

usermod –G 添加扩展组

[root@aming1 ~]# usermod -G aming aming2 [root@aming1 ~]# id aming2uid=1001(aming2) gid=1001(aming2) 组=1001(aming2),1000(aming)

增加多个扩展组,

[root@aming1 ~]# usermod -G aming,grp1 aming2 [root@aming1 ~]# id aming2uid=1001(aming2) gid=1001(aming2) 组=1001(aming2),1000(aming),1115(grp1)

如果不像上面那样添加,直接-G添加就会把之前的扩展组替换掉。用 -g 则不会。

用户密码管理

passwd 更改用户密码

更改root密码直接输入 passwd

[root@aming1 ~]# passwd更改用户 root 的密码 。新的 密码:重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。

更改用户密码需要passwd 加上用户名字(passwd 因为有set_uid 所以可以让普通用户更改自己密码的权限)

[root@aming1 ~]# passwd aming更改用户 aming 的密码 。新的 密码:重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。

一键更改密码命令(这种用法通常在写脚本的时候会用的到)

一键更改密码:echo "密码" | passwd --stdin 用户名

[root@aming1 ~]# echo "123456" |passwd --stdin aming更改用户 aming 的密码 。passwd:所有的身份验证令牌已经成功更新。

一键更改密码:echo -e "密码\n密码" |passwd 用户名

echo -e 对转义字符的输出不一样,比如echo "\n"会直接输出\n,而echo -e "\n"会输出一个换行。

[root@aming1 ~]# echo "123456\n123456"123456\n123456[root@aming1 ~]# echo -e "123456\n123456"123456123456[root@aming1 ~]# echo -e "123456\t123456"123456123456

[root@aming1 ~]# echo -e "123456\n123456"123456123456[root@aming1 ~]# echo -e "123456\n123456" |passwd aming更改用户 aming 的密码 。新的 密码:无效的密码: 密码少于 8 个字符重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。

锁定账户 passwd -l 账户

[root@aming1 ~]# passwd -l aming锁定用户 aming 的密码 。passwd: 操作成功[root@aming1 ~]# passwd -u aming解锁用户 aming 的密码。passwd: 操作成功

passwd -l aming 锁定aming用户

passwd –u aming 解锁aming用户

usermod –L aming 也是锁定用户

usermod –U aming 解锁用户

mkpasswd 生成密码的小工具

用来生成密码的小工具,默认系统没有的,需要安装一个包,yum install –y expect

默认生成9位的高强度的字符串。

[root@aming1 ~]# mkpasswdi48ESr(wj

生成12位字符 mkpasswd -l 12

[root@localhost ~]# mkpasswd -l 122hrWZ$jdxqj0

生成3个特殊字符mkpasswd -l 12 –s 3

[root@localhost ~]# mkpasswd -l 12 -s 35wi8Foh=:Vo\

生成0个特殊字符 mkpasswd -l 12 –s 0

[root@localhost ~]# mkpasswd -l 12 -s 0b0bfIodJzd8x

su 切换用户命令

用法:su - username

中间要加上“-” ,如果不加切换不彻底。试一下加与不加的区别。

[root@localhost ~]# pwd/root[root@localhost ~]# su user1[user1@localhost root]$ pwd/root[user1@localhost root]$ su - user1密码:上一次登录:四 8月 17 09:24:20 CST pts/0 上[user1@localhost ~]$ pwd/home/user1

who 命令查看当前登陆用户。

[root@aming1 ~]# who rootpts/0 -05-20 14:50 (192.168.159.1)

用 su - -c "命令" username 可以指定用户来运行一条命令而不需要登陆该用户。

比如用su - -c 到aming3用户下创建一个aming.112文件。

[root@localhost ~]# su - -c "touch /tmp/aming.112" user3[root@localhost ~]# ls -lt /tmp/ |head总用量 4-rw-r--r--. 1 user3 grp1 0 8月 17 09:28 aming.112drwx------. 3 root root 17 8月 17 09:17 systemd-private-962282525abe4fc2ab6e64178898e746-vmtoolsd.service-QxhA0Gdrwx------. 3 root root 17 8月 16 09:41 systemd-private-b722b0a8816847f48d10110cb8143b36-vmtoolsd.service-i4Qxrzdrwx------. 3 root root 17 8月 15 19:02 systemd-private-120e72494534457f832c658a3c0fe839-vmtoolsd.service-TjInFDdrwx------. 3 root root 17 8月 15 00:18 systemd-private-2a54bfd43862496f9954bc45a0ed32f5-vmtoolsd.service-dGG7hcdrwx------. 3 root root 17 8月 15 00:04 systemd-private-782e234483844c55bea315a060f5d536-vmtoolsd.service-xP7CVe-rwx------. 1 root root 836 8月 15 00:03 ks-script-qSyJ_w-rw-------. 1 root root 0 8月 14 23:56 yum.log[root@localhost ~]# date 08月 17日 星期四 09:29:26 CST[root@localhost ~]# id user3uid=1005(user3) gid=1000(grp1) 组=1000(grp1)

sudo 临时赋予指定用户的权限,而不用输入该用户的密码。

为了更加安全,可以用sudo命令来进行临时赋予指定用户的权限,一般情况下赋予root权限。这样不需要每个人都知道root的密码保证了安全。

先看看sudo的配置文件visudo 命令查看

要用visudo命令来进行查看,这样可以检测到有没有语法错误,此文件是非常重要的,如果用vi 改错了, 也不会有提示。这样比较危险和麻烦。

[root@localhost ~]# visudo## Sudoers allows particular users to run various commands as## the root user, without needing the root password.#### Examples are provided at the bottom of the file for collections## of related commands, which can then be delegated out to particular## users or groups.#### This file must be edited with the 'visudo' command.## Host Aliases## Groups of machines. You may prefer to use hostnames (perhaps using## wildcards for entire domains) or IP addresses instead.# Host_AliasFILESERVERS = fs1, fs2# Host_AliasMAILSERVERS = smtp, smtp2## User Aliases## These aren't often necessary, as you can use regular groups## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname## rather than USERALIAS# User_Alias ADMINS = jsmith, mikem## Command Aliases## These are groups of related commands...## Networking# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool"/etc/sudoers.tmp" 111L, 3907C

这个配置文件里最重要的配置在这条:允许root用户在任何地方运行所有命令

## Allow root to run any commands anywhereroot ALL=(ALL) ALL

如果让user1用户也在所有地方运行某些命令,需要在下面加上一行。

## Allow root to run any commands anywhereroot ALL=(ALL) ALLuser1 ALL=(ALL) ls,mv,cat **或者写ALL代表可以运行所有目录****:wq**保存后有报错visudo:>>> /etc/sudoers:syntax error 在行 92 附近<<<现在做什么?选项有:重新编辑 sudoers 文件(e)退出,不保存对 sudoers 文件的更改(x)退出并将更改保存到 sudoers 文件(危险!)(Q)------------------------------------**这个就是visudo命令的好处,提示92行有语法错误。按“e”重新编辑**------------------------------------**输入:set nu来查看行数**88 ## The COMMANDS section may have other options added to it.89 ##90 ## Allow root to run any commands anywhere91 root ALL=(ALL) ALL 92 user1 ALL=(ALL) ls,mv,cat93 ## Allows members of the 'sys' group to run networking, software,------------------------------------**正确的语法如下**90 ## Allow root to run any commands anywhere91 root ALL=(ALL) ALL(root ALL=(ALL) ALL的意思是限制在哪里登陆。all就是没有限制,也可以写成IP 访问部门多的时候用IP段来限制登陆 ,)92 user1 ALL=(ALL) /usr/bin/ls, /usr/bin/mv, /usr/bin/cat (这个位置要加绝对路径)93 ## Allows members of the 'sys' group to run networking, software,

普通ls命令是查看不了root目录的,更改完配置文件,用sudo就可以了。第一次需要输入用户的密码。

[user1@localhost ~]$ ls /root/ls: 无法打开目录/root/: 权限不够[user1@localhost ~]$ sudo ls /root/We trust you have received the usual lecture from the local SystemAdministrator. It usually boils down to these three things:#1) Respect the privacy of others.#2) Think before you type.#3) With great power comes great responsibility.[sudo] password for user1: anaconda-ks.cfg[user1@localhost ~]$

如果想用sudo 第一次不输入密码,需要在visudo里配置“NOPASSWD:”

## Allow root to run any commands anywhereroot ALL=(ALL) ALLuser1 ALL=(ALL) /usr/bin/ls, /usr/bin/mv, /usr/bin/catuser2 ALL=(ALL) NOPASSWD: /usr/bin/ls, /usr/bin/mv, /usr/bin/cat

已经不用输入密码了

[root@localhost ~]# su - user2[user2@localhost ~]$ ls /root/ls: 无法打开目录/root/: 权限不够[user2@localhost ~]$ sudo ls /root/anaconda-ks.cfg[user2@localhost ~]$

增加命令别名 Cmnd_Alias AMING_CMD = /usr/bin/ls, /usr/bin/mv, /usr/bin/cat

模仿系统写一个命令别名。

## Networking# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-toolCmnd_Alias AMING_CMD = /usr/bin/ls, /usr/bin/mv, /usr/bin/cat

写好后那么AMING_CMD这个命令就代表了,ls,mv,cat,这三条命令。

然后可以把以下内容

## Allow root to run any commands anywhereroot ALL=(ALL) ALLuser1 ALL=(ALL) /usr/bin/ls, /usr/bin/mv, /usr/bin/cat

换成

## Allow root to run any commands anywhereroot ALL=(ALL) ALLuser1 ALL=(ALL) AMING_CMD

这样增加也是可以的。

限制root远程登陆

如果公司每个人用root密码来进行远程登陆,这样就非常危险的。如果密码泄露,其他人就可以远程登陆到root下。

所以要限制root用户进行远程登陆,限制之后可以使用sudo su - 来进行切换root用户

首先在visudo里面设置用户组别名,把用户都加入进去

# User_Alias ADMINS = jsmith, mikemUser_Alias AMINGS = user1, user2, user3

然后设置输入sudo su -命令不用输入密码。并且设置该用户可以使用su命令。

## Allow root to run any commands anywhereroot ALL=(ALL) ALLAMINGS ALL=(ALL) NOPASSWD: /usr/bin/su

测试下结果,没问题

[root@localhost ~]# su - user1上一次登录:四 8月 17 10:34:39 CST pts/0 上[user1@localhost ~]$ sudo su -上一次登录:四 8月 17 10:36:13 CST pts/0 上[root@localhost ~]# whoamiroot

设置完成后,开始禁用root远程登陆

修改配置文件/etc/ssh/sshd_config

在文件中找到#PermitRootLogin yes

修改为PermitRootLogin no (去掉#号)

保存配置文件后重启服务

# systemctl restart sshd.service 重启服务命令

虽然这样做非常方便,但是为了安全和追责要有跳板机监控记录每个用户的操作。

扩展学习

sudo与su比较 /bbs/thread-7467-1-1.html

sudo配置文件样例 www./source/sudo/sudo-16/sudo/sample.sudoers

sudo不错的教程 /p/51338e41abb7

sudo -i 也可以登录到root吗? /bbs/thread-6899-1-1.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。