# useradd centos ←ユーザーを追加 # passwd centos ←centosにパスワードを設定(パスワードは2回入力する)
# userdel -r centos
# rm /var/spool/mail/centos # cd /home # rm -rf centos
# id admin ←ユーザー"admin"が所属するグループを確認 uid=500(admin) gid=500(admin) 所属グループ=500(admin),10(wheel) context=user_u:system_r:unconfined_tgroupsコマンドでも所属グループを確認できます。
# groups admin admin : admin wheel
長いコマンドや良く使うコマンドに対して、別名を設定できます。
ここでは例として、ipconfigを実行した場合、ifconfigコマンドが実行されるように設定してみます。
# vi /etc/bashrc : : (最終行に追記) alias ipconfig='ifconfig'(2)一旦ログオフしてログインし直す。
# source /etc/bashrc
(1)設定追加
$ vi ~/.bashrc : : (最終行に追記) alias ipconfig='ifconfig'(2)一旦ログオフしてログインし直す。
# source ~/.bashrc
初期設定では、root権限のあるユーザーでないとsudoを実行できません。
$ sudo service httpd start [sudo] password for admin: admin is not in the sudoers file. This incident will be reported.
CentOSでsudoを利用できるようにするには、様々な方法がありますがたとえば以下のようにユーザーadminをwheelグループに追加して、wheelグループでsudoコマンドを利用できるように設定変更する方法があります。
(1)まず、ユーザーadminをwheelグループに追加します。
# gpasswd -a admin wheel
(2)visudoを実行してwheelグループがsudoコマンドを実行できるようにします。
# visudo
(3)以下の行を検索して、コメントアウトを外す
## Same thing without a password %wheel ALL=(ALL) NOPASSWD: ALL
以上でCentOSでadminユーザーがsudoコマンドを利用可能になります。
sudoが利用できるようになったかadminユーザーでログインして確認します。
$ sudo service httpd start httpd を起動中: [ OK ] $ sudo service httpd stop httpd を停止中: [ OK ]
ユーザー"admin"でsudoコマンドが使えるようになりました。
デフォルト設定ではrootのパスワードがわかれば、管理者権限で何でも行なえてしまいます。
ここではユーザー"admin"をwheelグループに所属させて、
wheelグループに登録されているユーザーのみ管理者権限に切り替えられるように設定します。
# gpasswd -a admin wheel # vi /etc/pam.d/su #auth required pam_wheel.so use_uid ↓コメントをはずす auth required pam_wheel.so use_uid
これでwheelグループに属するユーザーのみ、管理権限に切り替えられるようになりました。
「root権限に切り替えられるユーザーを制限する」の設定を行なった後はwheelグループに所属するユーザーが「su -」コマンドを打った場合、パスワード認証が行なわれ、正しいパスワードを入れるとrootになれるようになります。ここで説明する設定を変更すると、「su -」コマンドを打った場合、パスワードなしにroot権限になれます。
# vi /etc/pam.d/su # Uncomment the following line to implicitly trust users in the "wheel" group. #auth sufficient pam_wheel.so trust use_uid ↓コメントをはずす auth sufficient pam_wheel.so trust use_uid
これでrootにパスワード無しで切り替えられるようになりました。
サーバーの不正アクセスの手段として、SSHへの辞書攻撃が良くあります。
これを防ぐために一番危険なrootでのssh接続を出来ないように設定しましょう。
# vi /etc/ssh/sshd_config : : #PermitRootLogin yes ↓ PermitRootLogin no # service sshd restart sshd を再読み込み中: [ OK ]
これで、root権限でssh接続できなくなります。
ただし、root以外のユーザー権限ではssh接続可能です。
作業中に少し席を外すときなどにvlockコマンドを実行すると端末をロックできて便利です。
vlockコマンドはyumコマンドを使ってインストールできます。
使い方は簡単。vlockコマンドを実行するだけです。vlockコマンドを実行したユーザーのパスワードを入力するとロックが解除されます。
# vlock This TTY is now locked. Use Alt-function keys to switch to other virtual consoles. Please enter the password to unlock. root's Password: #
CentOSのサービス一覧を表示するにはUpstart(CentOS 6 etc..)ではservice --status-all、
Systemd(Fedora 17以降,CentOS7)ではsystemctl -t serviceなどを利用できます。
# service --status-all auditd (pid 1019) is running... crond (pid 1190) is running... ... rsyslogd (pid 1035) is running... sandbox is stopped saslauthd is stopped openssh-daemon (pid 1102) is running...
# systemctl -t service UNIT LOAD ACTIVE SUB DESCRIPTION auditd.service loaded active running Security Auditing Service avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack crond.service loaded active running Command Scheduler dbus.service loaded active running D-Bus System Message Bus firewalld.service loaded active running firewalld - dynamic firewall daem getty@tty1.service loaded active running Getty on tty1 ...
ssh接続はデフォルトで120秒以内に認証に成功しない場合、接続をシャットダウンします。
これを自分のタイプスピードに合わせて可能な限り短く設定することで、より安全にサーバーを運用できます。
# vi /etc/ssh/sshd_config : : #LoginGraceTime 2m (デフォルトは120秒) ↓ LoginGraceTime 20 # service sshd restart sshd を再読み込み中: [ OK ]
これで、制限時間(例では20秒)以内にssh接続の認証に成功しないと接続を切断されるようになり、若干安全になりました。
SSHの待ち受けポートは通常TCP/22番ポートが使われますが、サーバーを外部公開している場合、22番ポートへの不正な接続が行われることが多く、その対策としてポート番号の変更があげられます。
SELinuxを利用していない場合は、SSHDのポート設定とiptablesの設定を行うと、新しいポート番号が有効になります。
srv# vi /etc/ssh/sshd_config .. #Port 22 Port 50022 (ポートを変更) srv# service sshd restart (変更を反映させるためにサービス再起動) srv# vi /etc/sysconfig/iptables .. -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT #削除 -A INPUT -m state --state NEW -m tcp -p tcp --dport 50022 -j ACCEPT #追記 -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited (許可するポートを追加) srv# service iptables restart (iptablesを再起動)
SELinuxを有効化している環境ではSSHDのポート番号を設定変更する前に、semanageコマンドで利用したいポート番号を事前に定義しておく必要があります。コマンド実行後、SSHDのポート設定とiptablesの設定を行ってください。
srv# yum install -y policycoreutils-python (semanageコマンドを利用するためにインストール) srv# semanage port -l | grep ssh ssh_port_t tcp 22 (現在許可されているポートを確認) srv# semanage port -a -t ssh_port_t -p tcp 50022 (利用したいポート番号を設定) ※自由に利用できるポート49152-65535の範囲で決定 srv# semanage port -l | grep ssh ssh_port_t tcp 50022, 22 (ポートが追加されたことを確認)以上の設定を行い、外部PCからアクセスしてみましょう。ポート番号を標準と異なるものを利用するため、オプション-pを使って50022ポートを指定しています。
client# ssh root@192.168.135.154 -p 50022 root@192.168.135.154's password: Last login: Wed Aug 27 20:40:30 2014 srv# (接続できた)
CentOSにはExec-Shieldというバッファオーバーフロー対策機能が備わっています。
デフォルトの設定では1(基本的に有効と明示しない限り無効)に設定されています。
これを有効にします。
# echo 2 > /proc/sys/kernel/exec-shield
元の設定に戻すには1をechoします。
# echo 1 > /proc/sys/kernel/exec-shield
echo 2しただけでは次回再起動時に設定が元に戻ってしまいます。
以下のファイルに設定を書き込んで、常に有効になるように設定します。
# vi /etc/sysctl.conf 最終行に下記を追記 kernel.exec-shield = 2
設定が終わったら、一旦再起動します。
例として、ここではApacheサーバーでの設定を例にあげます。
(1)実行ファイルのパス確認
# which httpd /usr/sbin/httpd
(2)有効に設定
# execstack -c /usr/sbin/httpd
(3)無効に設定
# execstack -s /usr/sbin/httpd
(4)確認
# execstack -q /usr/sbin/httpd
パスの頭に"X"がついていれば無効、"-"がついていれば有効に設定されているのがわかります。