13 linux用户管理:用户有关的文件及目录,用户相关的命令,项目sudo权限集中管理,日志审计项目
linux用户管理
1.面试题:让一个命令或者脚本开机自启动有何办法?
法一:将命令或者脚本放入/etc/rc.local文件中即可。
[root@oldboyedu-01 ~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 Dec 11 22:13 /etc/rc.local -> rc.d/rc.local
[root@oldboyedu-01 ~]# cat /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
法二:让命令或者脚本通过chkconfig进行管理。
[root@oldboyedu-01 ~]# cat /etc/init.d/oldboyd //1.该脚本放入/etc/init.d/下
echo oldboy_chkconfig.com
[root@oldboyedu-01 ~]# ll /etc/init.d/oldboyd
-rw-r--r-- 1 root root 26 Jan 7 04:01 /etc/init.d/oldboyd
[root@oldboyedu-01 ~]# chmod +x /etc/init.d/oldboyd //2.加权限
[root@oldboyedu-01 ~]#
[root@oldboyedu-01 ~]# ll /etc/init.d/oldboyd
-rwxr-xr-x 1 root root 26 Jan 7 04:01 /etc/init.d/oldboyd
[root@oldboyedu-01 ~]# cat /etc/init.d/oldboyd //3.脚本符合chkconfig管理格式
# chkconfig: 2345 98 99
echo oldboy_chkconfig.com
说明:注意格式书写!
2345 表示默认在哪个运行级别上开机自启动
98 表示开机的顺序
99 表示关机的顺序
[root@oldboyedu-01 ~]# chkconfig --add oldboyd //4.加入chkconfig管理列表中并检查
[root@oldboyedu-01 ~]# chkconfig |grep oldboyd
oldboyd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
2.用户分类-passwd文件详解
用户相关的配置文件:
root@oldboyedu-01 ~]# ll /etc/passwd /etc/shadow /etc/group /etc/gshadow
-rw-r--r-- 1 root root 1140 Dec 12 09:23 /etc/passwd //用户的信息
---------- 1 root root 852 Dec 12 09:23 /etc/shadow //用户的密码信息
-rw-r--r-- 1 root root 600 Dec 12 09:23 /etc/group //用户的用户组信息
---------- 1 root root 490 Dec 12 09:23 /etc/gshadow//用户组的密码信息
[root@oldboyedu-01 ~]# useradd meng
[root@oldboyedu-01 ~]# ll /etc/passwd /etc/shadow /etc/group /etc/gshadow
-rw-r--r-- 1 root root 612 Jan 7 04:54 /etc/group
---------- 1 root root 499 Jan 7 04:54 /etc/gshadow
-rw-r--r-- 1 root root 1177 Jan 7 04:54 /etc/passwd
---------- 1 root root 879 Jan 7 04:54 /etc/shadow
/etc/passwd --用户的信息
[root@oldboyedu-01 ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu-01 ~]# grep nobody /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
[root@oldboyedu-01 ~]# tail -1 /etc/passwd
meng:x:502:502::/home/meng:/bin/bash
说明:
用户名,密码,用户的UID,GID,用户的说明信息(默认空),用户的家目录,用户使用的命令解释器shell。
[root@oldboyedu-01 ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
虚拟用户,傀儡用户(UID:1-499):
每个程序、服务运行的时候都需要一个用户和用户组。使用命令解释器/sbin/nologin说明了其为虚拟用户,傀儡用户!
特点:虚拟用户不需要用来登录系统。
3.与用户相关的目录/etc/skel/--linux新用户家目录的模板
核心:useradd meng ==> /home/meng,创建新用户时自动复制该目录。
[root@oldboyedu-01 ~]# ls -al /etc/skel/
total 20
drwxr-xr-x. 2 root root 4096 Dec 11 22:10 .
drwxr-xr-x. 78 root root 4096 Jan 7 04:54 ..
-rw-r--r--. 1 root root 124 Mar 23 2017 .bashrc //相当于/etc/bashrc,存放用户自己的别名
-rw-r--r--. 1 root root 176 Mar 23 2017 .bash_profile //相当于/etc/profile,存放用户自己的环境变量和别名
-rw-r--r--. 1 root root 18 Mar 23 2017 .bash_logout //在用户退出登录时执行的
登录环境故障问题-bash-4.1$ 解决:
环境模拟:
root@oldboyedu-01 ~]# id meng
uid=502(meng) gid=502(meng) groups=502(meng)
[root@oldboyedu-01 ~]# su - meng
[meng@oldboyedu-01 ~]$ whoami
meng
[meng@oldboyedu-01 ~]$ \rm -f .*
rm: cannot remove `.': Is a directory
rm: cannot remove `..': Is a directory
//注意:命令行中.*十分危险!包括上一级目录。
[meng@oldboyedu-01 ~]$ logout
[root@oldboyedu-01 ~]# su - meng
-bash-4.1$
-bash-4.1$ whoami
meng
-bash-4.1$ cp /home/oldboy/.bash* ~ //该方法不行!
cp: cannot stat `/home/oldboy/.bash*': Permission denied
-bash-4.1$ whoami
meng
-bash-4.1$ ls -ld /home/oldboy/
drwx------. 2 oldboy oldboy 4096 Dec 12 04:15 /home/oldboy/
-bash-4.1$ cp /etc/skel/.bash* ~ //该方法ok!
-bash-4.1$ logout
[root@oldboyedu-01 ~]# su - meng
[meng@oldboyedu-01 ~]$ whoami
meng
4.用户管理
useradd
-u 指定用户的UID
-s 指定用户使用的shell
/bin/bash(默认)
/sbin/nologin(虚拟用户)
-M 不创建家目录
-g 指定用户属于哪个用户组
eg:添加一个uid为888的虚拟用户叫alex888,//禁止用户登录,不创建家目录。
[root@oldboyedu-01 ~]# id alex999
id: alex999: No such user
[root@oldboyedu-01 ~]# useradd -u 888 -s /sbin/nologin -M alex999 //
[root@oldboyedu-01 ~]# id alex999
uid=888(alex999) gid=888(alex999) groups=888(alex999)
[root@oldboyedu-01 ~]# tail -3 /etc/passwd
mysql:x:501:501::/home/mysql:/sbin/nologin
meng:x:502:502::/home/meng:/bin/bash
alex999:x:888:888::/home/alex999:/sbin/nologin
[root@oldboyedu-01 ~]# ls -al /home/alex999 //其实不存在
ls: cannot access /home/alex999: No such file or directory
[root@oldboyedu-01 ~]# vim /etc/passwd //一般不建议直接删除用户(有重要数据),可注释该用户。
[root@oldboyedu-01 ~]# tail -1 /etc/passwd
#alex999:x:888:888::/home/alex999:/sbin/nologin
[root@oldboyedu-01 ~]# id alex999
id: alex999: No such user
userdel 默认不删除用户的家目录和邮箱。
-r 连窝端删除与用户有关的所有信息(家目录)
usermod
-s 指定用户使用的shell
/bin/bash(默认)
/sbin/nologin(虚拟用户)
-g 指定用户属于哪个家庭 用户组,主要的。
-G 属于多个家庭,附加的。
[root@oldboyedu-01 ~]# vim /etc/passwd
[root@oldboyedu-01 ~]# grep alex999 /etc/passwd
alex999:x:888:888::/home/alex999:/sbin/nologin
[root@oldboyedu-01 ~]# usermod -s /bin/bash alex999 //-s 修改所属命令解释器
[root@oldboyedu-01 ~]# grep alex999 /etc/passwd
alex999:x:888:888::/home/alex999:/bin/bash
[root@oldboyedu-01 ~]# id alex999
uid=888(alex999) gid=888(alex999) groups=888(alex999)
[root@oldboyedu-01 ~]# usermod -g oldboy alex999 //-g 修改所属组
[root@oldboyedu-01 ~]# id alex999
uid=888(alex999) gid=500(oldboy) groups=500(oldboy)
passwd 用户密码管理
[root@oldboyedu-01 ~]# passwd meng //单个用户设置密码
Changing password for user meng.
New password: 123456
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password: 123456
passwd: all authentication tokens updated successfully.
[root@oldboyedu-01 ~]# echo 123456|passwd --stdin meng //--stdin 从管道前面获取密码
Changing password for user meng.
passwd: all authentication tokens updated successfully.
[root@oldboyedu-01 ~]# history -c //清除痕迹
保存密码软件:最好去官网下载软件。
keepass软件--密码存放在本地,本地保险柜。
lastpass在线版本--银行的保险柜。
大的企业用户和密码统一管理。
动态密码:动态口令。第三方提供自己开发也很简单,收费。
如何让系统更加安全:
(1)最小化:安装系统;安装软件。
(2)保护好root:
禁止root用户远程登录;
修改远程连接端口号22;// /var/log/secure日志的分析:failure或者failed
(3)文件系统权限:
给系统常用命令+i
给系统配置文件+a
(4)给重要的文件或者命令 做一个指纹:
指纹验证:
[root@oldboyedu-01 oldboy]# pwd
/oldboy
[root@oldboyedu-01 oldboy]# touch finger.txt
[root@oldboyedu-01 oldboy]# md5sum finger.txt //1.创建、采集指纹并保存。
d41d8cd98f00b204e9800998ecf8427e finger.txt
[root@oldboyedu-01 oldboy]# md5sum finger.txt >finger.log
[root@oldboyedu-01 oldboy]# cat finger.log
d41d8cd98f00b204e9800998ecf8427e finger.txt
[root@oldboyedu-01 oldboy]# echo test >>finger.txt
[root@oldboyedu-01 oldboy]# md5sum finger.txt //对比指纹是否变化,验证指纹
d8e8fca2dc0f896fd7cb4cb0031ba249 finger.txt
[root@oldboyedu-01 oldboy]# md5sum -c finger.log //2.指定指纹库快速对比指纹是否变化,验证指纹
finger.txt: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match
//3.定时任务+md5sum定时检查
chown
-R 递归修改文件或目录的所有者和用户组
[root@oldboyedu-01 ~]# ll /oldboy/test.txt
-rw-r--r-- 1 root root 31 Dec 30 19:04 /oldboy/test.txt
[root@oldboyedu-01 ~]# chown mysqltest /oldboy/test.txt //只修改了文件的所有者
[root@oldboyedu-01 ~]# ll /oldboy/test.txt
-rw-r--r-- 1 mysqltest root 31 Dec 30 19:04 /oldboy/test.txt
[root@oldboyedu-01 ~]# chown mysqltest.meng /oldboy/test.txt //修改了文件的所有者和所属组
[root@oldboyedu-01 ~]# ll /oldboy/test.txt
-rw-r--r-- 1 mysqltest meng 31 Dec 30 19:04 /oldboy/test.txt
groupadd 创建用户组
-g 指定用户组的gid数字
eg:添加一个虚拟用户mysqltest,指定用户的uid,gid都是999.
[root@oldboyedu-01 ~]# useradd -u 999 -s /sbin/nologin -M mysqltest
[root@oldboyedu-01 ~]# id mysqltest
uid=999(mysqltest) gid=999(mysqltest) groups=999(mysqltest)
用户查询命令:
(1)id查看用户的信息(某用户存在与否;查询用户的uid,gid;属于哪个用户组等)
(2)w 显示系统中已经远程登录的用户 干啥

-----图91
[root@oldboyedu-01 ~]# w
08:15:14 up 4:26, 3 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 03:55 4:19m 0.05s 0.05s -bash
root pts/0 10.0.0.1 03:55 53:50 0.31s 0.31s -bash
root pts/1 10.0.0.1 07:51 0.00s 0.10s 0.02s w
(3)查看系统性能命令:
w 显示系统中已经远程登录的用户 干啥
uptime
top ==>ps -ef
[root@oldboyedu-01 ~]# uptime //1
08:38:05 up 4:49, 4 users, load average: 0.00, 0.00, 0.00
[root@oldboyedu-01 ~]# free -h //2
total used free shared buffers cached
Mem: 3.7G 393M 3.3G 232K 72M 175M
-/+ buffers/cache: 144M 3.6G
Swap: 767M 0B 767M
[root@oldboyedu-01 ~]# ps -ef //3
htop 增强型top
iotop 显示系统中每个进程使用的磁盘io
iftop 显示系统网络流量
(4)last 哪个用户在什么时候 从哪里 远程登录你的系统 用户登陆的信息
(5)lastlog 显示linux中所有用户最近一次远程登录的信息
权限管理
su 和 su -区别?
-是su的参数,等价于-,-l,--login 切换用户的时候更新与用户有关的环境变量。
[root@oldboyedu-01 ~]# su oldboy
[oldboy@oldboyedu-01 root]$ pwd
/root
[oldboy@oldboyedu-01 root]$ exit
[root@oldboyedu-01 ~]# su - oldboy
[oldboy@oldboyedu-01 ~]$ pwd
/home/oldboy
[oldboy@oldboyedu-01 ~]$ logout
[root@oldboyedu-01 ~]# id oldboy
uid=500(oldboy) gid=500(oldboy) groups=500(oldboy)
如何让开发人员(普通用户)可以看系统日志?
[meng@oldboyedu-01 ~]$ tail -5 /var/log/secure
tail: cannot open `/var/log/secure' for reading: Permission denied
[meng@oldboyedu-01 ~]$ ll /var/log/secure /var/log/messages
-rw------- 1 root root 481 Jan 7 08:27 /var/log/messages
-rw------- 1 root root 3863 Jan 7 09:30 /var/log/secure
sudo方法--让普通用户临时成为root。
给开发人员配置尚方宝剑:
[meng@oldboyedu-01 ~]$ whoami
meng
[meng@oldboyedu-01 ~]$ sudo -l //1.查看当前用户是否有尚方宝剑!
We trust you have received the usual lecture from the local System
Administrator. 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 meng:
Sorry, user meng may not run sudo on oldboyedu-01.
//2.配置尚方宝剑!
[root@oldboyedu-01 ~]# visudo //等价于vim /etc/sudoers ;有语法检查功能!
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
配置为
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
meng ALL=(ALL) /bin/ls, /bin/touch //重点一:配置命令成为尚方宝剑
说明:用户名,你可以在哪台服务器上运行命令=(你可以成为谁),配置的命令
[meng@oldboyedu-01 ~]$ sudo -l
[sudo] password for meng:
Matching Defaults entries for meng on this host:
!visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL
PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User meng may run the following commands on this host:
(ALL) /bin/ls, (ALL) /bin/touch
[meng@oldboyedu-01 ~]$ ls /root/ //3.使用尚方宝剑!
ls: cannot open directory /root/: Permission denied
[meng@oldboyedu-01 ~]$ sudo ls /root/
anaconda-ks.cfg error.txt ett.txt install.log.syslog right.txt umask032.txt umaskdir032
echo.txt etc_+%Y-%m-%d.tar.gz install.log right_error.txt test.txt umaskdir umask.txt
[meng@oldboyedu-01 ~]$ touch /root/meng.com
touch: cannot touch `/root/meng.com': Permission denied
[meng@oldboyedu-01 ~]$ sudo touch /root/meng.com
[meng@oldboyedu-01 ~]$ sudo ls /root/meng.com
/root/meng.com
[meng@oldboyedu-01 ~]$ sudo ll /root/meng.com
sudo: ll: command not found
[meng@oldboyedu-01 ~]$ sudo ls /root/meng.com -l
-rw-r--r-- 1 root root 0 Jan 7 09:19 /root/meng.com
//演示成功!给自己人用!
[root@oldboyedu-01 ~]# visudo //重点二:授权命令并免密码配置
meng ALL=(ALL) NOPASSWD: /bin/ls, /bin/touch
[root@oldboyedu-01 ~]# su - meng
[meng@oldboyedu-01 ~]$ sudo ls /root/meng.com
/root/meng.com
[root@oldboyedu-01 ~]# visudo //重点三:授权所有命令并免密码配置
meng ALL=(ALL) NOPASSWD: ALL
[meng@oldboyedu-01 ~]$ sudo su -
[root@oldboyedu-01 ~]# whoami
root
......
[root@oldboyedu-01 ~]# visudo //重点四:授权meng用户/bin目录下所有命令,很危险!要细致到每一个命令!例如排除vi命令。
meng ALL=(ALL) /bin/*, !/bin/vi
记录用户的操作(行为/日志审计)
跳板机是开发者登录到网站分配给应用服务器的唯一途径。开发者必须首先登录跳板机,再通过跳板机登录到应用服务器。
http://jumpserver.org/
法一:齐治的堡垒机:商业产品。
法二:gateone web跳板机
法三:python开发的开源的跳板机产品(开源跳板机(堡垒机)jumpserver部署详解;alex写的crazyEYE)
法四:shell跳板机

--------图92
浙公网安备 33010602011771号