--- tags: linux,server --- # 架設伺服器SOP >[name=佳佑] ___ 以下是使用ubuntu16.04 LTS建置 ## iptable 清除本機防火牆設定 ```shell= $ iptables -F #清除所有已訂規則 $ iptables -X #殺掉所有使用者自訂chain(鏈)、table $ iptables -Z #將chain(鏈)的計數與流量歸零 #鏈:有INPUT、OUTPUT、FORWARD ``` iptables有順序性,要先設定chain再設定下面資訊 :::info 不建議以遠端方式去設定iptable,有可能在設定時就被擋住 ::: ```shell= $ iptables -P INPUT DROP $ iptables -P OUTPUT ACCEPT $ iptables -P FORWARD ACCEPT ``` 設定iptable網卡通路 ```shell= $ iptables -A INPUT -i lo -j ACCEPT #lo這張網卡對本機是相當重要的,因此lo設定為信任裝置 $ iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT #讓有關於eth0的封包可以進入本機 (ESTABLISHED,RELATED) ``` 關閉所有端口,只允許port22和80通過防火牆 ```shell= $ iptables -A INPUT -p tcp --dport 22 -j ACCEPT $ iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT $ iptables -A INPUT -p tcp --dport 80 -j ACCEPT $ iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT $ iptables -A INPUT -s IP_ADDRESS -j DROP #dport:目的端口,一般來說只會設定目的端口,因為來源端口可能會變動 #sport:來源端口 #INPUT時: dport指本地,sport指外部。 #OUTPUT時:dport指外部,sport指本地 ``` 查看iptable ```shell= $ iptables -L -n ``` 如果成功,會出現以下訊息 ![](https://i.imgur.com/q5y7QiL.png) 查看儲存的有順序iptables ```shell= $ sudo iptables-save ``` 儲存iptables到下次重開機還能使用 ```shell= /etc/init.d/iptables save ``` ___ ## 修改主機名稱 #### ==如果你使用的是ubuntu18.04必須先更改/etc/cloud/cloud.cfg== ``` sudo vi /etc/cloud/cloud.cfg #找到preserve_hostname: false修改为preserve_hostname: true ``` #### ==ubuntu16.04只需做以下兩點== 到下面兩個位置把==example==改成想要的名稱 ```shell= sudo vi /etc/hostname ``` ![](https://i.imgur.com/cmIQjza.png) ```shell= sudo vi /etc/hosts ``` ![](https://i.imgur.com/7cOKm0W.png) 最後重新啟動 ```shell= sudo reboot ``` ## ntp系統校時 下載ntp ```shell= $ sudo apt-get install ntp ntpdate ``` 更改/etc/ntp.conf設定,將以下全部註解,將預設註解 ```bash= # Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board # on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for # more information. pool 0.ubuntu.pool.ntp.org iburst pool 1.ubuntu.pool.ntp.org iburst pool 2.ubuntu.pool.ntp.org iburst pool 3.ubuntu.pool.ntp.org iburst # Use Ubuntu's ntp server as a fallback. pool ntp.ubuntu.com ``` 取消下列註解 ```bash= statsdir /var/log/ntpstats/ ``` 然後新增~~下列幾行~~(擇一),下面是新增台灣區ntp伺服器 ```bash= server time.stdtime.gov.tw pool time.stdtime.gov.tw iburst ``` 重啟ntp ```shell= sudo service ntp restart ``` 查看監控狀態 ```shell= sudo service ntp status ``` 新增/etc/crontab內容 ```bash= 0 1 * * * root /usr/sbin/ntpdate time.stdtime.gov.tw && /sbin/hwclock -w #每天凌晨1點自動校時 ``` ___ ### 將系統更新到最新狀態 ```shell= $ sudo apt-get update $ sudo apt-get upgrade ``` ___ ## 新增硬碟掛載 ### 分割新硬碟 由於我是使用virtualbox虛擬機,所以他都先幫我切好硬碟了,所以要先新增一個新硬碟才有辦法往下做 查看系統硬碟使用情況 ```shell= df -h ``` 查看硬碟狀況 ```shell= $ lsblk ```` ![](https://i.imgur.com/dJphr3T.png) 也可以用ls查看/dev下有哪些硬碟 ```shell= ls /dev/[sh]d* ``` 輸出 /dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb 這樣一比較就知道新的硬碟是 /dev/sdb 這顆 如果再不確定,可使用fidisk -l查看 ```shell= $ fdisk -l /dev/sdb ``` 確定之後,開始切割硬碟 ```shell= $ fdisk /dev/sdb ``` 會出現 ![](https://i.imgur.com/u5CKmsb.png) 之後按下m會跳出有哪些參數可以使用 ``` Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition #刪除分割區 l list known partition types m print this menu #字母說明列表 n add a new partition #新增分割區 o create a new empty DOS partition table p print the partition table #列出面前分割狀態 q quit without saving changes s create a new empty Sun disklabel t change a partition’s system id #變更分割區類別 u change display/entry units v verify the partition table w write table to disk and exit #寫入並儲存分割 x extra functionality (experts only) ``` 然後按下n,選擇分割新磁區 ![](https://i.imgur.com/KUfrpZT.png) p 預設為主要分割區,e 則是延伸分割區 一個硬碟可以切四個分割區,一般而言都是切三個主要、一個延伸,我們新硬碟還沒切過,所以可以選擇主要,按下p 再來會出現下面選擇 ``` Partition number (1-4):1 為第一磁區 First sector:分割磁區開始位置 #建議使用預設,避免造成磁碟空間重疊或浪費 Last sector:分割區結束位置 #+size{K,M,G},注意單位必須為大寫 ``` 分割結束後按下w,儲存並離開,這樣就確實把/dev/sdb切區/dev/sdb1 可以確認一下是否有成功 ```shell= $ lsblk ```` ![](https://i.imgur.com/MfHMEqt.png) 然後確認硬碟分割狀態 ```shell= partprobe ``` 然後格式化剛切出來的新磁區 ```shell= sudo mkfs -t ext4 /dev/sdb1 ``` ### 掛載 創建一個資料夾作為掛載磁區的空間,一般來說掛載的硬碟統一在/mnt下會比較方便管理,所以在mnt底下新建httpdir資料夾 ```shell= sudo mkdir /mnt/httpdir ``` #### 手動掛載和卸載資料夾(但下次重開時可能會斷開掛載) ``` mount /dev/sdb1 /mnt/httpdir #mount 硬碟分割區 掛載位置 umount /dev/sdb1 or /mnt/httpdir #umount 硬碟分割區 或 掛載位置 可以選擇任意一個切斷他們的掛載 ``` ### 使用系統自動掛載 (推薦) #### 查看磁區UUID ```shell= sudo blkid ``` ![](https://i.imgur.com/SsHkyls.png) 把新的硬碟資訊寫進 /etc/fstab 中新增UUID ```shell= UUID=e13a27f2-d30d-4a91-8c84-e70e871c3fb0 /mnt/httpdir ext4 defaults 0 0 ``` #### 然後讓系統比對/fstab硬碟自動掛載沒有掛載的磁區 ```shell= mount -a ``` ___ ## Apache2.4.18 ### Apache安裝 ``` sudo apt-get install apache2 ``` 在瀏覽器上輸入你的IP位置,如果安裝成功會出現Apache資訊 確認成功後請刪除或更改/var/www/html/index.html ![](https://i.imgur.com/Ngf4CNE.png) #### 更改Apache設定檔,都在/etc/apache2/apache2.conf 關閉目錄列表瀏覽 ```bash= <Directory /var/www/> ​ Options Indexes FollowSymLinks ​ AllowOverride None ​ Require all granted ​</Directory> ``` 刪除Indexes變成 ```bash= <Directory /var/www/> ​ Options FollowSymLinks ​ AllowOverride None ​ Require all granted ​</Directory> ``` 如果沒成功關閉,瀏覽器會變成以下模樣 ![](https://i.imgur.com/SvqTjMG.png) #### 關閉Apache版本資訊 ==一定得新增在最後兩行== ```bash= ServerTokens Prod ServerSignature Off ``` 如果沒有成功,會出現以下訊息 ![](https://i.imgur.com/tV7rDzK.png) 如果成功,下面的版本資訊就會消失 ![](https://i.imgur.com/IApOc1K.png) #### 更改完以上資訊,記得要重新啟動 ```shell= sudo systemctl restart apache2 sudo service apache2 restart ``` #### 改變網站伺服器根目錄位置到/mnt/httpdir資料夾 更改/etc/apache2/sites-available/000-default.conf ```bash= DocumentRoot /var/www/html ``` 更改為 ```bash= DocumentRoot /mnt/httpdir ``` 然後更改/etc/apache2/apache2.conf ```bash= <Directory /var/www/html> Options FollowSymLinks AllowOverride None Require all granted </Directory> ``` 更改為 ```bash= <Directory /mnt/httpdir> Options FollowSymLinks AllowOverride None Require all granted </Directory> ``` #### 重啟apache ```shell= sudo service apache2 restart ``` 之後網頁目錄將會變成/mnt/httpdir #### 建立虛擬目錄 在/mnt/httpdir建立我們要的虛擬資料夾 ```shell= sudo mkdir /mnt/httpdir/example.com ``` #### 修改資料夾權限 ```shell= sudo chown -R $USER:$USER /mnt/httpdir/example.com sudo chmod -R 775 /mnt/httpdir ``` #### 在虛擬目錄創建測試用index.html ```shell= sudo vi /mnt/httpdir/example.com/index.html ``` 輸入內容 ```shell= <html> <head> <title>Welcome to Example.com!</title> </head> <body> <h1>Success! The example.com virtual host is working!</h1> </body> </html> ``` 然後複製/etc/apache2/sites-available/000-default.conf ```shell= sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf ``` 然後編輯複製的設定檔 ```shell= sudo vi /etc/apache2/sites-available/example.com.conf ``` 編輯成 ```shell= <VirtualHost *:80> ServerAdmin admin@example.com #網站管理員的mail ServerName example.com #網站的名稱 ServerAlias www.example.com #網域名字 DocumentRoot /mnt/httpdir/example.com/ #虛擬目錄位置 ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> ``` #### 使用a2ensite啟用虛擬目錄網站 ```shell= sudo a2ensite example.com.conf ``` #### 禁用默認設定檔 ```shell= sudo a2dissite 000-default.conf ``` #### 重啟apache ```shell= sudo systemctl restart apache2 sudo service apache2 restart ``` #### VPS臨時修改hosts本地計算機上的文件來測試此過程 ``` sudo vi /etc/hosts ``` 因為虛擬機IP為10.0.2.15新增內容為 ```bash= 127.0.0.1 localhost 127.0.1.1 guest-desktop 10.0.2.15 example.com ``` 因為這些域名不是我們自己的,我們只是臨時將example.com和test.com臨時導向我們自己主機的位置 使用瀏覽器查看 ``` http://example.com ``` ### 設定 HttpOnly 到 /etc/apache2/sites-available/example.com.conf 新增 ```bash= LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure ``` ==禁止在瀏覽器直接存取.git、.hg、bzr、cvs、.svn 資料夾,導引到 404 錯誤頁面== 修改/etc/apache2/sites-enabled/example.com.conf,新增 ```bash= RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$) ``` ### 在/etc/apache2/conf-availabe/localized-error-pages.conf新增網頁錯誤訊息 ``` ErrorDocument 400 "400" ErrorDocument 401 "401" ErrorDocument 403 "403" ErrorDocument 404 "404" ErrorDocument 500 "500" ErrorDocument 503 "503" ErrorDocument 501 "501" ErrorDocument 502 "502" ErrorDocument 504 "504" ``` #### 重啟apache2 ```shell= $ sudo service apache2 restart ``` ### Apache連線人數上限調整 #### 1.修改/etc/apache2/apache2.conf ```bash= #人數調成1000 MaxKeepAliveRequests 1000 ``` #### 2.修改/etc/apache2/mods-enabled/mpm_prefork.conf ![](https://i.imgur.com/UwoSHy6.png) #### 如果「mods-enabled」這個資料夾中沒有「mpm_prefork.conf」這個檔案,用以下方法解決 ```shell= $ sudo ln -s /etc/apache2/mods-available/mpm_prefork.conf /etc/apache2/mods-enabled/mpm_prefork.conf ``` #### 重啟apache2 ```shell= $ sudo service apache2 restart ``` ## 配置SSL ### 啟動SSL模塊 ```shell= $ sudo a2enmod ssl ``` ### 安裝openssl ```shell= $ sudo apt-get install openssl ``` ### 創建CA簽名 ```shell= $ sudo openssl genrsa -out server.key 1024 ``` ### 創建CSR ```shell= $ sudo openssl req -new -key server.key -out server.csr ``` ### 自簽發證書 ```shell= $ sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt ``` ### 複製到相對應的地方 ```shell= $ sudo cp server.crt /etc/ssl/certs $ sudo cp server.key /etc/ssl/private ``` ### 複製並修改相對應的文件 ```shell= $ sudo cp /etc/apache2/sites-enabled/000-default.conf /etc/apache2/sites-enabled/001-ssl.conf $ sudo vi /etc/apache2/sites-enabled/001-ssl.conf ``` 新增以下內容 ```bash= SSLEngine On SSLOptions +StrictRequire SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key #VirtualHost 80改成443(SSL端口) ``` #### 重啟apache ```shell= $ sudo service apache2 restart ``` 使http跳轉https 在/etc/apache2/sites-enabled/000-default.conf新增 IP使用10.10.10.10當範例 ```bash= Redirect "/" "https://10.10.10.10" ``` ## PHP 5.6.40 因為ubuntu 16.04 LTS repo已經更新到php7,所以要更改repo 增加 PPA repo ```shell= $ sudo add-apt-repository ppa:ondrej/php ``` ==若是出現此錯誤訊息: add-apt-repository: command not found,可執行下列指令解決== ```shell= $ sudo apt-get install software-properties-common ``` ### 安裝 PHP 5.6.40 ```shell= #更新 repo sudo apt-get update #安裝 PHP 5.6 sudo apt-get install php5.6 #若有需要 PHP-FPM 5.6 ,可執行下列指令安裝 sudo apt-get install php5.6-fpm #安裝extension sudo apt-get install php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-sqlite ``` ```shell= php-cli php-gmp php-pear php-gd libapache2-mod-php php-curl php-xmlrpc php-intl php-xml ``` 檢查php版本 ```shell= php -v ``` 如果建置成功,會出現以下訊息 ![](https://i.imgur.com/VewXlhA.png) 更改PHP設定檔,都在/etc/php/5.6/apache2/php.ini 更改上傳、POST大小為20MB ```bash= upload_max_filesize = 20M post_max_size = 20M ``` ### 關閉error顯示 ```bash= display_errors=Off ``` 如果沒有關閉,當php出錯時會噴出錯誤碼,如下 ![](https://i.imgur.com/A3YO33S.png) 設定PHP時區 因為預設時區會是GMT+0,我們是GMT+8,所以要修改 ```bash= ;date.timezone = ``` 變成Asia/Taipei ```bash= date.timezone = "Asia/Taipei" ``` ### 關閉PHP版本資訊 ```bash= expose_php = off ``` ### 設定HttpOnly ```bash= session.cookie_httponly = true ``` ### 重新啟動 ```shell= $ sudo /etc/init.d/apache2 restart ``` 在/mnt/httpdir新建index.php的檔案 創建以下內容 ```bash= <?php phpinfo(); ?> ``` 打開網頁確認以下資訊是否設置成功: - [ ]date.timezone - [ ]display_errors - [ ]upload_max_filesize - [ ]post_max_size ### php版本切換 由於前面下載過php5.6,所以現在只下載7.3 ```shell= $ sudo apt-get install php7.3 $ sudo apt-get install libapache2-mod-php7.3 $ sudo apt-get install php7.3-fpm $ sudo apt-get install php7.3-mbstring php7.3-mysql php7.3-sqlite ``` 現在是php5.6為主,先把php5.6關閉,再開啟php7.3,然後重啟apache ```shell= $ sudo a2dismod php5.6 $ sudo a2enmod php7.3 $ sudo service apache2 restart ``` ## 安裝 Mariadb ```shell= sudo apt-get install mariadb-server sudo apt-get install mariadb-client sudo apt-get install libmariadbclient-dev ``` 可使用netstat檢查是否安裝成功 ```shell= sudo netstat -tap | grep mysql ``` 安裝完後可用下列方式進入mysql ``` mysql -u root -p ``` 創建新數據庫 ``` CREATE DATABASE test; ``` 刪除數據庫 ``` DROP DATABASE test; ``` ### Mariadb連線人數上限調整 #### Mysql5.7以上請修改/etc/mysql/mysql.conf.d/mysqld.cnf ``` max_connections = 1000 ``` #### 重啟Mariadb ```shell= $ sudo service Mariadb restart ``` 進入mysql查詢連線人數上限 ```shell= $ mysql -u root -p mysql > show variables like 'max_connections'; ``` ### 下載phpmyadmin ```shell= sudo apt-get install phpmyadmin ``` ## zabbix 3.4 新增apt儲存庫 ```shell= $ wget http://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+xenial_all.deb $ dpkg -i zabbix-release_3.4-1 + xenial_all.deb ``` 使用apt下載zabbix ```shell= $ sudo apt-get update $ sudo apt-get install zabbix-agent ``` 若是出現此錯誤訊息: wget: unable to resolve host address ‘repo.zabbix.com’ 則編輯/etc/resolv.conf,添加新dns ```bash= nameserver 192.168.0.1 路由器网关 nameserver 8.8.8.8 谷歌网关 ``` 編輯Zabbix代理配置文件/etc/zabbix/zabbix_agentd.conf並更新Zabbix服務器server IP。 ```bash= #Server = [zabbix server ip] #Hostname = [客戶端系統的主機名] Server=xx.xx.xx.xx ListenIP=0.0.0.0 ServerActive=xx.xx.xx.xx Hostname=Server2 ``` zabbix服務啟動、暫停、查看 ```shell= #啟動zabbix $ sudo systemctl start zabbix-agent #暫停zabbix $ sudo systemctl stop zabbix-agent #查看狀態 $ sudo systemctl status zabbix-agent ``` ## 安裝goaccess,分析log檔案 ### 設定 GoAccess 官方的套件庫,從GoAccess 的 Debian/Ubuntu 套件庫來下載安裝 ```shell= $ echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list $ wget -O - http://deb.goaccess.io/gnugpg.key | sudo apt-key add - ``` ### 更新套件列表,並安裝 GoAccess 0.9.4 ```shell= $ sudo apt-get update $ sudo apt-get install goaccess ``` ### 如果需要訪客來源國家的資訊,安裝 GeoIP 資料庫 ```shell= $ sudo apt-get install geoip-database ``` ### 設定 GoAccess ```shell= $ sudo vi /etc/goaccess/goaccess.conf ``` ### 調整格式 #### 將Goaccess設定檔中下列文字取消註解(移除 #) ##### **time-format %H:%M:%S** ##### **date-format %d/%b/%Y** ##### **log-format ~ 略 ~** (p.s) 因為我們是用VirtualBox 所以log-format **兩個都要開!!** ![](https://i.imgur.com/bVdqFSW.png) ### 命令從終端分析Apache Web服務器 ```bash= sudo goaccess /var/log/apache2/access.log --log-format=COMBINED ``` ### 生成html報告 ```shell= $ sudo goaccess /var/log/apache2/access.log --log-format=COMBINED -a -o /var/www/html/report.html #如果做過sop-2的虛擬目錄,記得要把/var/www/html更改成/mnt/httpdir ``` ### 前往 http://你的服務器IP/report.html ![](https://i.imgur.com/yIEi2ec.png) 參考資料(有詳細補充): 1. https://medium.com/@haboro_admin/%E4%BD%BF%E7%94%A8-goaccess-%E5%8D%B3%E6%99%82%E7%9B%A3%E6%8E%A7%E4%BC%BA%E6%9C%8D%E5%99%A8%E7%8B%80%E6%85%8B-linux-apache-7ad9475605b3 2. https://www.google.com/amp/s/blog.gtwang.org/linux/analysing-nginx-logs-using-goaccess/amp/ ## 備份 - 每周定期備份 /etc ==完全備份==到/var/backups 到/var/backups新增cp_etc_ew.sh ```shell= $ sudo vi cp_etc_ew.sh ``` ```bash= date=$(date +"%Y%m%d") cp -r /etc /var/backups/ tar -cvpzf /var/backups/$date"_cp_etc.tar.gz" /var/backups/etc ``` 到/etc/crontab新增 ```bash= #意義 分鐘 小時 日期 月份 星期 使用者 指令 #數字範圍 0-59 0-23 1-31 1-12 0-7 user 0 0 * * 0 root sh /var/backups/cp_etc_ew.sh ``` - 每周定期備份 /etc ==差異備份到==/var/backups 到/var/backups新增rsync_etc_ew.sh ```shell= $ sudo vi rsync_etc_ew.sh ``` ```bash= date=$(date +"%Y%m%d") rsync -avh --delete /etc /var/backups/ tar -cvpzf /var/backups/$date"_rsync_etc.tar.gz" /var/backups/etc ``` 到/etc/crontab新增 ```bash= #意義 分鐘 小時 日期 月份 星期 使用者 指令 #數字範圍 0-59 0-23 1-31 1-12 0-7 user 0 0 * * 0 root sh /var/backups/rsync_etc_ew.sh ``` - 每天httpdir 資料夾作==完全備份==到/var/backups i.(資料只留一年) 到/var/backups新增cp_httpdir_ed.sh ```shell= $ sudo vi cp_httpdir_ed.sh ``` ```bash= date=$(date +"%Y%m%d") cp -r /mnt/httpdir /var/backups/ tar -cvpzf /var/backups/$date"_cp_httpdir.tar.gz" /var/backups/httpdir find /var/backups/ -type f -name "*_cp_httpdir.tar.gz" -mtime +365 -exec rm -f {} \; ``` 到/etc/crontab新增 ```bash= #意義 分鐘 小時 日期 月份 星期 使用者 指令 #數字範圍 0-59 0-23 1-31 1-12 0-7 user 0 0 * * * root sh /var/backups/cp_httpdir_ed.sh ``` - 每天mysql資料備份 ==完全備份到==/var/backups i. (資料留一年) 到/var/backups新增mysqlbk.sh ```shell= $ sudo vi mysqlbk.sh ``` ```bash= date=$(date +"%Y%m%d") myUser="root" myPass="*******" mysqldump -u $myUser -p$myPass --all-databases > $date"_mysqlbk.sql" find /var/backups/ -type f -name "*_mysqlbk.sql" -mtime +365 -exec rm -f {} \; ``` 到/etc/crontab新增 ```bash= #意義 分鐘 小時 日期 月份 星期 使用者 指令 #數字範圍 0-59 0-23 1-31 1-12 0-7 user 0 0 * * * root sh /var/backups/mysqlbk.sh ``` ii. /var/lib/mysql 到/var/backups新增cp_mysql_ed.sh ```shell= $ sudo vi cp_mysql_ed.sh ``` ```bash= date=$(date +"%Y%m%d") rsync /var/lib/mysql /var/backups/ tar -cvpzf $date"_cp_mysql.tar.gz" /var/backups/mysql find /var/backups/ -type f -name "*_cp_mysql.tar.gz" -mtime +365 -exec rm -f {} \; ``` 到/etc/crontab新增 ```bash= #意義 分鐘 小時 日期 月份 星期 使用者 指令 #數字範圍 0-59 0-23 1-31 1-12 0-7 user 0 0 * * * root sh /var/backups/cp_mysql_ed.sh ```