开发者学堂课程【系统安全及业务安全第一课时:用户系统安全】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/793/detail/13770
用户系统安全
内容简介:
一、Root用户
二、Sudo命令
三、配置sudo权限
四、配置sudo用户只能执行的特定命令
五、一些常用命令
六、设置安全提醒信息
一、Root用户
使用Root用户运维的危害:
使用Root用户来进行你的日常运维管理操作,存在极大的安全风险
· 使用Root用户更容易在意外执行有高风险命令时产生不可挽回的操作;
例如:网上常常会有一些段子,执行RM/RF和目录,导致删除了所有的文件。如果使用Root命令执行,这样的用户就会产生极大的风险,但如果使用的是一个低权限用户,执行后会提醒你权限不足,从而规避相应命令的风险。
· 需要对Root用户的账号信息进行分发,容易出现信息安全泄露的问题;
例如:假设有三个人要使用这台服务器,那么需要给这三个人发布Root账户密码,在实际使用过程中账户的使用密码进行了更新,你需要通知这三个人。此外,如果其中有人离职,而你没有及时更新Root用户密码,则可能导致用户密码会出现安全风险,比如一个人在生产服务器上进行修改。
二、Sudo用户
Sudo是一个以root用户(或其他用户)来控制运行命令访问的程序,它可以配置为允许一个用户像root用户一样来运行所有的命令,或者仅仅一些命令。你也可以配置为无需密码即可使用sudo运行命令。
使用sudo的好处:
使用sudo来进行日常运维的好处主要有以下四条:
1. 只在执行必要命令的时候使用root权限,日常运维使用其他权限,减少出现意外破坏情况的概率;
例如:如果你使用了普通用户来执行RM/RF,则只会对相应的文件进行破坏,而不会破坏整个系统的问题。
2. 获取root权限时,用户需要输入自己的密码来进行安全校验,而不是输入root用户的密码来进行校验;
例如:用户在执行时要输入自己的密码进行校验,一方面可以确保用户是当前本人,另一方面也避免了去分发root用户。
3. sudo命令可以按照用户进行安全审计,避免都使用root用户时审计不便的问题;
例如:假设有三人同时管理这台服务器,如果大家都使用root用户,那就很难区分哪条命令是哪个用户执行的但在使用sudo命令时,不同的用户在sudo命令执行的结果和返回值都是不一样的,可以借此去判断这个用户,从而更好的进行安全审计。
4. 关闭了root登录并配置sudo的情况下,可以减少黑客针对root用户进行定向爆破成功的可能性。
由于root用户是系统的默认用户,所以黑客在攻击时惠农选择root用户来进行定向爆破,如果密码是弱级别的密码,则很容易被爆破成功。但如果你关闭了root 用户登录,仅允许使用sudo,首先黑客进行root用户攻击时就无法进入到你的服务器,其次,在实际使用过程中,他即使攻克了你的个人命令,可能也没有办法去执行,因为脚本还暂时没有办法做到如此细致的攻击。
三、配置sudo权限
· 编辑/etc/sudoers文件,可以编辑具体的sudo用户权限
· 使用vim/etc/sudoers或visudo命令
#Members of the admin group may gain root privileges
%admin ALL=(ALL:ALL)ALL
#Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL)ALL
具体操作:我们登录服务器以后进入etc目录下,在这里有一个sudoers文件,在这个文件当中记录了sudo的具体的配置。而对于我们来说最为重要的便是这一行,Allows people in group wheel to run all commands,表示所有在wheel这个组的用户都可以执行所有的命令.我们除了这样的一个命令以外,我们可以发现在上方。还一个Allow root to run any commands anywhere,这是指root用户也可以在任何地方来去执行相应的命令。
除此之外,也可以根据我们的实际需要来进行一些其他的配置,比如用户可以使用sudo命令,但不输入密码,那可以在其后配置上no password or来让用户可以执行命令时无须输入密码。
此外,在上方的ALL当中有一些介绍,ALL是指networking、 software、 services、storage 、delegating、 processes、 locate和drivers等等这些信息,默认情况下我们会根据实际需要。我们填写的都是ALL,但在后续的一些信息,比如你可能有需要更详细的安全配置时,则可以根据你的需要来去配置下个命令。
简单创建一个用户,并为其赋予sudo的权限。如下图:
具体操作:先来创建一个用户,执行adduser sudoer,创建一个sudoer的一个用户,那将这个用户添加到wheel组里,可以执行groups来查看现有的组,可以执行wells。Group aad wheel来创建一个组,这时他会提示这个组已经存在,就无需再去创建了。
接下来为sudoer设定一个密码,如果没有将它添加到sudoer这个组当中时,在执行sudo时会报什么问题,执行password sudoer来去为其设定密码,设定完成密码以后,可以执行su sudoer来切换到速度命令,用户就会变成sudoer,执行pwd,发现他的home是在sudoer这个目录,接下来就可以执行sudo ls,然后他会提醒我们需要输入我们当前的密码。输入密码后会提醒我们sudoer is not in the sudoers file,这表示当前的用户并不在sudoer当中的配置 ,当前这个事件将会被报告给root用户,这样如果一个无权限的用户执行sudo命令,就会被提醒有人尝试使用sudo命令。
然后退出sudoer用户,再回到root用户当中,将当前用户添加到wealth这个组 , 执行usermod -a表示,附加一个-a 以及-G,表示我们要添加group,然后输入group名—will以及sudoer。就会为sudoer配置了wheel组,而后切换到sudoer命令。
接下来执行sudo ls,然后输入密码,就成功的执行了sudo命令(如下图),就成功地将用户配置到了sudoer当中,就可以实现用户虽然不是sudo用户,但也可以去执行一些任务命令,从而进行一些全新的配置。
四、配置sudo用户只能执行的特定命令
· 用户可以执行所有命令 bestony ALL=(ALL)ALL
· 用户只能执行一个命令 bestony ALL=(ALL)/usr/bin/systemctl status sshd
· 用户可以执行一组命令 bestony ALL=(ALL)/usr/bin/systemctl * sshd
· 用户可以执行多个命令 bestony ALL=(ALL)/usr/bin/systemctl status sshd , /usr/bin/systemctl restart sshd
· 用户只能以特定用户执行命令 bestony ALL=(admin)/usr/bin/echo_help
· sudo -u admin / usr/bin/echo_help(可以和特定用户执行组合)
五、一些常用命令
查看当前用户sudo权限
root@iZj6c3ua8so7ddub7u9jmwZ:/etc# sudo -L
Matching Defaults entries for root on iZj6c3ua8so7ddub7u9jmwZ:
env_reset, mail_badpass,
Secure_path=/usr/local/bin\:/usr/sbin\:/bin\:/usr/sbin\:/snpa/bin
User root may run the following commands on iZj6c3ua8so7ddub7u9jmwZ: //用户可以执行所有权限
(ALL : ALL) ALL
六、配置密码有效期
除了使用sudo以外,我们在实际使用过程中,我们还可以配置很多东西,去确保我们的整个用户的安全。比如说我们可以为用户来配置密码有效期。如下图:
默认情况下,我们的密码并不会有一个过期时间和一个具体的一些信息,但出于安全考虑,确实可以根据我们的需要来去修改密码的过期时间,这个部分就是我们可以通过/etc/login.defs来去设置我们的账户的默认的过期时间。具体部分设置如下:
可以查看login.defs 这个目录,可以看到在这个文件当中配置了一些具体的信息,在阿里巴巴club max当中,它默认为配置了我们的密码最大可以使用是99999天。可以根据你的需要,将它改为一个比较短的时期,比如说你可以要求用户每100天改一次,或者是每180天改一次,这样用户就可以半年改一次密码,然后来确保你的密码始终是会需要更新的。这样可以避免一个密码用好几年或可能会出现一些问题。
当然除此之外,还可以配合一些其它的信息,像一个密码最少要使用多久—如果设置为零就表示你可以随时修改密码。但是你也可以要求用户每次修改密码之间的间隔不能超过七天或者是更长的时间等等。PASS_MIN_LEN则是表示你的密码最短能够有多短,这个部分大家可以根据自己的需要来配置以及PASS_WARN_AGE也就是我们的密码在他过期前多少天开始提醒你去做相应的密码一些修改。这个部分大家都可以根据自己的需要来进行一个具体的配置,可以根据你的服务器的需要,或者是企业的安全需要来进行相应的修改。
关于密码获取时间这部分,大家可以通过修改log in defines这个文件来进行修改。
六、设置安全提醒信息
/etc/motd文件中存储的信息将会在每一个登录后展示,从而可以确保在登录到服务器后,即可看到相关内容。
root@iZj6c3ua8so7ddub7u9jmwZ:~#cat / etc /motd
Welcome to Alibaba Cloud Elastic Compute Service !
/etc/issue 文件中存储的信息将会在每一次登录前展示,你可以将一些信息设定在其中,从而确保可以让用户登录时看到。