useradd -u 10010 -g 10010 -G dba -s /bin/bash -d /home/mysql -e "2018-10-31" mysql mysql
usermod -c 'Modeify by hnair' -md /user/mysql -e '2018-11-01' -G admin -u 10011 mysql linux
passwd -l mysql 锁定用户sql
passwd -e mysql 强制下次登陆修改密码bash
userdel -rf mysql 删除mysql用户,级联删除mysql家目录oop
对二进制程序设置的一种特殊的执行权限,可让二进制程序的执行者临时得到属主的权限(仅对拥有执行权限的二进制程序有效)。学习
[root@master ~]# ls -l /etc/shadow测试
----------. 1 root root 841 Oct 30 18:00 /etc/shadowui
[root@master ~]# ls -l /usr/bin/passwdthis
-rwsr-xr-x. 1 root root 30768 Feb 17 2012 /usr/bin/passwdspa
在linux系统中,密码是保存在/etc/shadow文件中,咱们修改用户口令或者建立用户,他们的口令文件都保存在‘/etc/shadow’,咱们看他的权限是000,意味着只有root用户能够操做它。
咱们在来看看/usr/bin/passwd 执行命令,发现他的权限有点特殊‘-rwsr-xr-x’,在执行位有一个‘s’的标记,这个‘s’就是一个特殊的权限,
这就意味着用户在使用passwd修改用户密码的时候,会让执行者临时获取passwd命令属主的权限(passwd命令的属主是root),临时有了root权限 固然有权限吧密码信息写入到/etc/shadow 里面。
6.1、让执行者临时获取属组的权限(仅对有执行权限的二进制程序有效)。
6.2、在某个目录中建立的文件自动继承该目录的用户组(只对目录设置)。
对于第二个设计的目的,也就解释了为啥 解压软件包获得的目录不是执行者的所属用户而是特定的用户。
这个特性颇有用途,能够强制某些目录的属组权限,好比部门内部公共网盘权限设置,无论用户用什么用户登陆建立什么文件,他的属组都是上层目录的属组。
测试:
mkdir /tmp/sgid
chmod 777 /tmp/sgid
chown g+s /tmp/sgid/
drwxrwsrwx. 2 root root 4096 Oct 30 18:42 sgid
su - mysql
[mysql@master sgid]$ id mysql
uid=10011(mysql) gid=10011(mysql) groups=10011(mysql)
mkdir -p /tmp/sgid/mysql/
ls-l /tmp/sgid/
drwxrwsr-x. 2 mysql root 4096 Oct 30 18:44 mysql
能够看到 /tmp/sgid/mysql 的属组权限继承生上层目录的root,而不是执行者mysql的属组
SBIT特殊权限位可确保用户只能删除本身的文件,而不能删除其余用户的文件。
演示:
[root@master home]# ls -ald /tmp/
drwxrwxrwt. 7 root root 4096 Oct 30 19:03 /tmp/
[hadoop@master ~]$ mkdir /tmp/hadoop
[root@master home]# chmod 777 /tmp/hadoop
[root@master home]# su - mysql
[mysql@master ~]$ ls -l /tmp/
drwxrwxrwx. 2 hadoop hadoop 4096 Oct 30 19:08 hadoop
[mysql@master ~]$ rm -rf /tmp/hadoop
rm: cannot remove `/tmp/hadoop': Operation not permitted
设置命令 chattr +a /tmp/chattr.log 增长追加权限,chattr -a /tmp/chattr.log 移除追加权限。
测试:
[root@master home]# chattr +a /tmp/chattr.log
[root@master home]# ls -alt /tmp/chattr.log
-rw-rw-r--. 1 mysql mysql 0 Oct 30 19:27 /tmp/chattr.log
[root@master home]# chmod 777 /tmp/chattr.log
chmod: changing permissions of `/tmp/chattr.log': Operation not permitted
[root@master home]# rm -rf /tmp/chattr.log
rm: cannot remove `/tmp/chattr.log': Operation not permitted
能够看到 /tmp/chattr.log 不能被root用户删除,什么?这么逆天!
这个时候咱们能够经过使用 chattr -a /tmp/chattr.log 来移除特殊权限,可是咱们得先知道这个文件是否有特殊权限,这就是下一个要介绍的命令了(lsattr)。
[root@master home]# lsattr /tmp/chattr.log
-----a-------e- /tmp/chattr.log
咱们能够看到/tmp/chattr.log 有 ‘a’特殊权限,
[root@master home]# chattr -a /tmp/chattr.log
[root@master home]# lsattr /tmp/chattr.log
-------------e- /tmp/chattr.log
[root@master home]# rm -rf /tmp/chattr.log
前面介绍的几个命令都是针对全部用户的,ACL是针对特定用户特定目录的权限。 其中,针对目录使用-R来递归,针对普通文件则使用 -m参数。
设置mysql用户能够访问/root目录:
[root@master home]# setfacl -Rm u:mysql:rwx /root
[root@master home]# ls -ld /root
dr-xrwx---+ 3 root root 4096 Oct 30 18:13 root
[root@master home]# su - mysql
[mysql@master ~]$ ls /root/
anaconda-ks.cfg install.log install.log.syslog
能够经过getfacl的都目录的ACL列表:
[root@master home]# getfacl /root
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
user:mysql:rwx
group::r-x
mask::rwx
other::---
删除acl
[root@master home]# setfacl -b /root
[root@master home]# getfacl /root
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
group::r-x
other::---
配置:
vi /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL
[hadoop@master ~]$ sudo -l
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 hadoop:
Matching Defaults entries for hadoop on this host:
requiretty, !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 hadoop may run the following commands on this host:
(ALL) ALL
注意:对文件权限的修改须要从新认证sudo。
sudo配置完毕,接下来能够干root才能干的事,如:修改密码
[hadoop@master ~]$ sudo passwd mysql
Changing password for user mysql.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
在生产中这种sudo配置ALL的配置风险太大,通常是具体到单个命令 而不是ALL。
vi /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) /bin/ls
[hadoop@master ~]$ sudo passwd mysql
Sorry, user hadoop is not allowed to execute '/usr/bin/passwd mysql' as root on master.
[hadoop@master ~]$ ls /root
ls: cannot open directory /root: Permission denied
[hadoop@master ~]$ sudo ls -l /root/
total 32
-rw-rwx---+ 1 root root 1043 Jul 28 08:09 anaconda-ks.cfg
-rw-rwxr--+ 1 root root 10725 Jul 28 08:09 install.log
-rw-rwxr--+ 1 root root 3091 Jul 28 08:07 install.log.syslog
可见,passwd命令不可使用了,可是能够访问 /root目录.
你们有没有发现每次使用sudo都须要验证密码,这是否是很不方便,咱们能够设置NOPASSWD来免密码认证
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=NOPASSWD: /bin/ls
[hadoop@master ~]$ sudo ls -l /root
total 32
-rw-rwx---+ 1 root root 1043 Jul 28 08:09 anaconda-ks.cfg
-rw-rwxr--+ 1 root root 10725 Jul 28 08:09 install.log
-rw-rwxr--+ 1 root root 3091 Jul 28 08:07 install.log.syslog
--整理于《Linux就该这么学》书籍,感受目前国内Liunx学习最好的书籍,继《鸟哥私房菜》以后的Linux学习最给力的书籍。