Amazon Linux version 2016.03
我们将使用htpasswd(httpd24-tools)命令来生成用户名/密码文件作为存储虚拟用户账号的数据库,所以需要先安装lib库 libpam_pwdfile.so(https://github.com/tiwe-de/libpam-pwdfile)。
$ sudo yum install pam-devel $ wget -O libpam-pwdfile.zip https://github.com/tiwe-de/libpam-pwdfile/archive/master.zip $ unzip libpam-pwdfile.zip $ cd libpam-pwdfile-master/ $ make $ sudo cp pam_pwdfile.so /lib64/security/
一般方法为 htpasswd -c virtual_user.passwd user1 ,然后按提示输入2次密码,这样就在文件virtual_user.passwd 中写入了用户名和密码。
$ cd /etc/vsftpd/ $ sudo htpasswd -c virtual_user.passwd user1 $ cat virtual_user.passwd user1:$apr1$vc8gkvSk$s0Sm/uL.7A4mH53mlU9WZ1
但是新版的htpasswd默认使用MD5方式加密密码明文,libpam-pwdfile 不认识它生成的Apache专用的格式(前缀 $apr1$),需要使用openssl 来生成加密密码。
$ sudo htpasswd -b -p virtual_user.passwd user2 $(openssl passwd -1 -noverify YourPasswd) $ cat virtual_user.passwd user1:$apr1$vc8gkvSk$s0Sm/uL.7A4mH53mlU9WZ1 user2:$1$d7iKL630$6Cwte2AjcRpboSYPfRXz5/
看到加密密码格式的不同了吧。
anonymous_enable=NO local_enable=YES #pam_service_name=vsftpd (注释掉默认的这一行) # ------ Virtual user settings start ------ # Virtual users will use the same privileges as local users. # It will grant write access to virtual users. Virtual users will use the # same privileges as anonymous users, which tends to be more restrictive # (especially in terms of write access). virtual_use_local_privs=YES write_enable=YES # Set the name of the PAM service vsftpd will use pam_service_name=vsftpd.virtual (对应下一步创建的PAM文件) # Activates virtual users guest_enable=YES guest_username=ftp (默认就是ftp) # Automatically generate a home directory for each virtual user, based on a template. # For example, if the home directory of the real user specified via guest_username is # /home/virtual/$USER, and user_sub_token is set to $USER, then when virtual user vivek # logs in, he will end up (usually chroot()'ed) in the directory /home/virtual/vivek. # This option also takes affect if local_root contains user_sub_token. user_sub_token=$USER # Usually this is mapped to Apache virtual hosting docroot, so that # Users can upload files local_root=/home/vsftpd/$USER # Chroot user and lock down to their home dirs chroot_local_user=YES # Hide ids from user hide_ids=YES # ------ Virtual user settings end ------
$ sudo vi /etc/pam.d/vsftpd.virtual #%PAM-1.0 auth required pam_pwdfile.so pwdfile /etc/vsftpd/virtual_user.passwd account required pam_permit.so
$ mkdir /home/vsftpd $ mkdir /home/vsftpd/user1 $ sudo chown -R ftp.ftp /home/vsftpd # 如果是vsftpd-3.0,需要去掉用户家目录的写权限: $ sudo chmod a-w /home/vsftpd/user1
启动vsftpd 服务,试试使用虚拟用户登录,Good luck!
CentOS release 6.8 (Final)
在安装了 sysstat 系统工具后,默认会使用 sadc 命令每10分钟一次收集系统性能信息并保存到 /var/log/sa/saXX 文件中。可以将这个时间改短一点,以便提高监控粒度,比如改成5分钟一次:
$ sudo vi /etc/cron.d/sysstat # Run system activity accounting tool every 10 minutes */5 * * * * root /usr/lib64/sa/sa1 1 1
主要是借助 awk 的技巧:
$ sar -d |head -3; sar -d |awk '($11>50)'
如图,DEV的主设备编号和次设备编号:
通过 ls -l /dev/磁盘设备文件 可以看到:
这样就知道哪块磁盘在当时负载较高了(%util)。
不过,你可能更喜欢 -p 参数,这样就直接显示 vda vdb 这样的设备名称了:
以在 Liunx 下扩展根卷(系统盘)为例,步骤如下。
注:断开之前记录下卷的详情页面中的连接信息一列中的设备名称:
i-xxxxxxxxxxxxxxxxx (instance_name): device_name(如 /dev/sda1 )
注意:设备一栏,输入在上一步中记录下的相同设备名称,请务必注意,需要将卷重新连接到从分离开的准确位置(例如 /dev/sda1)。
实例启动之后,可以检查文件系统大小,看实例是否识别这个更大的卷空间。在 Linux 上,请使用 df -h 命令检查文件系统大小。
如果大小没有反映新扩展的卷,则必须扩展设备的文件系统,以便实例可以使用新的空间。
检查您的卷分区是否需要调整大小 ,使用 lsblk 命令可列出连接到实例的块储存设备:
如上图,/dev/xvda1 是一个 10 GiB 分区,位于一个 50 GiB 设备上,并且卷上没有其他分区。在这种情况下,分区必须调整大小,以便使用卷上的剩余空间。调整分区大小之后,您可以按照下一个过程扩展文件系统以占用分区上的所有空间。
PDF文件,里面含有表单输入框可以填写内容,但我在表单里输入文字后,光标离开当前表单输入框,刚才填写的文字却不显示?只有鼠标点一下该表单输入框进入编辑模式才会又显示了?
另外,填写好表单后,打印该PDF文件,还是看不到填写的内容?
泪奔。。。
注:该问题一般出现在国外网站提供的一些申请表格的PDF文件中。
1)安装Acrobat Pro
2)打开软件后选择【编辑PDF】,打开PDF文件
3)Acrobat出现提示框,选择【编辑表单域】
4)点击选中一个表单域(即填写框),按 Ctrl+A 全选表单域,点击右键选择【属性】
5)选择【外观】选项卡,修改字体为常用字体,比如“微软雅黑”,然后你填写的内容就可见了!!!
原因就是原来PDF文件设置的字体在本机系统上没有,所以显示不了!!比如我遇到的这个:
整理自《Docker容器与容器云》一书。
将普通用户加入docker用户组:
$ sudo usermod -aG docker your-user
$ docker run --ulimit nofile=1024:1024 --ulimit nproc=1024:1024 --rm debian ulimit -n
源容器(带volume):
$ docker run -it --name vol_simple -v /data ubuntu /bin/bash
1)备份
备份源容器的volume:(启动一个临时容器)
$ docker run --rm --volumes-from vol_simple -v $(pwd):/backup ubuntu tar cvf /backup/data.tar /data
2)恢复
新容器:
$ docker run -it --name vol_bck -v /data ubuntu /bin/bash
恢复源容器的数据到新容器:(启动一个临时容器)
$ docker run --rm --volumes-from vol_bck -v $(pwd):/backup ubuntu tar xvf /backup/data.tar -C /
容器实际上是一个进程,显然我们不会在进程里再启动一个SSH服务器。
Docker提供了 docker exec 命令,可以在已运行的容器中执行想要的命令,并得到反馈的结果。这个命令实际上可以解决大部分需要ssh进入容器的问题,同样也可以解决诸如定时任务等问题。
对于需要进入容器修改配置文件的需求:
如果需要长期使用这份配置文件,它应该被集成到镜像中
如果需要经常修改这份配置文件,那么应该使用volume共享这份配置
对于某些特殊需求需要进入容器,如程序调试等,则可以使用docker exec 直接在容器中启动一个shell:
$ docker exec -it <containerName> /bin/bash
容器的stdout和stderr 输出存在了 /var/lib/docker/containers/<containerID>/<containerID>-json.log 文件下( /var/lib/docker/ 即 docker graph 目录),docker logs 命令就是从这里读取日志的。
docker logs存在的问题:
JSON消息格式存储,日志文件增长过快
日志文件没有自动切分功能(待验证)
docker logs命令返回的日志记录也过于冗长
主流解决方案,3种:
在容器内收集:
容器内启动一个日志收集进程
需要定制Docker镜像,典型代表为 baseimage-docker 项目
在容器外收集:
宿主机上运行一个单独收集日志的代理,收集所有容器的日志
容器挂载 volume 数据卷,把日志记录在挂载卷中
也可以直接处理 docker graph 目录下的容器日志,开源项目Fluentd
在专用容器中收集:
在宿主机运行日志收集代理的变种方案,该代理运行在一个容器中
且该容器的volume 使用docker run 的 --volumes-from 选项被绑定给其他应用程序容器
参考 Docker and Logstash 一文
RHEL 7带来了很多系统配置和管理上的变化,虽然有些不习惯,但个人认为大家应该去适应它们,而不是因循守旧,因为变化总是有原因的,它们大致都代表了未来的趋势,你不可能一直停留在原地踏步。
查看启动项:
# cat /boot/grub2/grub.cfg |grep menuentry
menuentry 'CentOS Linux (4.2.5-1.el7.elrepo.x86_64) 7 (Core)' --class centos ...
menuentry 'CentOS Linux (3.10.0-229.20.1.el7.x86_64) 7 (Core)' --class centos ...
查看默认启动项:
# grub2-editenv list
saved_entry=CentOS Linux (4.2.5-1.el7.elrepo.x86_64) 7 (Core)
修改默认启动内核为4.2.5:
# grub2-set-default 'CentOS Linux (4.2.5-1.el7.elrepo.x86_64) 7 (Core)'
cat /etc/inittab 看下就知道了:
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
安装系统时配置的主机名,保存到了 /etc/hostname 。
systemctl enable/disable sshd.service
其实启用服务就是在当前“runlevel”的配置文件目录(/etc/systemd/system/multi-user.target.wants/)里, 建立/usr/lib/systemd/system 里面对应服务配置文件的软链接;禁用服务就是删除此软链接。
有兴趣就自己看看 /usr/lib/systemd/system 里的文件,语法跟旧版/etc/init.d/ 里的服务脚本完全不同,也不能再用 /etc/init.d/sshd restart 之类的指令启动服务器了。
常用指令:
# systemctl list-unit-files -t service # systemctl status firewalld.service # systemctl enable/disable firewalld.service # systemctl is-enabled firewalld.service 查看系统启动以来的message信息 # journalctl -b (类似 dmesg )