linux可以实现多用户登陆的操作系统,共享一些主机的资源、分别有自己的用户空间,用于存放各自的文件。但实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里。但由于 Linux 的用户管理和权限机制,不同用户不可以轻易地查看、修改彼此的文件 。
1. 查看当前登陆帐户
界面操作
使用命令行
whoami
深度系统使用who am i和 who mom likes没反应,下面是在实验楼输出的结果:
pts/0 中 pts表示伪终端。所谓伪是相对于 /dev/tty 设备而言的。真终端是使用[Ctrl]+[Alt]+[F1]~[F7]进行切换的设备。伪终端就是在图形用户界面使用 /dev/tty7 是每打开一个终端就会产生一个伪终端。who am i和whoami的区别: 如果使用A登陆,再使用su切换到B
- who am i : 显示B
- whoami : 仍是A
who命令其它参数
参数说明-a打印能打印的全部-d打印死掉的进程-m同am i,mom likes-q打印当前登录用户数及用户名-u打印当前登录用户登录信息-r打印运行等级
2. 创建用户
界面操作
命令行操作
su <user> 切换用户到user
sudo <cmd> 以特权级别运行cmd命令
sudo adduser lilei 新增用户
ls /home
su -l lilei 切换用户到 lilei
创建用户后,在图形界面也可以看到结果:
但这个界面看不到root账户。
adduser 和 useradd 的区别是什么?
答:
- useradd 只创建用户,创建完了用 passwd lilei 去设置新用户的密码。
- adduser 会创建用户,创建目录,创建密码(提示你设置),做这一系列的操作。
其实 useradd、userdel 这类操作更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,需要你输入、确定等一系列操作。
3. 修改密码
可视化操作
命令行操作
修改自己密码
passwd
修改某用户密码
passwd test
4. 查看系统的用户
可视化操作
深度系统在系统设置、帐户的地方就可以看到所拥有的用户。但这里显示的看起来只有允许正常登陆的用户,对于nologin或root很多特殊用户,都没有显示:
可以使用命令行查看更多的用户
cat /etc/passwd
二、用户组
1. 查看自己是哪个组
在深度系统的界面上没有找到设置用户权限的地方。使用命令行可以看到用户所属组:
groups lilei
也可以通过查看 /etc/group文件
cat /etc/group | sort
cat /etc/group | grep -E "xundh"
结果格式
group_name:password:GID:user_list
2. 给lilei用户分配组
上面新建的帐户是不能使用sudo的:
将lilei用户加入sudo用户组
su xundh
groups lilei
sudo usermod -G sudo lilei
groups lilei
su lilei
sudo ls
2. 删除用户
可视化操作
在深度系统界面可以直接删除帐户:
命令行操作:
sudo deluser lilei --remove-home
三、Linux 文件权限
1. Linux文件权限说明
Linux里任一个文件都有用户(User)、所属群组(Group)和其他人(Others)三种身份的个别权限。
ls -l
关于权限的位说明,后面还有除了读写执行等更详细的说明。
可视化创建文件并查看属性
通过命令可以查看其属性,与可视化界面显示的一致:
ls -l
2. 变更文件所有者
可视化界面没有找到相应的操作,下面是命令行操作:
sudo chown lilei 新建文本.txt
ls -l
四、记录每个用户的操作
在 /etc/profile 增加脚本:
#set user history
history
USER=`whoami`
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]; then
USER_IP=`hostname`
fi
if [ ! -d /var/log/history ]; then
mkdir /var/log/history
chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
mkdir /var/log/history/${LOGNAME}
# chown -R ${LOGNAME}:${LOGNAME} /var/log/history/${LOGNAME} # 这里组写上真实的组名
chmod 770 /var/log/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 660 /var/log/history/${LOGNAME}/*history* 2>/dev/null
日志保存位置:/var/log/history/
五、问题处理
1. 新建的普通用户经上面的操作使用不了sudo
先修改 /etc/sudoers
你的用户名 ALL=(ALL) ALL
1
说明:
sudoers添加下面四行中任意一条
youuser ALL=(ALL) ALL
%youuser ALL=(ALL) ALL
youuser ALL=(ALL) NOPASSWD: ALL
%youuser ALL=(ALL) NOPASSWD: ALL
# 第一行:允许用户youuser执行sudo命令(需要输入密码).
# 第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码).
# 第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码.
# 第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码.
2. 遇到setuid问题的处理
/usr/bin/sudo must be owned by uid 0 and have the setuid bit set [duplicate]处理方式:设置 sudoers权限sudo的用户属组要属于uid 0,即root用户;同时sudo要设置setuid位。
ll /usr/bin/sudo
-rwxr-xr-x 1 root root 155008 Aug 28 2015 /usr/bin/sudo
执行:
chmod 4755 /usr/bin/sudo
或
chmod u+s /usr/bin/sudo
再执行:
ls /usr/bin/sudo
-rwsr-xr-x 1 root root 155008 Aug 28 2015 /usr/bin/sudo
看到有一位x改为s , 再重新登陆用户。
六、关于权限的进一步说明
特殊权限虽然常见的八进制权限掩码都是用三位数表示的,但确切地说,它是用四位数表示的,因为除了读、写和执行权限以外,还有一些其他较少用到的权限设置,其中就涉及到上面的setgid设置。
setuid其中之一就是setuid位,八进制表示为4000,当把它应用到一个可执行文件时,有效用户ID将从实际用户ID(实际运行该程序的用户)设置成该程序所有者的ID,大多数情况下,该权限设置通常应用于一些由超级用户所拥有的程序,例如本问题中的sudo。当普通用户运行一个具有“setuid root”(已设置setuid位,由root用户所有)属性的程序时,该程序将以超级用户的权限执行。
setgid第二个是setgid位,八进制表示为2000,类似于setuid,它会把有效用户组ID从该用户的实际组ID更改为该文件所有者的组ID。如果对一个目录设置setgid位,那么在该目录下创建的文件将由该目录所在组所有,而不属于文件创建者所在组。当一个公共组下的成员需要访问共享目录下的所有文件时,设置setgid位将会很有用,并不需要关注文件所有者所在的用户组。
sticky第三个是sticky位,八进制表示位1000,它是从UNIX中继承下来的,在LINUX中将会忽略文件的sticky位。但是对一个目录设置sticky位,那么将能阻止用户删除或者重命名文件,除非用户是这个目录的所有者、文件所有者或者超级用户。它通常用来控制对共享目录(例如/tmp)的访问。
设置方法
授予setuid权限
chmod u+s prog1
or
chmod 4xxx prog1
具有setuid属性的程序为-rwsr-xr-x。
授予setgid权限
chmod g+s dir1
or
chmod 2xxx dir1
具有setgid属性的目录为drwxrwsr-x。
授予sticky权限
chmod t dir1
or
chmod 1xxx dir1
具有sticky属性的目录为drwxrwxrwt。