用户是角色是通过UID和GID识别的;特别是UID,在linux系统运维工作中,一个UID是唯一标识一个系统用户的账号(相当于我们的身份证)。
linux里面的用户分为三类,
1.超级用户
默认是root用户,其UID和GID均为0.root用户在每台unix/linux操作系统中都是唯一且真实存在的,通过它可以登录系统,可以操作系统中任何文件和命令,拥有最高的管理权限。
在生产环境中,一般会禁止root账号通过SSH远程连接服务器(保护好皇帝),当然了,也会更改默认的SSH端口(保护好皇宫),以加强系统安全。
2.普通用户
su - root,角色切换,农民起义,推翻皇帝,自己当皇帝。
3.虚拟用户
与真实普通用户区分开来,这类用户最大的特点是安装系统后默认就会存在,且默认情况大多数不能登录系统,但是,他们是系统正常运行不可缺少的,它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。例如:系统默认的bin、adm、nobody、mail用户等。由于服务器业务角色的不同,有部分用不到的系统服务被禁止开机执行,因此,在做系统安全优化时,被禁止开机启动了的服务对应的虚拟用户也是可以处理掉的(删除或注释)。
linux安全优化:
1、安装系统后可以删除用不到的虚拟用户,但最好不删而注释掉,万一出问题可以恢复回来。
2、我们自已部署服务的时候,也会创建虚拟用户,满足服务的需求!例如:
apache,nginx,mysql,nfs,rsync,nagios,zabbix,redis。
UID为0是表示账号为超级用户,如需增加系统管理员账号可将该账号UID改为0,但建议用sudo替代
UID 1-499 为虚拟用户
UID 500-65535 为普通用户
linux系统下的账户文件主要有/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow四个文件。
这个目录存放了新添加用户的环境变量
当我们useradd 创建一个用户时,会从这个目录中复制所有文件到用户的家目录中,相当于使用cp -a /etc/skel/* /home/oldboy/
通过修改、添加、删除/etc/skel目录下的文件,我们可以为新创建的用户提供统一的、标准的、初始化用户环境
作用:
1. 可以把通知的内容放到skel,让登录的人去看
2. 统一初始化新用户的环境变量
3. 面试题:出现-bash-4.1$问题原因及解决方法。
cp /etc/skel/.bash* ~
文件是用来定义创建用户时需要的一些用户的配置信息。如创建用户时,是否需要家目录,UID和GID的范围,用户及密码的有效期限等等。
/etc/default/useradd文件是在使用useradd添加用户时的一个需要条用的一个默认的配置文件,可以使用“useradd -D 参数”,这样的命令格式来修改文件里面的内容。我们先来看一看它的内容:
[root@long ~]# cat /etc/default/useradd # useradd defaults file GROUP=100 HOME=/home #默认的家目录 INACTIVE=-1 #是否启用账号过期停权,-1表示不启用。 EXPIRE= #账号终止日期,不设置表示不启用。 SHELL=/bin/bash #新用户默认所用的shell类型。 SKEL=/etc/skel #配置新用户家目录的默认文件存放路径。前文件提到的/etc/skell,就是配在这里 CREATE_MAIL_SPOOL=yes #创建mail文件
[root@oldboyedu ~]# #添加用户alex12306,UID指定为999,归属为用户组 root、oldboy、sa成员,并设置其用户注释信息为HandsomeBoy,设置家目录为/alex12306,其shell类型为/bin/sh。 [root@oldboyedu ~]# groupadd sa [root@oldboyedu ~]# useradd -u 999 -G root,oldboy,sa -c "HandsomeBoy" -d /alex12306 -s /bin/sh alex12306 [root@oldboyedu ~]# id alex12306 uid=999(alex12306) gid=999(alex12306) groups=999(alex12306),0(root),510(oldboy),519(sa) [root@oldboyedu ~]# tail -1 /etc/passwd alex12306:x:999:999:HandsomeBoy:/alex12306:/bin/sh [root@oldboyedu ~]# su - alex12306 -sh-4.1$ logout [root@oldboyedu ~]# ll -d /alex12306/ drwx------ 2 alex12306 alex12306 4096 Feb 14 18:56 /alex12306/
在实际工作中,最常用的用法就是直接使用passwd加用户名设置和修改密码,其次是加--stdin参数批量无交互设置密码,其他的参数用的很少(包括-l,-u,-S等)
在生产场景中,我们的密码应尽可能的复杂且无规律,但又利于用户自已记忆
企业场景:
1. 密码要复杂8位以上字母特殊字符
2. 大的企业用户和密码统一管理(相当于活动目录,openldap)
3. 动态密码:动态口令,第三方提供自已开发也很简单。
4. /var/log/secure
5. 指纹(find+md5sum+定时任务)
6. 锁头chattr +i +a lsattr
示例:要求oldboy666用户7天内不能更改密码,60天以后必须修改密码,过期前10天通知oldboy666用户,过期后30天禁止用户登录
[root@34moban ~]# useradd oldboy666 [root@34moban ~]# passwd oldboy666 Changing password for user oldboy666. New password: BAD PASSWORD: it is too simplistic/systematic BAD PASSWORD: is too simple Retype new password: passwd: all authentication tokens updated successfully. [root@34moban ~]# passwd -n 7 -x 60 -w 10 -i 30 oldboy666 Adjusting aging data for user oldboy666. passwd: Success [root@34moban ~]# chage -l oldboy666 Last password change : Feb 15, 2017 Password expires : Apr 16, 2017 Password inactive : May 16, 2017 Account expires : never Minimum number of days between password change : 7 Maximum number of days between password change : 60 Number of days of warning before password expires : 10 chage -m 7 -M 60 -W 10 -I 30 oldboy ?chage -m7 -M60 -W10 -I30
和用户关联的四个文件:
/etc/passwd, /etc/shadow /etc/group /etc/gshadow
以上文件内容是由冒号分隔: /etc/passwd内容比较熟悉(放在大脑里),其它在大脑建立索引。
小结:
/etc/skel
/etc/login.defs
/etc/default/useradd
命令:
useradd(/etc/passwd,/etc/shadow /etc/group /etc/gshadow)
passwd(/etc/shadow)
groupadd(/etc/group)
chage(/etc/shadow)
userdel 命令功能是删除用户及用户相关信息,相关文件:
/etc/passwd 用户账户资料文件
/etc/shadow 用户账户资讯加密文件
/etc/group 用户资讯文件
/etc/gshadow 用户组密码资讯文件
userdel -r 用户目录下的档案一并移除。在其他位置上的相关文件件也将一一找出并删除
相关文件
/etc/passwd 用户账号资料文件
/etc/shadow 用户账号资讯加密文件
/etc/group 用户组资讯文件
企业场景处理文件:
一般不能确认用户相关目录有没有重要数据就不能用-r
删除经验:
1. vi /etc/passwd 注释掉用户,观察1个月,出问题还原。操作前备份。
2. 把登录shell改成/sbin/nologin
3. ldap(类似活动目录)账号统一管理的,库里干掉用户。全部都没了、
usermod命令功能十分强大,在生产场景中使用频率虽然不是很多,但很重要。它不仅能更改用户的shell类型,所归属的用户组,还能改用户密码有效期、登录名等很多用户的信息。
与usermod命令有关的文件有:
/etc/passwd 用户账号资料文件
/etc/shadow 用户账号资讯加密文件
/etc/group 用户组资讯文件
/etc/gshadow 组密码文件
su命令优缺点
su命令为我们管理系统带来很多方便,但是,通过su命令切换到root后,也带来了很大安全管理问题;比如系统有8个普通用户,都可以通过切换到root身份进行系统管理,甚至还可以改掉root的密码,让其他的普通用户无法再实现系统管理,还有,这么多用户中,有任何一人对系统操作的重大失误,都可能导致整个系统崩溃或数据损失。这样的非集权式管理,在一定程度上就对系统的安全造成了较大威胁。在工作中几乎有一半的问题来自于内部。
所以使用su命令切换身份在多个系统管理员共同管理的场合,并不是最好的选择,如果是一般的中小公司不超过3个管理员时,为了管理方便,使用su来共同管理是可以接受的。
我们既希望超级用户root密码掌握在少数或唯一的管理员手中,又希望多个系统管理员能够完成更多更复杂的系统管理的工作。那么,如何解决多个系统管理员都能管理系统的而又不让超级权限泛滥的需求
把要执行的脚本放入开机自启动配置文件/etc/rc.local中。
su - tddoc -c ‘/bin/sh /home/tddoc/bin/deploy.sh‘
注意,这里就是在系统开机时,通过su - 用户-c “cmd”,执行的启动服务的命令,其中,
/bin/sh /home/tddoc/bin/deploy.sh就是仅能在tddoc用户下启动的服务命令脚本。通过普通用户跑服务是个很好的提升系统安全的好办法,在生产环境中,大多数的服务都可以通过普通用户来启动,而不用root。这样做,使得系统安全又提高了一个等级。目前,BAT等大公司均有采用。
1. echo命令是追加">>",不是重定向“>”,陈了echo外,可以用cat,sed等命令实现类似的功能。
2. 修改操作完成一定要执行visudo -c进行语法检查,这弥补了直接修改没有语法检查的不足。
3. 确保/etc/sudoers权限是正确的(-r--r-----),权限不对会导致sudo功能异常(Centos6权限不对也可以登录,但是/etc/sudoers440是最安全的)
4. 及时对授权的操作进行测试,验证是否正确(最好不要退出当前授权窗口,以便发现问题及时恢复)
5. 确保知道正确的root用户密码,以便在sudo出现问题时可以通过普通用户等执行su -命令切换到root进行恢复。
说明:
1. 在生产场景中,一般情况不需要设置主机别名,在定义授权规则时可以通过ALL来匹配所有的主机。
2. 请注意上面定义的规范,有些规范虽然不是必须的,但我们还是要求能够按照系统的标准来配置,这样可以避免意外的问题发生。
3. 以上Host Aliases内容截取自/etc/sudoers文件,最后两行取消了注释。
4. 其实就是一个逻辑上的主机组,当多台服务器共享一个/etc/sudoers时候会用到这个主机别名。
原文:http://www.cnblogs.com/Csir/p/6403830.html